ACL高级应用
1、利用ACL检测SYN Flood攻击
服务器每接收到一个SYN报文就需要建立一个连接并为这个链接信息分配核心内存,并将此链接放入半连接,然后向源地址回应SYN+ACK报文。如果SYN报文的源地址是伪造的,则源端无法收到服务器发送的SYN+ACK报文,也就不会返回ACK确认报文,这时服务器上这个半连接就会一直等待直到超时。
如果短时间内接收到的大量SYN报文,半连接队列就会溢出,使得有效的连接被挤出队列。这种方式的攻击就是SYN Flood攻击。SYN Flood攻击是利用TCP协议三次握手的原理,发送大量伪造源IP的SYN报文,使被攻击主机产生大量的半连接。
由于SYN Flood攻击的发起报文中SYN位为1,所以可以配置一个扩展ACL来匹配这样的报文,由此来观察是否出现SYN攻击。配置的ACL如下:
Router(config)#access-list 100 permit tcp any any syn
此ACL表示TCP报文中SYN位为1的数据报文就会匹配此ACL。如果只想检测某台服务器是否被攻击,可以将目的地址改为服务器地址。
由于ACL最后隐含着一条全部拒绝的条目,所以还需要进行如下配置:
Router(config)#access-list 100 permit ip any any
在配置完成后需要在连接服务器的接口应用,之后要查看SYN报文的数量可以使用show ip access-list命令进行查看:
Router#show ip access-lists
Extended IP access list 100
10 permit tcp any any syn (1482 matches)
20 permit ip any any(465 matches)
由此可见收到的SYN报文的数量是1482个,即发起的TCP连接为1482次。然后根据服务器的平时访问了来判断是否存在攻击。
如果需要将上述技术清零可以使用命令如下:
Router#clear access-list counters
根据上述数据只能根据经验或根据之前的情况进行判断服务器是否被攻击,例如,一般每天向服务器发出的TCP连接一般为20000左右,而进两天向服务器发送的TCP连接请求明显增多,并且访问服务器的网站变慢,由此可以初步判定服务器被攻击了(也有其他可能例如:访问量突然变大等;这时需要通过其他方法进行分析,例如:使用防火墙、进行抓包分析等)。
在实际应用中,需要每隔一段时间就统计一次数据,以日常的数据位参考来判断服务器十分可能被攻击。
例如:如果每天统计一次数据,在下午下班时进行。将数据填写到表格,并作出曲线图形,可以很直观的发现服务器的访问量是否出现异常。同时也可以根据访问量的增长判断服务器的性能是否够用。记录数据的表如表6.1所示。
表6.1 记录数据的表
日期 | 匹配次数 |
2009-10-5 | 12470 |
2009-10-6 | 12563 |
2009-10-7 | 13625 |
2009-10-8 | 11953 |
2009-10-9 | 12635 |
2009-10-10 | 13695 |
2009-10-11 | 14123 |
2009-10-12 | 13562 |
2009-10-13 | 11886 |
2009-10-14 | 22059 |
2009-10-15 | 19230 |
记录数据图形如图6.1所示。
图6.1 数据记录图和数据记录表
由上图可以看出,服务器平时收到的SYN报文数大约在12500左右,但是10月14日和15日数量突然增加,并且增加量较大属于异常情况。这时,就需要做进行一步的检查了。
2、记录ACL日志
在路由器接口应用ACL后,根据ACL中配置的规则来控制数据包的转发或丢弃,从而加强网络的安全性。例如:公司内部有一台财务服务器,公司希望只有财务部能够访问这台服务器,其他部门都不能访问此服务器。这时可以配置ACL让财务部到达主机的流量通过,而丢弃其他流量。
如果拒绝的数据包中有大量数据包来自同一源IP地址,则该IP地址的主机可能正在试图攻击服务器;如果允许的数据包中有大量数据包来自同一源IP地址,则该IP地址的主机可能感染了病毒正在向服务器发送病毒。一旦出现上述情况就需要进一步检查主机是感染了病毒还是有人在对服务器进行攻击。但是使用show ip access-list命令只能了解转发或丢弃的数据包的个数而无法确定数据包的来源。要解决上述问题就需要使用ACL日志功能,通过ACL日志能过清除的知道数据包的源IP地址和目的IP地址,以及该数据包是否被转发了。
下面通过一个案例来掩饰ACL日志的记录。如图6.2所示搭建网络环境。
图6.2 ACL日志记录案例拓扑
网络规划如下:
1)R1与R2的互联地址为:192.168.0.0/30,R2与R3的互联地址为:192.168.0.4/30, R2与R4的互联地址为:192.168.0.8/30;
2)在R3上配置Loopback0地址为192.168.3.1/24,模拟服务器;
3)在R1上配置Loopback0地址为192.168.1.1/24,模拟客户端;
4)在R4上配置Loopback0地址为192.168.4.1/24,模拟客户端;
5)Syslog服务器的地址为10.0.0.7/24,网关:10.0.0.254/24;
6)在R2上配置ACL实现:192.168.1.0/24网段能够访问服务器192.168.3.0/24网段;拒绝其他倒服务器192.168.3.0/24网段的流量;ACL日志发送到Syslog服务器;
7)服务器使用Kiwi Syslog Service Manager软件接收SysLog;
根据网络规划配置设备。
1)配置IP地址和静态路由实现全网互通;
R1的配置:
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip address 10.0.0.254 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface fastEthernet 1/0
R1(config-if)#ip address 192.168.0.1 255.255.255.252
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface loopback 0
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#exit
R1(config)#ip route 192.168.3.0 255.255.255.0 192.168.0.2
R1(config)#ip route 192.168.4.0 255.255.255.0 192.168.0.2
R1(config)#ip route 192.168.0.4 255.255.255.252 192.168.0.2
R1(config)#ip route 192.168.0.8 255.255.255.252 192.168.0.2
R2的配置:
R2(config)#interface fastEthernet 1/0
R2(config-if)#ip address 192.168.0.2 255.255.255.252
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip add 192.168.0.5 255.255.255.252
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface fastEthernet 2/0
R2(config-if)#ip address 192.168.0.9 255.255.255.252
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#ip route 10.0.0.0 255.255.255.0 192.168.0.1
R2(config)#ip route 192.168.3.0 255.255.255.0 192.168.0.6
R2(config)#ip route 192.168.1.0 255.255.255.0 192.168.0.1
R2(config)#ip route 192.168.4.0 255.255.255.0 192.168.0.10
R3的配置:
R3(config)#interface fastEthernet 0/0
R3(config-if)#ip address 192.168.0.6 255.255.255.252
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#interface loopback 0
R3(config-if)#ip address 192.168.3.1 255.255.255.0
R3(config-if)#exit
R3(config)#ip route 0.0.0.0 0.0.0.0 192.168.0.5
R4的配置:
R4(config)#interface fastEthernet 0/0
R4(config-if)#ip address 192.168.0.10 255.255.255.252
R4(config-if)#no shutdown
R4(config-if)#exit
R4(config)#interface loopback 0
R4(config-if)#ip address 192.168.4.1 255.255.255.0
R4(config-if)#exit
R4(config)#ip route 0.0.0.0 0.0.0.0 192.168.0.9
2)在服务器安装Kiwi Syslog Service Manager软件;
3)配置ACL和Syslog
在R2路由器上配置ACL:
R2(config)#access-list 100 permit ip 192.168.1.0 0.0.0.255 192.168.3.0 0.0.0.255 log-input
//配置ACL并启用日志功能,其中log-input记录日志并且记录input端口,如果使用log参数不记录input端口
R2(config)#access-list 100 deny ip any any log-input //deny条目也需要配置log记录
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip access-group 100 out //应用ACL
R2(config-if)#exit
在R2路由器上配置Syslog:
R2(config)#logging 10.0.0.7 //配置Syslog服务器地址
R2(config)#logging buffered //启用缓存记录
R2(config)#logging on //启用日志
4)分别从不同网段的客户端访问服务器(IP地址192.168.3.1),在Syslog服务器查看ACL日志;
在R1和R4路由器上分别ping服务器:
R1#ping 192.168.3.1 source 192.168.1.1
//R1路由器上指定源IP地址,可以正常与服务器通信
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.3.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 56/100/196 ms
R4#ping 192.168.3.1 source 192.168.4.1
//R4路由器上指定源IP地址,不能与服务器通信
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.3.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.4.1
U.U.U
Success rate is 0 percent (0/5)
在R2路由器上会出现系统提示,如下:
*Mar 1 00:26:11.435: %SEC-6-IPACCESSLOGDP: list 100 permitted icmp 192.168.1.1 (FastEthernet1/0 cc00.0938.0010) -> 192.168.3.1 (0/0), 1 packet
*Mar 1 00:26:36.575: %SEC-6-IPACCESSLOGDP: list 100 denied icmp 192.168.4.1 (FastEthernet2/0 cc00.07b8.0000) -> 192.168.3.1 (0/0), 1 packet
在R2路由器上可以使用show logging命令查看日志(如果没有配置logging buffered命令则无法查看):
R2#show logging
Syslog logging: enabled (11 messages dropped, 0 messages rate-limited,
0 flushes, 0 overruns, xml disabled, filtering disabled)
Console logging: level debugging, 31 messages logged, xml disabled,
filtering disabled
Monitor logging: level debugging, 0 messages logged, xml disabled,
filtering disabled
Buffer logging: level debugging, 8 messages logged, xml disabled,
filtering disabled
Logging Exception size (4096 bytes)
Count and timestamp logging messages: disabled
No active filter modules.
Trap logging: level informational, 34 message lines logged
Logging to 10.0.0.7 (udp port 514, audit disabled, link up), 8 message lines logged, xml disabled,
filtering disabled
Log Buffer (4096 bytes):
*Mar 1 00:25:18.139: %SYS-5-CONFIG_I: Configured from console by console
*Mar 1 00:25:19.139: %SYS-6-LOGGINGHOST_STARTSTOP: Logging to host 10.0.0.7 started - CLI initiated
*Mar 1 00:25:25.931: %SEC-6-IPACCESSLOGDP: list 100 denied icmp 192.168.0.1 (FastEthernet1/0 cc00.0938.0010) -> 192.168.3.1 (0/0), 1 packet
*Mar 1 00:26:11.435: %SEC-6-IPACCESSLOGDP: list 100 permitted icmp 192.168.1.1 (FastEthernet1/0 cc00.0938.0010) -> 192.168.3.1 (0/0), 1 packet
*Mar 1 00:26:36.575: %SEC-6-IPACCESSLOGDP: list 100 denied icmp 192.168.4.1 (FastEthernet2/0 cc00.07b8.0000) -> 192.168.3.1 (0/0), 1 packet
*Mar 1 00:31:01.443: %SEC-6-IPACCESSLOGDP: list 100 denied icmp 192.168.0.1 (FastEthernet1/0 cc00.0938.0010) -> 192.168.3.1 (0/0), 4 packets
*Mar 1 00:32:01.443: %SEC-6-IPACCESSLOGDP: list 100 permitted icmp 192.168.1.1 (FastEthernet1/0 cc00.0938.0010) -> 192.168.3.1 (0/0), 9 packets
*Mar 1 00:32:01.447: %SEC-6-IPACCESSLOGDP: list 100 denied icmp 192.168.4.1 (FastEthernet2/0 cc00.07b8.0000) -> 192.168.3.1 (0/0), 9 packets
除此之外,R2还将Syslog信息发送给服务器10.0.0.7,在服务器上Kiwi Syslog Service Manager软件接收log,如图6.3所示。从图6.3中可以看出软件记录的Syslog和路由器上记录的相同。
图6.3 Kiwi Syslog Service Manager软件接收的信息
一般情况下日志也是一段时间查看一次,可以根据Kiwi Syslog Service Manager软件log记录文件内容查看一天(或半天等)的情况,由此来判断是否有可疑的主机攻击服务器,从而采取进一步行动。
原文地址:http://luwenjuan.blog.51cto.com/10967115/1721744