ACL 和NAT的基本使用
一、ACL概述:
A、介绍:
着网络的飞速发展,网络安全和网络服务质量QoS(QualityofService)问题日益突出。访问控制列表(ACL,AccessControlList)是与其紧密相关的一个技术。
ACL:Acess Control List,即访问控制列表。这张表中包含了匹配关系、条件和查询语句,ACL表只是一个框架结构,其目的是为了对某种访问进行控制,使用包过滤技术,在路由器上读取第三层及第四层包头中的信息如源地址、目的地址、源端口、目的端口等,根据预先定义好的规则对包进行过滤,从而达到访问控制的目的。
访问控制列表ACL增加了在路由器接口上过滤数据包出入的灵活性,可以用来限制网络流量,也可以控制用户和设备对网络的使用,一般的路由器都提供了ACL功能,对于一些网络流量不是很大的场合,完全可以借助ACL使路由器实现防火墙的部分功能,但他不能完全的代替防火墙。当接收一个数据包时,ACL先检查访问控制列表,再执行相应的接受和拒绝的步骤,并不能像专业的防火强那样作相应的数据包的分析。如果让ACL代替防火墙,会让路由器无法工作,ACL只是初级防范。
局限性:过滤的依据仅仅只是第三层和第四层包头中的部分信息,如无法识别到具体的人,无法识别到应用内部的权限级别等。因此,要和系统级及应用级的访问权限控制结合使用。
访问控制列表在接口应用的方向
出:已经过路由器的处理,正离开路由器接口的数据包
入:已到达路由器接口的数据包,将被路由器处理

B、ACL 列表组成:
1、ACL 字段解释:
ACL由若干条permit或deny语句组成。每条语句就是该ACL的一条规则,每条语句中的permit或deny就是与这条规则相对应的处理动作。华为和思科的ACL都是默认拒绝一切,但华为模拟器默认是允许一切。

ACL名称:通过名称来标识ACL,更加方便记忆,这种ACL,称为命名型ACL。命名型ACL实际上是“名字+数字”的形式,可以在定义命名型ACL时同时指定ACL编号。
ACL编号:用于标识ACL,也可以单独使用ACL编号,表明该ACL是数字型。不同的ACL类型使用不同的ACL编号取值标识。
规则:即描述报文匹配条件的判断语句。
规则编号:用于标识ACL规则。可以自行配置规则编号,也可以由系统自动分配。系统按照规则编号从小到大的顺序,将规则依次与报文匹配,一旦匹配上一条规则即停止匹配。
动作:报文处理动作,包括permit/deny两种,表示允许/拒绝。
匹配项:描述每条规则的报文匹配条件(报文的源地址、目的地址、端口号等)的判断语句,设备基于这些规则的匹配项进行报文匹配

2、规则编号与步长
规则编号(Rule ID):一个ACL中的每一条规则都有一个相应的编号,称为规则编号,用来标识ACL规则。可以自定义,也可以系统自动分配。
步长(Step):步长是系统自动为ACL规则分配编号时,每个相邻规则编号之间的差值,这个差值称为“步长”。缺省值/缺省步长为5。所以规则编号就是5/10/15…以此类推。步长的作用是为了方便后续在旧规则之间,插入新的规则。
Rule ID分配规则:系统为ACL中首条未手工指定编号的规则分配编号时,使用步长值(例如步长=5,首条规则编号为5)作为该规则的起始编号;为后续规则分配编号时,则使用大于当前ACL内最大规则编号且是步长整数倍的最小整数作为规则编号。

3、ACL 分类:
ACL 总得可以分成2大类,分别为基本ACL 和高级 ACL 。基本 ACL 只能对数据包源地址进行匹配。高级 ACL 可以对数据包的五元组进行匹配(源IP,目的IP,源端口,目的端口,协议)。

C、ACL 匹配机制:
1、配置机制:
不同厂商机制不同,ACL的匹配机制概括来说就是:
配置ACL的设备接收报文后,会将该报文与ACL中的规则逐条进行匹配,如果不能匹配上,就会继续尝试去匹配下一条规则。一旦匹配上,则设备会对该报文执行这条规则中定义的处理动作,并且不再继续尝试与后续规则匹配。
①、如果ACL不存在,则返回ACL匹配结果为:不匹配。
②、如果ACL存在,则查找设备是否配置了ACL规则。
③、如果规则不存在,则返回ACL匹配结果为:不匹配。
④、如果规则存在,则系统会从ACL中编号最小的规则开始查找。
⑤、如果匹配上了permit规则,则停止查找规则,并返回ACL匹配结果为:匹配(允许)。
⑥、如果匹配上了deny规则,则停止查找规则,并返回ACL匹配结果为:匹配(拒绝)。
如果未匹配上规则,则继续查找下一条规则,以此循环。如果一直查到最后一条规则,报文仍未匹配上,则返回ACL匹配结果为:不匹配。从整个ACL匹配流程可以看出,报文与ACL规则匹配后,会产生两种匹配结果:“匹配”和“不匹配”。
匹配(命中规则):指存在ACL,且在ACL中查找到了符合匹配条件的规则。不论匹配的动作是“permit”还是“deny”,都称为“匹配”,而不是只是匹配上 permit 规则才算“匹配”。
不匹配(未命中规则):指不存在ACL,或ACL中无规则,再或者在ACL中遍历了所有规则都没有找到符合匹配条件的规则。以上三种情况,都叫做“不匹配”。
Acl number 2000 match-order auto 深度优先匹配::地址范围小的被优先匹配

2、通配符:
a、通配符掩码和IP地址结合使用以描述一个地址范围;
b、通配符和子网掩码相似,但含义不同:0表示对应位需要比较,1表示对应为不需要比较

通配符掩码的应用示例:

D、华三ACL 规则:
IPv4基本ACL:
rule [ rule-id ] { deny | permit } [ counting | fragment | logging | source { source-address source-wildcard | any } | time-range time-range-name | vpn-instance vpn-instance-name ] *;logging参数是否生效取决于引用该ACL的模块是否支持日志记录功能,例如报文过滤支持日志记录功能,如果其引用的ACL规则中配置了logging参数,该参数可以生效。
IPv4高级ACL:
创建匹配普通报文的规则:rule [ ****rule-id ****] ****{ deny | permit } ****protocol ****[ ****{ ****{ ack ack-value ****| fin fin-value ****| psh psh-value ****| rst rst-value ****| syn syn-value ****| urg urg-value ****} ***** ****| established } ****| counting | destination { ****dest-address ****dest-wildcard ****| any } ****| destination-port operator ****port1 ****[ ****port2 ****] ****| ****{ ****{ precedence precedence ****| tos tos ****} ***** ****| ****{ precedence precedence ****| ecn ecn ****} ***** ****| ****{ dscp dscp ****| ecn ecn ****} ***** ****} ****| fragment | icmp-type { ****icmp-type ****[ ****icmp-code ****] ****| ****icmp-message ****} ****| logging source { ****source-address source-wildcard | any } ****| source-port operator port1 ****[ ****port2 ****] ****| time-range time-range-name ****| vpn-instance vpn-instance-name ****] *****
创建匹配封装报文的规则:rule [ ****rule-id ****] ****{ deny | permit } vxlan [ destination { ****dest-address dest-wildcard ****| any } ****| source { ****source-address source-wildcard ****| any } ****| source-port operator port1 ****[ ****port2 ****] ****| vxlan-id vxlan-id ****] ***** inner-protocol inner-protocol ****[ counting | inner-destination { ****dest-address dest-wildcard ****| any } ****| inner-established | inner-source { ****source-address source-wildcard ****| any } ****| logging | time-range time-range-name ****] *****
二、NAT 介绍:
A、概述:
1、产生背景:
随着接入Internet的计算机数量的不断猛增,早期网络通信协议和标准的组织已经意识到了IPv4地址马上被耗尽的危机,因此制定了短期措施,其中就包含NAT。
NAT(Network Address Translation,网络地址转换)是将IP 数据报报头中的IP 地址转换为另一个IP 地址的的功能。
通常,一个局域网由于申请不到足够互联网IP地址,或者只是为了编址方便,在局域网内部采用私有IP地址为设备编址,当设备访问外网时,再通过NAT将私有地址转换为合法的公网IP地址。

2、私网IP范围:
公网IP是指在因特网上直接可达的IP地址,如果你有一个公网地址,那就意味着你不但能访问别人,还能被人访问。
为了弥补IPv4地址日益枯竭的矛盾,在A、B、C类地址中专门划出一小块地址作为全世界各地建设局域网使用,这些划出来专门作为局域网内网使用的IP地址称为私网IP地址。
这些私网IP地址在访问 Internet 时会经过 NAT 技术转换为公网地址再访问 Internet。所以在公网上看不到这些私有地址

3、NAT 作用:
NAT 不仅完美地解决了 lP 地址不足的问题,同时还起到防火墙的作用,隐藏内部网络的拓扑结构和设备,从而能够有效地避免来自网络外部的攻击。
这样对于外部主机来说,内部主机是不可见的。但是,对于P2P 应用来说,却要求能够建立端到端的连接,所以如何穿透NAT 也是P2P 技术中的一个关键。
B、分类:
1、转换方式上划分:
NAT 从转换形式上划分为以下几种类型:静态 NAT 、动态地址 NAT 、地址端口转换 NAPT 。
静态NAT :静态地址转换将内部私网地址与合法公网地址进行一对一的转换,且每个内部地址的转换都是确定的。
动态NAT :动态地址转换也是将内部本地地址与内部合法地址一对一的转换,但是动态地址转换是从合法地址池中动态选择一个未使用的地址来对内部私有地址进行转换。
PAT(Port Address Translation)是基于端口的地址转换,也被称为端口转换或Overloaded NAT。PAT将多个私有IP地址映射到一个公共IP地址上,通过使用不同的端口号来区分内部主机。这意味着所有内部主机共享一个公共IP地址和一个公共端口号。PAT最常见的应用是在家庭网络或小型企业中。
NAPT(Network Address Port Translation)是基于网络地址和端口的地址转换,也被称为IP masquerading或NAT。与PAT不同,NAPT使用唯一的公共IP地址来映射多个私有IP地址,并使用不同的端口号来区分内部主机。这使得内部主机可以同时与互联网通信,而不会冲突。NAPT常用于企业网络中,因为它可以支持多个IP地址范围和多个服务。注意:PAT只映射源IP地址和端口号,而NAPT则同时映射源和目标IP地址和端口号。
2、技术实现方式上划分:
从实现的技术角度,又可以将NAT 分成如下几类:全锥NAT(Full Cone NAT) 、限制性锥NAT (Restricted Cone NAT )、端口限制性锥NAT( Port Restricted Cone NAT) 、对称NAT ( Symmetric NAT) 。
全锥NAT :全锥NAT 把所有来自相同内部IP 地址和端口的请求映射到相同的外部IP 地址和端口。任何一个外部主机均可通过该映射发送数据包到该内部主机。
限制性锥NAT :限制性锥NAT 把所有来自相同内部IP 地址和端口的请求映射到相同的外部IP 地址和端口。但是, 和全锥NAT 不同的是:只有当内部主机先给外部主机发送数据包, 该外部主机才能向该内部主机发送数据包。
端口限制性锥NAT :端口限制性锥NAT 与限制性锥NAT 类似, 只是多了端口号的限制, 即只有内部主机先向外部地址:端口号对发送数据包, 该外部主机才能使用特定的端口号向内部主机发送数据包。
对称NAT :对称NAT 与上述3 种类型都不同, 不管是全锥NAT ,限制性锥NAT 还是端口限制性锥NAT ,它们都属于锥NAT (Cone NAT )。当同一内部主机使用相同的端口与不同地址的外部主机进行通信时, 对称NAT 会重新建立一个Session ,为这个Session 分配不同的端口号,或许还会改变IP 地址。
C、NAT 转换实例:
1、静态NAT:
静态转换是指将内部地址和外部地址进行一对一的转换。这种方法要求申请到的合法公网IP地址足够多,可以与内部IP地址一一对应。静态NAT一般用于那些需要固定的合法IP地址的主机,比如Web服务器、FTP服务器、E-mail服务器等。

2、动态NAT:
将多个合法IP地址统一的组织起来,构成一个IP地址池,当有主机需要访问外网时,就分配一个合法IP地址与内部地址进行转换,当主机用完后,就归还该地址。对于NAT池,如果同时联网用户太多,可能出现地址耗尽的问题。

3、PAT:
端口多路复用(Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation)采用端口多路复用方式。内部网络的所有主机均可共享一个合法外网IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。
NAT在使用场景上分为SNAT(源地址NAT)、DNAT(目的地址NAT)和双向地址NAT
SNAT:源地址转换即内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址,内网的多部主机可以通过一个有效的公网ip地址访问外部网络。主要使用场景:局域网私网IP使用有限的公网IP访问互联网。

生成记录,把转换前和转换后的Ip地址记录下来

DNAT:当内部需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT。
主要使用场景:主要用于内部服务对外发布。

当网络内部有一台服务器要对外发布时,出口NAT设备,将公网IP和设备转换成私网IP的过程,叫DNAT,公司内部使用的是A类的私网网段10网段,公司 可用的ip只有一个123.1.1.1,公司内有一台网站服务器,ip地址是10.1.1.100,端口:8080,公司需要将这台服务器提供给互联网用户访问。只有公网IP才能被用户访问,不仅需要在出口NAT上配置Ip和路由信息,还需要配置DNAT,将公网IP123.1.1.1:80映射给内网IP地址10.1.1.100:8080,这样互联网用户可以通过123.1.1.1:80来进行网站的访问。对访问数据流进行分析:
互联网上有一个用户,它的IP地址是200.1.1.1:54321,访问123.1.1.1端口号80,在互联网的访问期间,目的Ip是123.1.1.1,目的端口是80,但是在经过公司出口的NAT设备时,匹配上DNAT策略,对目的ip和目的端口进行替换,目的IP转换为公司内部的私网Ip:10.1.1.100,目的端口转换为8080,源ip和源端口都不变,同时NAT会在DNAT表中生成一条记录。

双向地址转换:
常规地址转换技术只转换报文的源地址或目的地址,而双向地址转换(Bidirectional NAT)技术可以将报文的源地址和目的地址同时转换。
主要使用场景:内网用户通过外网IP/域名访问内网业务目的:1.内外网的访问方式保持一致2.安全的考虑,隐藏内网服务器iP

如果要求内网用户(192.168.1.1.)访问内网WEB服务器192.168.1.100,但必须通过访问公网IP200.1.1.1。且只是配置DNAT,能否满足这一需求?
配置DNAT的话,可以通过公网IP访问内网ip,数据流在经过NAT设备时可以匹配到公网ip200.1.1.1,目的ip转换成192.168.1.254,请求的数据会通过路由到达服务器上,服务器可以进行正常的数据应答。只不过应答的源Ip是192.168.1.100,目的ip是192.168.1.1,数据直接转发到192.168.1.1的这台电脑上。注:PC发出请求的目的IP是一个公网200.1.1.1,但是应答源IP的是一个私网ip 192.168.1.100。对电脑来说会直接丢包拒收。双向NAT就可以解决这个问题。
双向NAT的数据流是:在请求的数据经过NAT设备时,NAT设备对源母IP同时进行替换,目的ip转换成内网真实的IP,源IP替换成出口NAT 口的IP地址:192.168.1.254.和DNAT不同是回数据时又经过了一次NAT设备进行转换。将源IP和目的ip还原回去。

4、EasyIP:
一种简化的 PAT 实现方式,属于源 NAT 的特殊形式,主要用于小规模网络。
特有特征
地址映射:多内网 IP 共享网关出接口的公网 IP(动态获取或固定),通过端口复用实现。
配置简单:无需定义公网 IP 地址池,直接绑定出接口和内网流量规则(如 ACL),适合非专业人员操作。
动态适配:自动随出接口公网 IP 变化(如拨号场景的临时 IP),无需手动调整映射规则。
适用场景:小型办公室、家庭网络等公网 IP 资源有限,且内网设备数量较少的环境。
关联与对比
NAT 与 EasyIP:EasyIP 是 PAT 的简化版本,属于源 NAT 的子集,核心优势是配置简单、适配动态公网 IP。
NAT 与 NBMA:NBMA 网络中若需跨网段访问(如私网→公网),仍可部署 NAT,但需注意路由邻居与 NAT 规则的兼容性(避免地址转换影响邻居通信)。
核心共性:均服务于网络互通,NAT 解决地址资源与内外网隔离问题,NBMA 解决特殊链路的邻居发现问题,EasyIP 则是 NAT 在简单场景的高效实现。
C、NAT 配置格式:
1、出方向一对一静态地址转换**:**
配置出方向一对一静态地址转换映射。
nat static outbound local-ip global-ip [ acl { ipv4-acl-number | **name ipv4-acl-name } [ reversible ] ] [ rule rule-name ] [ priority priority ] [ disable ] [ counting ]
(可选)调整出方向一对一静态NAT规则的匹配优先级。
nat static outbound rule move nat-rule-name1 { after | before } nat-rule-name2
2、出方向网段对网段静态地址转换
配置出方向网段对网段静态地址转换映射。
nat static outbound net-to-net local-start-address local-end-address global global-network { mask-length | mask } [ acl { ipv4-acl-number | **name ipv4-acl-name } [ reversible ] ] [ rule rule-name ] [ priority priority ] [ disable ] [ counting ]
3、入方向网段对网段静态地址转换
配置入方向网段对网段静态地址转换映射。
nat static inbound net-to-net global-start-address global-end-address local local-network { mask-length | mask } [ acl { ipv4-acl-number | name ipv4-acl-name } [ reversible ] ] [ rule rule-name ] [ priority priority ] [ disable ] [ counting ]
4、配置接口上出方向的动态地址转换

5、配置入方向动态地址转换

5、接口上的内部服务器

参考和引用博文: