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

我们的一些用户正在Internet服务器上启动端口扫描。 这些用户使用ssh和openvpn连接到我们的服务器。 我们显然暂停他们的帐户在适当的情况下,但我想find一个技术解决scheme,要么阻止扫描或阻止他们(例如通过减慢)。

我提出的最好的解决scheme是(这是针对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 

但是,这显然捕获了很多合法的stream量。 在我的testing中,如果我用几十个标签重新启动我的浏览器,它会打开足够的连接,大多数标签超时。 我似乎无法find一个平衡点,并认为也许有一个更好的方法。 有任何想法吗?

在我看来,通过在一台机器上查看> 5个端口的程序,或者通过在一些机器上检查相同的端口,可以最好地从合法的stream量中清除端口扫描。 第二个是棘手的,因为有很多应用程序会在短时间内(例如与您的网页浏览器问题)在同一端口上与许多主机进行合法对话。

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

虽然目前我无法到达现场,但是psad (端口扫描攻击探测器)也可以给你更大的灵活性,尽pipe我不确定它是如何对原始系统上的探测器做出反应的。 它通常运行在目标主机上以停止扫描。