本文转自:https://blog.51cto.com/hujizhou/1854608

ASA 8.3 以后,NAT 算是发生了很大的改变,之前也看过8.4 的ASA,改变的还有×××,加入了Ikev2 。MPF 方法加入了新的东西,QOS 和策略都加强了,这算是Cisco 把CCSP 的课程改为CCNP Security 的改革吧!

wKioL1fg_nihkYSsAABtyac9ZmU506.jpg

拓扑图就是上面的,基本配置都是一样,地址每个路由器上一条默认路由指向ASA。
 

基本通信没问题,关于8.3 以后推出了两个概念,一个是network object 它可以代表一个主机或者子网的访问。另外一个是service object,代表服务。

1、地址池的形式的NAT 配置

老版本代表一个12.1.1.0 的地址池转换成200.200.200.3-200.200.200.254 一对一的转换

nat (inside) 1 12.1.1.0 255.255.255.0
global (outside) 1 200.200.200.3-200.200.200.254

新版本(Network object NAT)

ciscoasa(config)# object network inside

ciscoasa(config-network-object)# subnet 12.1.1.0 255.255.255.0

ciscoasa(config-network-object)# exit

ciscoasa(config)# object network outside-pool

ciscoasa(config-network-object)# range 200.200.200.3 200.200.200.254

ciscoasa(config-network-object)# exit

ciscoasa(config)# object network inside

ciscoasa(config-network-object)# nat (inside,outside) dynamic outside-pool

其实,刚开始接触也挺不习惯的,不过弄懂了就习惯了,它的意思是先定义两个object,一个用于代表转换前的地址范围,一个是转化后的地址范围,最后在转换前的object 进行调用转化后的object。

wKioL1gaxKSDVBuKAABZkiRH3hM725.jpg

由于地址不是一一对应的,所以这里它就自动选择了。这里为了清楚表达要在需要的地方调用这个策略,所以输入了两次object network inside, 其实我们看先创建一个地址池,然后在创建一个需要转换的范围,然后在这个object 里面调用。

2、动态PAT,多对一的配置
老配置里面可以根据一个地址或者直接跟interface 参数来做

nat (inside) 1 12.1.1.0 255.255.255.0
global (outside) 1 200.200.200.1 or interface

新版本(Network object NAT)

ciscoasa(config)# object network inside
ciscoasa(config-network-object)# subnet 12.1.1.0 255.255.255.0
ciscoasa(config-network-object)# nat (inside,outside) dynamic interface

wKioL1gaxLXwN0AFAABc7bD7c34627.jpg

这个策略最简单,就在需要转换的地址进行NAT 配置,这里调用interface 作为转换。
如果是一个单一的地址话。

ciscoasa(config)# object network outside-pat
ciscoasa(config-network-object)# host 200.200.200.3
ciscoasa(config)# object network inside
ciscoasa(config-network-object)# subnet 12.1.1.0 255.255.255.0
ciscoasa(config-network-object)# nat (inside,outside) dynamic outside-pat 调用outside-pat 策略用200.200.200.3 做PAT

wKiom1gaxMjRvZAmAABOJZLHFjA457.jpg

转换成200.200.200.3 出去了

3、Static NAT 一对一转换
老版本,用于服务器公布出去

static (inside,outside ) 200.200.200.3 13.1.1.2

新版本(Network object NAT)

ciscoasa(config)# object network DMZ
ciscoasa(config-network-object)# host 13.1.1.2
ciscoasa(config-network-object)# nat (dmZ,outside) static 200.200.200.3
ciscoasa(config)# access-list 100 permit tcp any host 13.1.1.2 eq telnet
ciscoasa(config)# access-group 100 in interface outside

wKioL1gaxNfABOU_AABREjWHDYQ858.jpg

外部访问DMZ 没问题,但是这里注意的是在8.3 以前的版本是需要放行转换后的地址,而8.3 以后,是放行真实的地址,也就是内部地址。这里还可以用一个obejct 来单独设置一个地址,然后在调用。另外如果是http 的转换或者邮件这些依赖DNS 解析的服务话,而内部有是通过公网地址访问的话,那么就加个DNS 参数nat (dmZ,outside) static 200.200.200.3 dns

4、Static NAT 端口转换

static (inside,outside) tcp 200.200.200.3 2323 13.1.1.2 23

新版本(Network object NAT)

ciscoasa(config)# object network DMZ
ciscoasa(config-network-object)# host 13.1.1.2
ciscoasa(config-network-object)# nat (dmZ,outside) static 200.200.200.3
ciscoasa(config-network-object)# nat (dmZ,outside) static 200.200.200.3 service tcp telnet 2323

这个是格式,前面telnet 是代表内部服务的端口号,而后面的代表转换后的端口号。

wKiom1gaxOfSRfbfAAArPzoFeo4527.jpg

这里要加2323 的端口号。
另外一种转换形式就是跟interface 参数的,它跟8.3 以前一样,接口地址不能作为object 的一部分,只能通过interface来表示,而不是地址形式。

ciscoasa(config-network-object)# nat (dmZ,outside) static interface service tcp telnet 2323

wKiom1gaxQGihMcpAAB8sGziuO0982.jpg

这里8.3 以后放行真实地址的流量就可以了,而不关心转换后的地址。

5、Identity NAT
nat (inside) 0 2.2.2.2 255.255.255.255
在老版本里面有个NAT 0 的策略,分为identity 和bypass,我们通常用的deny ××× 流量不做NAT 用的是bypass,不过在8.3 以后实现方法有点不同。在这个拓扑中,inside 新增加一个2.2.2.2 的地址,不被转换出去。

ciscoasa(config)# object network inside
ciscoasa(config-network-object)# host 2.2.2.2
ciscoasa(config-network-object)# nat (inside,outside) dynamic interface

wKioL1gaxR6io9YtAABbQEzPvuk034.jpg

默认情况下是转换地址出去的,做个identity 后
新版本(Network object NAT)

ciscoasa(config)# object network inside1
ciscoasa(config-network-object)# host 2.2.2.2
ciscoasa(config-network-object)# nat (inside,outside) static 2.2.2.2

wKioL1gaxTDSMXMbAABUDjdUnFQ449.jpg

这里自己转换自己,它是优于PAT 的。

6、policy NAT

access-list 100 permit ip 12.1.1.0 255.255.255.0 
nat (inside) 1 access-list 100
global (outside) 1 200.200.200.3
globat (outside) 1 interface

host 1.1.1.1 关于12.1.1.0 网段去往1.1.1.1 的转换用200.200.200.3,在老版本中,叫做策略NAT,根据访问不同的网段,转换成不同地址出去。
新版本(Twice NAT) ,这个是两次NAT,一般加入了基于目的的元素,而之前的network object 只是基于源的,通常情况下使用object 就能解决问题了,这个只是在特殊情况下使用。一般我们把object 叫做Auto NAT ,而Twice NAT 叫做manual NAT

这是outside 有个1.1.1.1 和3.3.3.3 的地址,当12.1.1.0 的网段访问1.1.1.1 的时候转换成200.200.200.3 出去,而其余的就用接口地址转换。

ciscoasa(config)# object network policy 这个代表访问1.1.1.1
ciscoasa(config-network-object)# host 1.1.1.1
ciscoasa(config)# object network outside-pat 用这个地址做专门访问1.1.1.1 的PAT
ciscoasa(config-network-object)# host 200.200.200.3
ciscoasa(config)# object network inside
ciscoasa(config-network-object)# subnet 12.1.1.0 255.255.255.0
ciscoasa(config-network-object)# nat (inside,outside) dynamic interface

这里定义了内部网段,并且用接口地址做PAT。关于Twice NAT 是在全局下做的,而Auto NAT 是基于在Object 下做的。

ciscoasa(config)# nat (inside,outside) source dynamic inside outside-pat destination static policy policy

这个跟普通的Auto NAT,这里多了个destination 目的,policy policy 这是书写格式。看下效果

wKiom1gaxV7zXABeAABUUv14Zn0148.jpg
wKioL1gaxV7T_KWFAABOPvLtLSQ785.jpg

效果出来了,访问1.1.1.1 的时候用200.200.200.3 转换,而访问3.3.3.3 的时候用interface 转换出去。

××× 流量旁路

在老版本里面我们用NAT 0 来解决这个问题,而在新版本里面没有NAT 0 这个概念了,它用Twice NAT+Identify 组合的使用

access-list 100 permit ip host 1.1.1.1 host 2.2.2.2
nat (inside) 0 access-list 100
object network local-***-traffic
host 1.1.1.1
object netowork remote-***-traffic
host 2.2.2.2
nat (inside,outside) source static local-***-traffic local-***-traffic destination static remote-***-traffic
remote-***-traffic (全局下)

执行顺序:
1、manual NAT:(Twice NAT):、Twice NAT+Identify (××× 旁路) 、优先选择Twice NAT 有服务的转换、选择Twice NAT
关于Twice NAT 的顺序完全是谁在最前面谁最优,没有什么比较的,可以通过人为的修改顺序。
2、Auto NAT :1、identify 2、static 3、dynamic 其中static 是优于dynamic 的。

如果static 存在多个,那么首先比较子网掩码范围,大的优先,也就是32 位由于24 位,如果都一样,就比较网络位,小的优先,就是10.1.1.0/24 网段比20.1.1.0/24 优先,最后都相同比较object name,字母最前面的优先,也就是ab 是优于bc 的Dynamic 的话,顺序也跟static 一样,只是static 是优于dyanmic 的