一、实验目的要求:
二、实验设备与环境:
三、实验原理:
四、实验步骤:
五、实验现象、结果记录及整理:
六、分析讨论与思考题解答:
1、掌握常见DDoS攻击SYN Flood的攻击原理。
2、学习设计防火墙的过滤策略,防御DDoS攻击。
3、具体要求:
1)模拟DDoS攻击的方式实现SYN Flood攻击。
2)通过配置不同的防御策略和IPtables规则,防御SYN Flood攻击
1、SYN Flood攻击
根据TCP协议传输的特点,攻击方向目标发送大量伪造的TCP连接请求,即目标主机在发出SYN+ACK应答报文后无法收到ACK报文,第三次握手失败,从而使目标连接资源耗尽,无法正常响应TCP的连接请求。常见的攻击方式有Direct Attack攻击方使用固定的IP发起攻击和Spoofing Attack攻击方使用变化的IP发起攻击。
2、SYN Flood防御
主要有两种,一种是通过Linux内核提供的SYN相关配置,另一种是通过Iptables规则设置。
配置Linux中的SYN:1)缩短SYN Timeout的时间,降低服务器的负荷;2)设置SYN Cookie,若有重复的SYN报文,判定为受到攻击并丢弃。
Iptables规则设置:1)固定的IP发起攻击,对SYN包进行监视,异常行为则列入黑名单;2)变化的IP发起攻击,控制单个IP的最大并发连接数,即在一定时间内允许新建立的连接数。
3、Sysctl命令
Sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下。根据Sysctl相关命令,进行信息的增删改查。格式为:"sysctl [选项] [参数]"。
4、Netstat命令
Netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。根据Netstat相关命令,进行信息的打印输出。格式为:"netstat [选项]"。
(一)轻量级防御SYN Flood攻击
1、查看环境:登录被攻击主机3,执行"sudo -i"命令切换至root用户模式;再执行" sysctl -a | grep syn "命令,查看系统Linux内核提供的SYN相关配置。Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。输出信息如图1所示。
"net.ipv4.tcp_max_syn_backlog"定义了处于SYN_RECV的TCP最大连接数,当处于SYN_RECV状态的TCP连接数超过tcp_max_syn_backlog后,会丢弃后续的SYN报文。
"net.ipv4.tcp_syncookies=1"表示默认打开SYN Cookie功能,该功能可以防止部分SYN攻击。
"net.ipv4.tcp_synack_retries=6"和"net.ipv4.tcp_syn_retries=5"表示SYN的重试次数。
执行"sysctl -w net.ipv4.tcp_syncookies=0"命令可以关闭SYN Cookie功能。
执行"sysctl -w net.ipv4.tcp_syncookies=1"命令可以打开SYN Cookie功能,最终保持打开状态。
2、规则配置:将主机3的SYN重试次数设置为3;降低SYN重试次数可以降低处于半连接状态的数量,有效缓解SYN Flood攻击。
tcp_syn_retrie:对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。
tcp_synack_retries:对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。不应该大于255,默认值是5,对应于180秒左右时间。
# sysctl -w net.ipv4.tcp_synack_retries=3
# sysctl -w net.ipv4.tcp_syn_retries=3
# sysctl -a | grep syn
(二)防御固定IP的SYN Flood攻击
1、发起攻击:登录主机1,进入终端,通过终端进行对主机3(30.0.1.4)的攻击;
"# hping3 -S --flood -V 30.0.1.4 -p 22"命令实现;
hping是面向命令行的用于生成和解析TCP/IP协议数据包汇编/分析的开源工具。本次利用其中的功能之一,拒绝服务攻击。对目标机发起大量SYN连接。
2、查看状态:登录主机3,进入root模式,查看SYN_RECV半连接状态的TCP连接。
"# netstat -an | grep SYN_RECV"命令查看连接状态;
从结果可看出,有大量由30.0.1.4发起的TCP连接处于半连接状态;
"# netstat -an | grep SYN_RECV | wc –l"命令查看连接数量;
从结果可看出,TCP连接处于半连接状态的数量为256个。
3、防御攻击:在主机3下,执行命令配置Iptables规则,防御来自源IP 30.0.1.4 SYN Flood攻击。
"# iptables -I INPUT -p tcp -m connlimit --connlimit-above 5 -j REJECT"命令配置允许单个IP访问服务器的最大连接数为5。
"iptables -L -v"使其生效。从结果可看出,Iptables拦截了大量的TCP并发连接。"# netstat -an | grep SYN_RECV | wc -l # netstat -an | grep SYN_RECV"命令,查看处于SYN_RECV(半连接)状态的数量,限制在iptables规则连接数内。 TCP连接处于半连接状态的数量逐渐减少,最后降为0,说明防御策略生效。
4、还原设置:在主机1上,停止(Ctrl+C)SYN Flood攻击;在主机3上,清空(iptales -F)iptables规则
(三)防御变化IP的SYN Flood攻击
1、发起攻击:同理,登录主机2,通过终端发送变化IP的SYN报文攻击目标主机3(30.0.1.4)。
"# hping3 -S --flood -V 30.0.1.4 -p 22 --rand-source"命令实现;
2、查看状态:登录主机3,执行以下命令查看处于SYN_RECV(半连接)的TCP连接;存在207个SYN_RECV连接。
"# netstat -an | grep SYN_RECV | wc -l # netstat -an | grep SYN_RECV"命令实现;
3、防御攻击:登录主机3,配置每分钟最多允许1个SYN新连接;
"# iptables -A INPUT -p tcp --syn -m limit --limit 1/m --limit-burst 1 -j ACCEPT"
"# iptables -L -v"使其生效;
登录主机3,执行"iptables -L -v"命令可查看到主机以每分钟新增1个连接数的速度接受数据包。可看出,每分钟只有一个数据包连接。
4、还原设置:在主机1上,停止(Ctrl+C)SYN Flood攻击;在主机3上,清空(iptales -F)iptables规则
1、在轻量级防御SYN Flood攻击中,结合grep正则表达式可清楚的查看出Linux内核提供的SYN相关配置;可结合自身环境所需,对信息进行相应的配置修改;
2、在防御固定IP的SYN Flood攻击中,即Direct Attack攻击,使用限制服务器的最大连接数方法,有效的拦截了大量的TCP并发连接;
3、在防御变化IP的SYN Flood攻击中,即Spoofing Attack 攻击,使用每分钟最大连接数的方法进行防御,有效的拦截了大量的SYN新连接。
1、Hping的功能?
防火墙测试、端口扫描、Idle扫描、拒绝服务攻击、文件传输、木马功能
2、Syn Flood有哪些种类?
①Direct Attack攻击方使用固定的源地址发起攻击,对攻击方的消耗最小;
②Spoofing Attack攻击方使用变化的源地址发起攻击,需要攻击方不停地修改源地址
③Distributed Direct Attack这种攻击主要是使用僵尸网络进行固定源地址的攻击
3、有哪些方法可预防Syn Flood攻击?
①对SYN包进行监视;如果发现某个IP发起了较多的攻击报文,直接将这个IP列入黑名单;
②无效连接监视释放;这种方法不停监视系统的半开连接和不活动连接,当达到一定阈值时拆除这些连接,从而释放系统资源;
③延缓TCB分配方法;当正常连接建立起来后再分配TCB则可以有效地减轻服务器资源的消耗,主要是是使用SYN Cache和SYN Cookie技术;
④使用SYN Proxy防火墙。