使用 IPtables 防止服务器上的用户对其他服务器进行端口扫描

使用 IPtables 防止服务器上的用户对其他服务器进行端口扫描

我们的一些用户正在对互联网服务器启动端口扫描。这些用户使用 ssh 和 openvpn 连接到我们的服务器。我们当然会在适当的情况下暂停他们的帐户,但我希望找到一种技术解决方案来阻止扫描或阻止他们(例如通过减慢扫描速度)。

我想到最好的解决方案是(针对 SYN 扫描):

# Log suspected port scanners 
iptables -A Limit_Pscan -p tcp --syn -m state --state NEW -m recent --name port_scan --rcheck --seconds 10 --hitcount 30 -j LOG --log-prefix 'PORT SCANNER(?): '

# Drop connections where packets > 29 in 10 second period.
iptables -A Limit_Pscan -p tcp --syn -m state --state NEW -m recent --update --name port_scan  --seconds 10 --hitcount 30 -j DROP

# Allow and add the source address of the packet to the port_scan list
iptables -A Limit_Pscan -p tcp --syn -m state --state NEW -m recent --set --name port_scan 

但是这显然会捕获大量合法流量。在我的测试中,如果我重新启动浏览器并打开几十个选项卡,它会打开足够多的连接,以至于大多数选项卡都会超时。我似乎找不到平衡点,我想也许有更好的方法。有什么想法吗?

答案1

在我看来,通过查找检查单台机器上 5 个以上端口的程序,或检查多台机器上的同一端口,可以最好地从合法流量中剔除端口扫描。第二种方法比较棘手,因为有很多应用程序会在短时间内合法地与同一端口上的许多主机进行通信(例如您的 Web 浏览器问题)。

我还会寻找大量的 TCP RST 数据包或 ICMP 错误(对于 UDP 扫描,通常是 ICMP 不可达)。

虽然我目前无法访问该网站,普萨德(端口扫描攻击检测器)也可能为您提供更大的灵活性,尽管我不确定它作为原始系统上的检测器会如何反应。它通常在目标主机上运行以停止扫描。

相关内容