通过 iptables 将端口扫描器列入黑名单

通过 iptables 将端口扫描器列入黑名单

我运营着一个 VPN 服务器,现在遇到了 DDoS 攻击者对我的 VPN 进行端口扫描以查找开放端口进行洪水攻击的问题。我需要一条规则,在攻击者在 Y 秒内联系了 X 个端口后将他们列入黑名单,这样如果他们确实找到了我的一个开放端口,服务器就不会回复他们。

我尝试过的所有其他规则都做了以下一项或多项:

强制 VPN 发送 RST 数据包,而不是丢弃流向没有服务的端口的流量 (我丢弃数据包而不是拒绝,因此端口扫描需要更长时间)
没有正确地将他们列入黑名单,禁止他们访问我的开放端口
将我的开放端口添加到会导致 IP 被列入黑名单的端口列表中 (我不希望端口托管服务有任何机会将 IP 添加到黑名单中。但是,我希望这些端口仅丢弃到黑名单 IP 的流量)

解决方案示例:1.1.1.1 是攻击者,2.2.2.2 是我的服务器。 2.2.2.2 已打开端口 777

1.1.1.1 -> 2.2.2.2:1 # 因为我在这个端口上没有服务而被丢弃
1.1.1.1 -> 2.2.2.2:13 # 因为我在这个端口上没有服务而被丢弃
1.1.1.1 -> 2.2.2.2:60 # 因为我在这个端口上没有服务而被丢弃
1.1.1.1 -> 2.2.2.2:14 # 因为我在这个端口上没有服务而被丢弃
1.1.1.1 -> 2.2.2.2:11 # 因为我在这个端口上没有服务而被丢弃
1.1.1.1 -> 2.2.2.2:17 # 这将触发黑名单系统,阻止来自 1.1.1.1 的所有人 1 小时


1.1.1.1 -> 2.2.2.2:777 # 因为黑名单而被丢弃,无论端口是否开放

答案1

我自己想出来的。这些规则对我来说最有效:
iptables -N LOGPSCAN iptables -A LOGPSCAN -p tcp --syn -m limit --limit 2000/hour -j RETURN iptables -A LOGPSCAN -m limit --limit 200/hour -j LOG --log-prefix "DROPPED Port scan: " iptables -A LOGPSCAN -j DROP iptables -A INPUT -p tcp --syn -j LOGPSCAN

因为(在我的环境中)单个主机没有理由在一小时内向 200 个端口发送 SYN,所以我们可以在一小时的剩余时间内停止回复任何违反此策略的主机的 SYN :D

注意:您可能需要根据服务器托管的服务数量增加或减少阈值。

相关内容