如何防范端口扫描器?

spa*_*key 7 networking firewall iptables scanner nmap

是否可以防止nmap完全观察我的机器?使用iptables端口扫描删除所有传入连接后,返回“已过滤”。如果 nmap 根本看不到存在哪些端口,它会更受欢迎。这可能吗?

以下解决方案似乎不起作用:

http://sharadchhetri.com/2013/06/15/how-to-protect-from-port-scanning-and-smurf-attack-in-linux-server-by-iptables/

https://dangertux.wordpress.com/2011/09/18/defeating-port-scans-using-iptables/

http://prithak.blogspot.de/2011/12/blocking-nmap-scans-with-pf-and.html

如果无法让 nmap 看到我的设备,是否可以限制速率,以便 nmap 需要很长时间才能完全扫描我的 IP?

ibr*_*him 14

简单的速率限制是不够的,因为 nmap 在达到速率限制时会增加扫描延迟。以下是您可以使用 iptables 做的最好的事情。

首先创建ipset列表

ipset create port_scanners hash:ip family inet hashsize 32768 maxelem 65536 timeout 600
ipset create scanned_ports hash:ip,port family inet hashsize 32768 maxelem 65536 timeout 60
Run Code Online (Sandbox Code Playgroud)

和 iptables 规则

iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state NEW -m set ! --match-set scanned_ports src,dst -m hashlimit --hashlimit-above 1/hour --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name portscan --hashlimit-htable-expire 10000 -j SET --add-set port_scanners src --exist
iptables -A INPUT -m state --state NEW -m set --match-set port_scanners src -j DROP
iptables -A INPUT -m state --state NEW -j SET --add-set scanned_ports src,dst
Run Code Online (Sandbox Code Playgroud)

这是如何工作的:

在这里,我们将扫描的端口存储在 scan_ports 集合中,并且我们只在我们的 hashlimit 规则中计算新扫描的端口。如果扫描器将数据包发送到 5 个不同的端口(请参阅 --hashlimit-burst 5),这意味着它可能是一个扫描器,因此我们将其添加到 port_scanners 集。

port_scanners 的超时是扫描器的阻塞时间(在该示例中为 10 分钟)。它将从头开始计数(参见--exist)直到攻击者停止扫描 10 秒(参见--hashlimit-htable-expire 10000)

您可以将这些参数设置为最适合您的值。

请注意,有人可以通过将扫描视为欺骗来阻止任何 IP。我建议您不要将块超时设置得太长。

添加:

如果要添加白名单,请创建白名单

ipset create whitelisted hash:net
Run Code Online (Sandbox Code Playgroud)

并更改丢弃规则

iptables -A INPUT -m state --state NEW -m set --match-set port_scanners src -m set ! --match-set whitelisted src -j DROP
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。 (6认同)

bon*_*ing 8

如果您希望某个服务(例如 SSH)可用并且可以使用,那么 Nmap 将能够找到它。一般来说,端口扫描不是威胁;您的安全性不应依赖于不知道正在运行哪些服务的攻击者。对 SSH 使用非标准端口主要用于减少日志噪声,因为在默认端口 22 上进行了大量的自动暴力破解。

从安全角度来看,您的主要目标应该是:了解/预测、预防、检测、响应和恢复。以下是端口扫描与这些的关系:

了解/预测:了解您拥有哪些资产以及攻击者的目标。端口扫描您自己以查看您的暴露情况。了解端口扫描可以做什么,不能做什么;他们不是魔法黑客仙尘。

阻止:使用防火墙阻止访问不应公开的端口/服务。限制对已知 IP 地址的访问。将敏感数据和服务器移到网络边界后面,并通过 VPN 或其他访问控制来控制访问。限速不是预防,只是延迟。

检测:监控端口扫描、暴力破解和其他攻击迹象的日志。了解什么是正常的背景噪音,什么才是真正的威胁。设置针对入侵迹象的警报。

回应:制定处理安全漏洞的计划。设置像fail2ban这样的自动防御来应对威胁。速率限制在这里可以作为一种响应,但它真的能阻止任何事情吗?

恢复:制定恢复计划。定期备份并测试从备份恢复。


dha*_*hag 4

以下是 nmap 的文档中关于“已过滤”状态的说明:

状态可以是打开、过滤、关闭或未过滤。打开意味着目标计算机上的应用程序正在侦听该端口上的连接/数据包。已过滤意味着防火墙、过滤器或其他网络障碍物阻塞了该端口,使得 Nmap 无法判断该端口是打开还是关闭。关闭的端口没有应用程序侦听,但它们可以随时打开。当端口响应 Nmap 的探测时,它们被分类为未过滤,但 Nmap 无法确定它们是打开还是关闭。当 Nmap 无法确定两个状态中的哪一个描述端口时,它会报告 open|filtered 和 close|filtered 状态组合。

看起来“关闭”的正常行为(即,可到达的端口,但没有服务器正在监听),比 更接近 iptables REJECT操作DROP,并且 nmap 的“过滤”诊断识别DROP(连接最终超时) ,因为正在检查的服务器完全沉默,而不是像 那样立即关闭REJECT。)

所以我建议尝试使用REJECT而不是DROP,看看扫描结果是否更符合您的喜好。