有人用随机数据包通过关闭的随机端口向我发送大量数据包。
我认为我的服务器正在使用 tcp-reset 数据包对此做出响应,这也占用了出站带宽。
如何使用 iptables 来阻止 tcp-reset 数据包?
答案1
目标DROP
就是你想要的那个。
如果您只有一个盒子并且网络中没有其他机器与其连接,那么您可以阻止所有RESET
数据包。
-A OUTPUT -p tcp --tcp-flags RST RST -j DROP
看数据包过滤-HOWTO-7了解详情
如果您碰巧宕机,这对合法连接来说不太礼貌,并且会导致需要使用RESET
数据包的已建立连接出现不必要的超时。这不是一个好主意,但如果它允许您处理 DDoS,那么暂时应该没问题。
如果您对此盒子的正常使用依赖于RESET
为普通用户工作的数据包并且您只想阻止RESET
攻击者的数据包,那么您将需要识别恶意数据包,以便我们只能阻止那些数据包。
这些数据包真的是随机的吗或者它们都有一些共同点?
-A INPUT -p tcp -j LOG
如果您LOG
在 iptables 配置末尾添加一行,则可以使用该日志分析入站数据包以查看是否存在模式。源端口号和目标端口号的散点图可能会很有用。在 IP 空间图上绘制 IP 地址可能有助于识别恶意和良性范围,尽管我怀疑这不太可能产生有用的结果。简单地计算攻击 IP 地址的数量将很有用。如果数量足够小,您可以简单地将它们全部添加到 iptables 配置中。
即使您没有找到模式,由于肯定存在基于“过多重置数据包”的模式,因此您可以创建一个 fail2ban 规则,该规则将为在 y 秒内DROP
导致超过 x 个数据包的任何 IP 地址添加规则。RESET
答案2
您可以使用“-j DROP”而不是“-j REJECT --with-tcp-reset”。