为什么不阻止ICMP?

Agv*_*rth 55 security linux firewall iptables icmp

我想我几乎在 CentOS 5.3 系统上完成了 iptables 设置。这是我的脚本...

# Establish a clean slate
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F # Flush all rules
iptables -X # Delete all chains

# Disable routing. Drop packets if they reach the end of the chain.
iptables -P FORWARD DROP

# Drop all packets with a bad state
iptables -A INPUT -m state --state INVALID -j DROP
# Accept any packets that have something to do with ones we've sent on outbound
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Accept any packets coming or going on localhost (this can be very important)
iptables -A INPUT -i lo -j ACCEPT
# Accept ICMP
iptables -A INPUT -p icmp -j ACCEPT

# Allow ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow httpd
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Allow SSL
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Block all other traffic 
iptables -A INPUT -j DROP
Run Code Online (Sandbox Code Playgroud)

就上下文而言,这台机器是虚拟专用服务器 Web 应用程序主机。

之前的一个问题中,Lee B 说我应该“锁定 ICMP 多一点”。为什么不完全阻止它?如果我这样做会发生什么(会发生什么坏事)?

如果我不需要阻止 ICMP,我该如何进一步锁定它?

Mic*_*aff 124

ICMP 是一种方式,不仅仅是“traceroute”和“ping”。当您运行 DNS 服务器(端口无法访问)时,它用于反馈,在现代 DNS 服务器中,这实际上可能有助于选择不同的机器来更快地查询。

如上所述,ICMP 也用于路径 MTU 发现。您的操作系统可能会在它发送的 TCP 数据包上设置“DF”(不要分段)。如果路径上的某些内容无法处理该大小的数据包,则期望返回 ICMP“需要分段”数据包。如果您阻止所有 ICMP,您的机器将不得不使用其他回退机制,这些机制基本上使用超时来检测 PMTU“黑洞”并且永远不会正确优化。

此外,您应该问问自己为什么要阻止 ICMP。你特别想在这里阻止什么?很明显,您不了解 ICMP 的用途,这很常见。在阻止您不完全理解的内容时,我会非常谨慎。

为了更难了解这一点,许多常见的防火墙书籍都说“阻止 ICMP”——很明显,他们的作者从未阅读过 RFC 或必须解决围绕此类建议的问题。阻止所有 ICMP 是不好的建议。

现在,限制它的速率也会造成伤害。如果您的机器繁忙,或者即使不繁忙,您也可以获得大量 ICMP 流量。我的 Web 服务器每分钟可能会收到大约 10-100 个 ICMP 数据包,其中大部分是 PMTU 发现。即使有人选择用某种类型的 ICMP 数据包攻击我的服务器,这也没什么大不了的。如果您的机器接受甚至一个 TCP 连接(ssh、http、邮件等),那么这可能是一个比被误解的 ICMP 更大的攻击向量。

  • 有*一种*类型的ICMP*可能*有害于`redirect`类型。这是您应该考虑阻塞的**唯一** ICMP 类型。 (9认同)
  • 不能说得更好了。+1 (5认同)
  • @Hubert 如果您可以链接到更多有关阻止“重定向”的建议,那将非常有帮助。我现在明白我应该考虑它,但我也没有更好的 - 仍然无法决定一种或另一种方式:) 这是否有风险? (2认同)
  • 我相信在 linux 上默认会忽略重定向。但是,是的,最好过滤那个。 (2认同)

wom*_*ble 26

ICMP 用于一系列诊断(例如 ping、traceroute)和网络控制(例如 PMTU 发现)功能。不分青红皂白地阻止 ICMP 会导致其他人各种各样的胃灼热,除非您确切地知道自己在做什么,否则就不要管它。


Ant*_*ibu 16

我一直不明白为什么人们会为 ICMP 计时,如上所述,它只会让自己和他人头疼。您可以确定主机是否足够容易启动,只要它足够有限以至于不能用作 DOS,那么我从未听说过任何令人信服的理由来阻止它。(如果有人能想出一个理由,请张贴)

  • 我一直不明白为什么防火墙书籍的作者似乎完全忽略了 ICMP 远不只是“ping”和“traceroute”,而书籍、博客和 HOW-TO 都说“阻止 ICMP”。 (7认同)
  • 这是信息安全崇拜的一部分。安全人员认为他们不需要为事情辩解,因为普通人不可能理解安全含义。另一方面,网络和系统管理员的头痛可归咎于懒惰。毕竟,如果管理员知道发生了什么,事情就永远不会破裂...... (5认同)
  • 级别和级别,你的答案被正确地投票通过,说得好。大多数情况下,我知道当它被阻止时,你永远无法完全分辨出间歇性的事情出了什么问题,特别是当沿途有多个 ICMP 阻止时。 (2认同)

xen*_*ide 9

您可以尝试限制 icmp 这样它就不能用作 DOS 攻击。但是有太多的故障排除工具,例如 ping、mtr(我忘记了 Windows 等效项)、traceroute (tracert),它们使用 icmp。完全放弃它们是愚蠢的。即使您无法在任何端口上 telnet,这是检查您的实例是否已启动的好方法。

--limit 10/second
Run Code Online (Sandbox Code Playgroud) 考虑到计算机实际可以处理的数量,您的 icmp 规则可能是一个不错的限制。


Dan*_*tts 6

这是另一种观点,本着安全理论所建议的精神。其他张贴者认为安全实践通常过于热心是正确的,但其中大部分都有很好的基础。

安全理论通常是你只启用你需要的。攻击者可以使用其他东西(可能有用 - 例如 ping 响应)来确定您的系统的范围,或者可能作为某些尚未发现的漏洞的攻击媒介。

那么,看看 ICMP 消息类型,您需要什么才能让您的系统正常、正确运行?

  • 回声回复(ping) - 没那么多
  • 目的地无法到达 - 这里有很多有用的信息。禁用此功能,您将中断某些客户端对服务器的访问。
  • 源淬火 - 自 1995 年以来已弃用,并且自(最迟)2005 年以来显然已从主机实现中删除。tools.ietf.org/html/rfc6633#section-1。
  • 重定向 - 几乎肯定不是
  • 路由器广告和请求 - 如果您静态配置路由,则不需要,并且可以用于 DoS。除非你知道你需要它,否则我会阻止它,如果你需要它,也许可以编写一个规则来只接受来自可能的已知路由器的信息。
  • ttl 超出 - 不仅仅是 traceroute,告诉您您的流量没有到达目的地

...等等。如果您真的想了解这一点,请了解各种 ICMP 类型及其用途。在维基百科的文章是一个很好的起点。

在实践中,真正丑陋的是重定向;如果您只想做一些快速有用的事情,请阻止它并允许其余的。

我要补充一点,IPtables 连接跟踪将允许为活动连接适当返回 ICMP 数据包。因此,如果您正在运行 conntrack,您应该能够阻止大多数 ICMP 入站,只要您接受相关数据包(在您阻止规则集中的 ICMP 之前)。

  • 实际上,源抑制自 1995 年以来已被弃用,并且自(最迟)2005 年以来显然已从主机实现中删除:)。http://tools.ietf.org/html/rfc6633#section-1。 (2认同)
  • PMTU 发现不需要回显 (ping) 数据包。PMTU 发现是通过在传出数据包上设置 Don't Fragment (DF) 位来完成的,并且取决于 ICMP Destination Unreachable - Fragmentation 需要从具有较小链路 MTU 的路由器返回的消息。Ping 对于诊断目的当然很有用,但对于网络侦察和潜在的 DoS 也很有用。就你我所知,Linux 的 ICMP 堆栈中存在一个潜在的远程根错误。如果您的标准是“我需要这个吗”,那么答案是“不需要”。 (2认同)

chr*_*ris 5

它是解决网络连接问题的有用诊断工具。

它还允许您使用互联网上其他地方的连接,这些连接使用的 MTU 小于您网络上的 MTU。如果您尝试将数据包发送到太大且无法分段的位置,则设备会丢弃该数据包,并将需要 ICMP 分段的数据包发送回发送方。如果丢弃所有 ICMP 数据包,您就会丢失这些数据包,并且网络上会发生奇怪的事情。

真正的问题是“为什么要阻止 ICMP?” 你有什么收获?只需在您的边界和您的宝贵资产前制定良好的过滤规则即可。