如何记录发送数据包或连接到服务器的所有机器的 IP 地址?另外,如何阻止参与 DDoS 并用数据包淹没服务器的 IP?
答案1
预先说几句谨慎的话:防御 DDoS 攻击很困难,通常需要 ISP 的帮助。仅靠 iptables 并不能保护您,甚至可能有害。我不认为你真的想做你所要求的事情。
- DDoS 旨在通过使系统超载而导致拒绝服务。记录数据包会增加系统的负载。所以你会帮攻击者一个忙。
- IP 地址的来源很容易被欺骗。想象一下,您通过 ssh 连接到服务器,并且攻击者了解了您笔记本电脑的 IP 地址。发送数据包看起来就像来自任何给定的 IP(在本例中是您的笔记本电脑),这是非常非常容易的。您的服务器将通过阻止您的 IP 地址来响应,从而有效地将您拒之门外。此技术允许攻击者拥有任何被服务器阻止的 IP 地址。再说一遍,你是在帮攻击者一个忙,让他们的工作变得更加简单。
排除了这一点:
将每个单独的 IP 地址记录到系统日志中(每个 IP 每小时最多 1 个条目):
iptables -I INPUT 1 \! -i lo \
-m hashlimit --hashlimit-name "IP_SOURCES" \
--hashlimit-mode srcip \
--hashlimit-burst 1 \
--hashlimit-upto 1/hour \
-j LOG
替换iptables
为ip6tables
对 IPv6 数据包执行相同的操作。
阻止IP的工作方式类似,只需将conntrack
模块放入上述规则中,匹配NEW
连接并将跳转目标设置为DROP
.但我再次强调,如果你真的这样做的话,你会对自己造成伤害。
iptables -I INPUT 1 \! -i lo \
-m conntrack --ctstate NEW \
-m hashlimit --hashlimit-name "RATE_LIMIT" \
--hashlimit-mode srcip \
--hashlimit-burst 20 \
--hashlimit-above 1/min \
-j DROP
这将允许每分钟 20 次连接尝试,并丢弃所有其他连接尝试。已建立连接的数据包仍然可以完好无损地通过。
正如评论中所述,fail2ban
这可能是阻止不需要的流量的一个很好的解决方案。如果攻击者正在生成 SYN-flood 或正在使用 IPv6,它不会对您有帮助,但如果攻击者试图使用“普通”IPv4 暴力破解您的 ssh 或 smtp 服务器,那么它将很有用。联系。