如图所示:
inside主机基本配置
inside>en
inside#conf t
inside(config)#int f0/0
inside(config-if)#ip add 10.1.1.2 255.255.255.0
inside(config-if)#no shutdown
inside(config-if)#exit
inside(config)#ip route 0.0.0.0 0.0.0.0 10.1.1.1
inside(config)#enable password cisco
inside(config)#line vty 0 4
inside(config-line)#pass
inside(config-line)#password cisco
inside(config-line)#login
inside(config-line)#exit
inside(config)#
outside主机基本配置
outside>en
outside#conf t
outside(config)#int f0/0
outside(config-if)#ip add 20.1.1.2 255.255.255.0
outside(config-if)#no shutdown
outside(config-if)#exit
outside(config)#ip route 0.0.0.0 0.0.0.0 20.1.1.1
outside(config)#enable pass cisco
outside(config)#line vty 0 4
outside(config-line)#password cisco
outside(config-line)#login
outside(config-line)#exit
outside(config)#
CISCO ASA配置
ciscoasa> en
Password:
ciscoasa# conf t
ciscoasa(config)# int e0/0
ciscoasa(config-if)# nameif inside
INFO: Security level for "inside" set to 100 by default.
ciscoasa(config-if)# security-level 100
ciscoasa(config-if)# ip add 10.1.1.1 255.255.255.0
ciscoasa(config-if)# no shutdown
ciscoasa(config-if)# int e0/1
ciscoasa(config-if)# nameif outside
INFO: Security level for "outside" set to 0 by default.
ciscoasa(config-if)# security-level 0
ciscoasa(config-if)# ip add 20.1.1.1 255.255.255.0
ciscoasa(config-if)# no shutdown
ciscoasa(config-if)#
基本测试
inside#ping 10.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.1, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 8/27/52 ms
inside#
outside#ping 20.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 20.1.1.1, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 12/34/64 ms
outside#
inside主机和outside主机都能ping通网关。
inside主机向outside主机发起telnet连接
inside#telnet 20.1.1.2
Trying 20.1.1.2 ... Open
User Access Verification
Password:
outside>en
Password:
outside#
ASA默认从高安全级别到低安全级别的访问是允许的,telnet连接属于tcp 连接,
ciscoasa# show conn detail
1 in use, 1 most used
Flags: A - awaiting inside ACK to SYN, a - awaiting outside ACK to SYN,
B - initial SYN from outside, C - CTIQBE media, D - DNS, d - dump,
E - outside back connection, F - outside FIN, f - inside FIN,
G - group, g - MGCP, H - H.323, h - H.225.0, I - inbound data,
i - incomplete, J - GTP, j - GTP data, K - GTP t3-response
k - Skinny media, M - SMTP data, m - SIP media, n - GUP
O - outbound data, P - inside back connection, q - SQL*Net data,
R - outside acknowledged FIN,
R - UDP SUNRPC, r - inside acknowledged FIN, S - awaiting inside SYN,
s - awaiting outside SYN, T - SIP, t - SIP transient, U - up
X - inspected by service module
TCP outside:20.1.1.2/23 inside:10.1.1.2/11001 flags UIO
outside#show users
Line User Host(s) Idle Location
* 0 con 0 idle 00:00:00
130 vty 0 idle 00:00:15 10.1.1.2
Interface User Mode Idle Peer Address
从低安全级别到高安全级别的访问,其结果是无法访问。
outside#telnet 10.1.1.2
Trying 10.1.1.2 ...
% Connection timed out; remote host not responding
如果让outside主机能够访问inside主机,需在防火墙上写入站规则:
ciscoasa(config)# access-list out-to-in permit ip host 20.1.1.2 host 10.1.1.2
ciscoasa(config)# access-group out-to-in in interface outside
ciscoasa(config)#
测试
outside#telnet 10.1.1.2
Trying 10.1.1.2 ... Open
User Access Verification
Password:
inside>en
Password:
inside#
入站规则也可以这样写
ciscoasa(config)# access-list out-to-in permit tcp host 20.1.1.2 host 10.1.1.2 eq 23
ciscoasa(config)# access-group out-to-in in interface outside
如果在ASA防火墙上做控制出站的规则,可以这样写
ciscoasa(config)# access-list in-to-out deny ip 10.1.1.0 255.255.255.0 any
ciscoasa(config)# access-list in-to-out permit ip any any
ciscoasa(config)# access-group in-to-out in interface inside
测试
inside#telnet 20.1.1.2
Trying 20.1.1.2 ...
% Connection refused by remote host
关于ICMP报文穿越ASA防火墙的实验
从内部主机ping防火墙inside接口
R1#ping 10.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.1, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 4/20/36 ms
R1#
关闭到inside接口的ping
ciscoasa(config)# icmp deny any echo inside
测试
R1#ping 10.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.1, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
从内部主机,ping到ASA防火墙的inside接口,由于使用了ICMP ACL,所以导致ping失败
查看ICMP的ACL
ciscoasa# show run icmp
icmp unreachable rate-limit 1 burst-size 1
icmp deny any echo inside
ciscoasa#
开启到ASA防火墙的inside接口的ping
ciscoasa(config)# clear configure icmp
检查是否可以再次ping到防火墙的inside接口
R1#ping 10.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 12/20/28 ms
R1#
配置防火墙的outside接口,使它拒绝所有Ping请求,而允许所有不可达的消息
ciscoasa(config)# icmp deny any echo outside
ciscoasa(config)# icmp permit any unreachable outside
测试
R2#ping 20.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 20.1.1.1, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
保存配置
ciscoasa(config)# write memory
注意在GNS3上模拟ASA,保存配置的命令不可用。
默认情况下,禁止ICMP报文穿越ASA防火墙,在本拓扑中R1 ping R2是不通的,防火墙在outside接口上拒绝返回的ICMP报文。默认情况下,ASA对icmp协议无状态化处理,即不会将ICMP流量存在Conn表中。
如果需要做排错或维护任务,可暂时允许ICMP报文穿越ASA防火墙。
ciscoasa(config)# access-list aclicmp permit icmp any any
ciscoasa(config)# access-group aclicmp in interface outside
测试
R1#ping 20.1.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 20.1.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/32/56 ms
R1#
如何在ASA防火墙上配置静态路由
ASA支持静态和默认路由,动态路由
R1#conf t
R1(config)#int f0/0
R1(config-if)#ip add 10.1.1.2 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#enable password cisco
R1(config)#line vty 0 4
R1(config-line)#password cisco
R1(config-line)#login
R1(config-line)#exit
R1(config)#ip route 0.0.0.0 0.0.0.0 10.1.1.1
R2>en
R2#conf t
R2(config)#interface f1/0
R2(config-if)#ip add 30.1.1.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#int f0/0
R2(config-if)#ip add 20.1.1.1 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#
R2(config)#enable password cisco
R2(config)#line vty 0 4
R2(config-line)#password cisco
R2(config-line)#login
R2(config-line)#exit
R3#conf t
R2(config)#ip route 0.0.0.0 0.0.0.0 30.1.1.1
R3(config)#int f0/0
R3(config-if)#ip add 20.1.1.2 255.255.255.0
R3(config-if)#no shu
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#enable password cisco
R3(config)#line vty 0 4
R3(config-line)#password cisco
R3(config-line)#login
R3(config-line)#exit
R3(config)#ip route 0.0.0.0 0.0.0.0 20.1.1.1
测试
R1#telnet 30.1.1.2
Trying 30.1.1.2 ... Open
R1#telnet 20.1.1.2
Trying 20.1.1.2 ...
% Connection timed out; remote host not responding
连接R3主机,失败。原因是ASA不知道20.1.1.0/24网段
在ASA防火墙上写静态路由
ciscoasa(config)# route outside 20.1.1.0 255.255.255.0 30.1.1.2
测试
R1#telnet 20.1.1.2
Trying 20.1.1.2 ... Open
User Access Verification
Password:
如果在防火墙上写默认路由可以这样写
ciscoasa(config)# route outside 0 0 30.1.1.2
按照以上理论测试带有DMZ区域的实验。
总结:
防火墙技术分为三种:包过滤防火墙,代理防火墙,状态包过滤;
包过滤防火墙:使用ACL控制进入或离开的网络流量,ACL可以匹配包的类型或其他参数(如源IP地址,目的ip地址,端口号等)来制定。该类防火墙有以下不足,ACL制定和维护都比较困难;可以使用IP欺骗很容易绕过ACL;
代理防火墙:也叫做代理服务器。他在OSI的高层检查数据包,然后和制定的规则相比较,如果数据包的内容符合规则并且被允许,那么代理服务器就代替源主机向目的地址发送请求,从外部主机收到请求后,在转发给被保护的源请求主机。代理防火墙的缺点就是性能问题,由于代理防火墙会对每个经过它的包都会做深度检查,即使这个包以前检查过,所以对系统和网络的性能都有很大的影响。
状态包过滤防火墙:Cisco ASA就是使用的状态包过滤防火墙,该防火墙会维护每个会话的状态信息,这些状态信息写在状态表里,状态表的条目有源地址,目的地址,端口号,TCP序列号信息以及每个tcp或udp的其他的标签信息。所有进入或外出的流量都会和状态表中的连接状态进行比较,只有状态表中的条目匹配的时候才允许流量通过。防火墙收到一个流量后,首先查看是否已经存在于连接表中,如果没有存在,则看这个连接是否符合安全策略,如果符合,则处理后将该连接写入状态表;如果不符合安全策略,那么就将包丢弃。状态表也叫Fast path,防火墙只处理第一个包,后续的属于该连接的包都会直接按照Fast Path转发,因此性能就有很高的提升。
防火墙功能和许可证:
防火墙出厂的时候自带有一些基本的功能,如果需要增加一些额外的功能,那么就需要购买许可证(license)激活相应的功能。可以使用show version命令查看目前防火墙拥有的功能列表:
防火墙的许可证类型有:
Unrestricted(UR)--无限制的许可证使得该防火墙所能支持的所有特性全部打开。如无限制的活动连接数,打开防火墙所支持的所有端口,可以使用防火墙的Failover(故障切换功能)等等。
Restricted(R)--限制版,限制防火墙开启的特性,比如限制活动连接数,使防火墙不支持Failover,限制防火墙支持的最大接口数等;
Failover(FO)--该版本使得防火墙可以作为Secondary设备参与Failover(故障切换);
Failover-active/active(FO-AA)--该版本使得防火墙可以作为secondary设备参与active/active Failover ,同时还要求另一个防火墙使用UR版。
Cisco ASA 安全算法
ASA 处理TCP连接的安全算法
1. 一个内部主机的第一个IP数据包导致一个转换槽的产生,这个信息会被保留在内存中,用来检查以后的数据包,做地址转换,然后防火墙利用TCP内的相关信息来建立一个连接槽
2. 这个连接被标记为“未完成”是一个TCP的半开连接。
3. 防火墙随机产生一个用于连接的初始序列号,,并且将数据包转发到外连接口。
4. 在这一步,防火墙期待从目的主机收到一个同步确认包(syn/ack),然后防火墙将收到的包的相关信息依照连接槽内存储的信息进行匹配,计算信息的先后顺序,并将返回的数据包转发到内部主机。
5. 内部主机通过发送一个ACK完成了连接建立和3次握手。
6. 防火墙上的连接槽被标记为connected或者active-established。这时就可以发送数据了。连接的“未完成”计数器也将被重置。
以上是防火墙处理TCP连接的安全算法。
ASA处理UDP连接的安全算法
1. 防火墙从内部主机收到第一ip数据包,在检验已经配置好的转换设置后,防火墙将会创建一个转换槽,它将保存这个信息在内存中用来检查以后的数据包流。然后,防火墙利用UDP内的相关信息建立一个UDP连接槽。
2. 在用户配置的UDP timeout时间内,防火墙将会维护这个UDP连接槽。但是当UDP连接槽的idle时间超出所配置的UDP timeout时间,就会从连接表中删除。
3. 在UDP的timeout周期内,防火墙执行适应性安全算法(ASA)对 从目的主机收到的UDP数据包进行全状态检查。
4. 如果返回的UDP数据包完全匹配并且没有超时,那么这个数据将被传回内部主机。
最后要注意,ASA的所有安全策略都是应用到状态连接中,因此要首先生成一个连接表,然后才会比较安全策略等内容。
UDP的一些特性
1. UDP是一个不可靠(无连接的),但却很高效的传输协议,其不可靠体现在它不提供传输的确认。
2. 伪造UDP数据包很容易,因为他没有握手和序列的机制。由于没有状态机制,所以传输的发起者或者当前的状态经常不确定。
3. UDP不提供传输保障
4. 没有连接的建立和中止。
5. UDP没有拥塞管理和避免机制
6. 使用UDP的服务通常被分为两类:
请求-回应,或称之为乒乓服务。例如域名服务(DNS)
流服务,例如视频,VOIP,网络文件系统(NFS)
配置接口参数:
1. Security level 对asa/pix来讲,每个接口都必须有一个安全级别,安全级别是0到100之间的数字,0代表低安全级别,100代表高安全级别;
2. 默认情况下,所有从高安全级别接口到低安全级别接口的流量都是允许的,所有从低安全级别接口到高安全级别接口的流量都是被拒绝的,都需要使用ACL来允许想要允许的流量;当然,高安全级别接口到低安全级别接口的流量也可以通过ACL来控制。
3. 默认情况下,相同安全级别接口之间不允许通信,可以使用命令:
Hostname(config)#same-security-traffic permit inter-interface
允许相同安全级别接口之间互相通信:
4. 对于防火墙的任何接口,都必须配置以下内容:
Name
Ip address
Security level
静态路由
在防火墙模式下,ASA支持静态和默认路由,ASA只支持RIP和OSPF,因此如果你的网络运行的是其他的路由协议,那么就要使用静态路由,使用静态路由可以节省CPU的负载。ASA在相同的接口,最多支持3条等价静态路由。
Hostname(config)#route 接口名称 目标网段 掩码 下一跳地址
配置ACL
一个ACL是由多个访问控制条目(Access Control Entries,ACE)组成,一个ACE指明一个permit或deny规则,一个ACE可以根据协议,指定的源地址和目的地址、端口号、ICMP类型等来定义,ACE的执行是按照顺序执行的,一旦发现匹配的ACE,那么就不会再继续往下匹配。
对于TCP和UDP连接,不需要使用ACL来允许返回的流量进入,因为防火墙的安全算法会生成一个连接表来允许这些流量的返回;对于无连接流量,比如ICMP,需要使用ACL来明确允许返回的流量进入防火墙,或者可以打开ICMP审查引擎。
关于ACL相关命令参考书上的命令。
多区域默认的访问规则:
Inside可以访问outside。
Inside可以访问dmz
Dmz可以访问outside
Dmz不能访问inside
Outside不能访问inside
Outside不能访问dmz.