我正在设置一个服务器,通过使用 iptables 设置限制来保护它免受 DoS 攻击:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
(default policy DROP) # of course
问题是,我的网站将被许多计算机使用,这些计算机都位于同一个路由器后面,进行 NAT。假设有 100 台计算机。
iptables 是否将这 100 台计算机检测为不同的客户端,或者它认为它们都是相同的,因为 NAT 将源地址替换为公共地址?(并将源端口更改为“随机”端口)?
如果它将它们视为单个客户端,那么我必须将每分钟 25 提高到每分钟 2500...
答案1
您正在使用此行匹配数据包,这意味着您每分钟只允许 25 个数据包。
您需要匹配会话数,这样您就不必关心使用相同 IP 地址的客户端数量,因为您只会计算新会话,即 SYN TCP 数据包。
如果有 100 个客户端使用相同的 IP,他们仍然需要打开 100 个新会话,因此如果您只接受前 25 个新会话,剩下的 75 个会话将被丢弃。
您可以使用--limit来以更快的速度避免各种拒绝服务攻击(DoS),以提高响应能力。
Syn-flood 保护:
# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
秘密端口扫描器:
# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
死亡 Ping:
# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
欲了解更多详情,请 cceckhttp://www.netfilter.org/documentation/HOWTO//packet-filtering-HOWTO-7.html。