本文主要是介绍网络ACL(NACL),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
关注公众号:AWS爱好者(iloveaws)
文 | 沉默恶魔(禁止转载,转载请先经过作者同意)
网站:www.iloveaws.cn
Hello大家好,欢迎来到《AWS解决方案架构师认证 Professional(SAP)中文视频培训课程》,我们今天的视频课程内容为网络ACL。网络访问控制列表 (ACL) 是 VPC 的一个可选安全层,可用作防火墙来控制进出一个或多个子网的流量。
我们开始今天的课程内容。
我们来看下网络ACL的一些重要知识点。
网络ACL知识点
1、网络ACL是无状态的,这意味着允许入站流量的响应,返回的数据流必须被出站规则明确允许(反之亦然)。
2、网络ACL是在子网级别运行;而安全组在实例级别运行。我们看下PPT右侧的图:
子网1中有一台EC2,安全组是与这台EC2的网络接口关联的,因此安全组是在实例级别运行的。然而,对于网络ACL,它不是在实例级别运行,而是在子网级别运行。
我们看下图,子网1关联了一个网络ACL,这个子网1中可能有数百台EC2实例,那么对于这个网络ACL规则的调整,是会影响关联的子网1中的所有EC2实例的。
假设来自互联网网关的数据流会使用路由表中的路由,路由到合适的子网,与子网关联的网络 ACL 规则控制允许进入子网的数据流,与实例关联的安全组规则控制允许进入实例的数据流。
3、VPC中的每个子网都必须与一个网络ACL相关联。如果您没有明确地将子网与网络ACL相关联,则子网将自动与默认网络ACL关联。
4、(上面提到了默认网络ACL)默认网络ACL的内容为允许所有入站和出站的流量, 也就是允许所有流量流进和流出与其关联的子网。所以,当我们在子网启动实例后,如果使用的是默认网络ACL,那么至少网络ACL对于启动的实例是放行的。
5、您也可以创建自定义网络 ACL 并将其与子网相关联。
默认情况下,每个自定义网络 ACL 都拒绝所有入站和出站流量,直至您添加规则。所以如果您自己创建了自定义网络ACL,要注意默认情况下会拒绝所有出入站流量,需要根据实际需求自行调整规则,这一点也是容易忽视的地方。
安全组和NACL的差异
我们接下来看下安全组和网络ACL的差异,这也是很多同学可能比较关心的部分。
1、安全组在实例级别运行,网络ACL在子网级别运行。
2、安全组仅支持配置允许规则,在安全组无法配置拒绝规则。例如配置显式拒绝某个IP地址访问EC2实例,这个安全组做不到;而网络ACL支持允许规则和拒绝规则。我举个例子,比如我们有一台EC2,对外开放了80端口的访问,如果想要拒绝某个来源IP对实例的80端口访问,这个通过安全组是做不到的,需要使用网络ACL添加相应的拒绝规则。
3、安全组是有状态的,返回的数据流会被自动允许;而网络ACL是无状态的,返回数据流必须被规则明确允许,就是说使用网络ACL配置了允许进站的规则必须要有相应允许出站的规则。
4、规则判断的区别,安全组会在决定是否允许数据流前评估所有规则;网络ACL会按照规则的数字,顺序处理所有规则,这块我们后面会进行演示。
5、安全组只有在与实例关联的情况下,规则才会被应用到实例;而网络ACL自动应用于与之关联的子网的所有实例,网络ACL提供了额外的防御层。
以上就是安全组与网络ACL的差异。
接下来的内容我们切换到AWS管理控制台,演示前面讲的内容。
NACL实操演示
我们切换到EC2的控制台,当前有一台EC2在运行,我们使用这个EC2来做下面的演示。
首先,看下这台EC2的安全组的入站规则,当前对所有来源开放了ICMP,以及TCP的22端口。如果我们现在要禁止一个特定的IP访问这台EC2的22端口,使用安全组是做不到的,因为前面讲了,安全组只支持配置允许的规则,这就需要配置网络ACL添加相应的拒绝规则。
我们看下当前的网络ACL,进入到VPC控制台,然后安全性-网络ACL,可以看到目前我们有一个网络ACL,默认值为“是”,意味着它是创建的默认网络ACL;
这个网络ACL目前关联了3个子网。您可以将网络 ACL 与多个子网关联。但是,一个子网一次只能与一个网络 ACL 关联。当您将一个网络 ACL 与一个子网关联时,将会删除之前的关联。
页面下方是网络ACL的入站规则和出站规则,当前入站和出站各包括两条规则,我们看一下规则,规则左边是编号列表,第一条规则编号为100,允许了所有的流量入站;第二条规则编号为*号,规则内容为禁止所有流量入站。
网络ACL是按顺序评估规则,从编号最小的规则开始,以判断是否允许流量进入或离开任何与网络 ACL 关联的子网,也就是说在网络ACL中,规则的编号越小,它的优先级就越高。
假设现在有入站流量匹配到了编号100这条规则,那么网络ACL就会放行此入站流量,而不会在继续向后评估规则。也就是说网络ACL从最小编号的规则开始匹配,匹配了规则的流量就会执行该规则相应的放行或者禁止动作,而不在继续向后匹配规则。
我们看下现在的默认网络ACL的规则,默认允许了与其关联的子网的所有入站和出站的流量。
接下来我们就测试下,在我的本地终端是否能够访问这台EC2。
我们切换到EC2控制台页面,复制这台EC2的外网IP,然后在切换到我本地的终端,使用PING命令来测试下:
ping 54.180.109.183
可以看到返回的信息显示可以PING通的,我本地电脑是可以和这台EC2通信的。
接下来我们做个测试,修改下这台EC2所在子网关联的网络ACL的入站规则,我们添加一个入站规则:
添加规则,编号输入90 ,然后选择所有流量,协议,端口范围以及源都保持和编号规则100的内容一致,然后允许/拒绝这里选择拒绝,然后完成添加规则。
我们看下,新添加的规则的编号为90,内容为拒绝所有入站流量;之前默认的规则编号100,内容为允许所有入站流量。
然后我们切换到本地终端在PING一下EC2的IP :
ping 54.180.109.183
可以看到目前我们已经无法ping通ec2了,ping的访问被拒绝了。
这是因为我们新添加的规则拒绝了所有的入站流量,当我的本地流量到达网络ACL时,网络ACL规则开始评估流量,新添加的这个规则的编号为90,目前优先级最高,规则内容为禁止所有入站流量,我们刚刚访问流量匹配了这条规则,所以被网络ACL禁止访问,有规则匹配后,就不会再继续向下匹配其他规则,所以我们的入站流量被拒绝了。
我们继续做测试,我们编辑下入站规则,把之前添加的规则编号由90修改为110。然后,现在允许规则的优先级高于拒绝规则的优先级,我们继续PING下EC2,可以看到我们的PING又被放行了。
接下来我们看下另一个案例,默认网络ACL规则内容为放行所有入站和出站的流量,我们前面讲过,如果我们想要拒绝某个特定的来源IP对实例的访问,这个需求通过安全组是做不到的,需要使用网络ACL。
看下我现在本地出口的ip,为114.245.93.139,假设我们现在要配置网络ACL规则,拒绝我这个IP访问EC2,但是允许除此IP外的其他访问流量,我们来配置下网络ACL。
编辑入站规则,我们将之前测试添加的规则删除,然后新添加一个规则,配置编号为90使其优先级当前最高,然后所有流量,所有协议,全部端口,将 “源” 配置为我的出口IP,然后选择拒绝,保存。
我们看下现在的规则,如果有来源IP为114.245.93.139的流量到达网络ACL,编号90的规则就会匹配流量,规则拒绝此来源IP的访问并不会向后在匹配其他规则;
如果来源不是此特定IP的其他的流量,那么就不会匹配编号90的规则,会继续匹配后面的规则,也就是编号100的规则,规则内容是放行所有入站流量,所以最终入站请求会被放行。这样就实现了上述案例的需求,禁止某个特定IP的入站访问,但是允许其他除此IP外访问的需求。
好的,我们在回到前面的PPT,默认网络ACL的内容为允许所有入站和出站的流量,但如果您自己创建了自定义网络ACL,默认的情况下,自定义的网络ACL是拒绝所有入站和出站流量的,直到您添加相应的规则,我们来测试下是不是这样
我们创建一个自定义的网络ACL,然后看下出站、入站的规则,可以看到创建的自定义的网络ACL是拒绝所有入站和出站流量的,需要根据需求自行添加相应允许规则。
很多同学在实际使用网络ACL的时候都忽视了这一点,导致无法访问EC2,所以这里单独提出来讲一下。
好的,以上就是我们今天的视频课程内容,希望能够帮助大家更深入的理解网络ACL。
希望此系列教程能为您通过 AWS解决方案架构师认证 Professional 认证考试带来帮助,如您有任何疑问
关注公众号:AWS爱好者(iloveaws)
文 | 沉默恶魔(禁止转载,转载请先经过作者同意)
网站:www.iloveaws.cn
这篇关于网络ACL(NACL)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!