iptables实现DDos
最近有客户要定制路由器的默认防火墙等级,然后涉及到了DDos规则,对比客户提供的规则发现我们现有的规则存在明显的错误,在此记录一下如何使用iptables防护DDoS攻击
直接贴一下规则
#开启TCP SYN Cookies 机制
sysctl -w net.ipv4.tcp_syncookies=1
#减少发送SYN-ACK包的重试次数,从而达到减少半连接的存活时间效果,尽快释放队列
sysctl -w net.ipv4.tcp_synack_retries=3
#扩大半连接队列的容量
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
#每秒允许100个syn请求,且允许突发150个请求
iptables -w -I SYNFLOOD -p tcp -m tcp --syn -m limit --limit 100/s --limit-burst 150 -j RETURN
iptables -w -A SYNFLOOD -p tcp -m tcp --syn -j DROP
1.内核参数优化
sysctl -w net.ipv4.tcp_syncookies=1
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
sysctl -w net.ipv4.tcp_synack_retries=3
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
当服务器收到大量 TCP SYN 包(三次握手的第一步)时,内核的半连接队列(SYN Queue)可能被占满,导致合法用户无法建立连接,以此瘫痪服务器。启用 tcp_syncookies 后,内核会在队列满时生成加密的 Cookie 值代替存储连接信息,客户端返回的 ACK 包会携带此 Cookie 进行验证,从而绕过半连接队列限制,即使攻击者发送百万级 SYN 包,也不会耗尽队列资源。
2.防火墙规则
iptables -w -I SYNFLOOD -p tcp -m tcp --syn -m limit --limit 100/s --limit-burst 150 -j RETURN
iptables -w -A SYNFLOOD -p tcp -m tcp --syn -j DROP
这一步主要是要注意将SYNFLOOD子链放在INPUT的第一个,如此即可达到限制syn连接数的同时又不影响到后续其他规则的生效。
需要注意DDos攻击无法完全防御,如果需要更好的效果,可以使用钞能力~