为什么不阻止ICMP?


53

我想我在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

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

在上一个问题中,Lee B说我应该“进一步锁定ICMP”。为什么不完全将其阻止?如果我那样做会怎样(会发生什么不好的事情)?

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


4
iptables -A INPUT -j DROP <错误(意见),应将策略设置为iptables -P INPUT DROP,与设置默认值基本相同。默认拒绝。
xenoterracide

2
找出阻止icmp的坏主意的原因:security.stackexchange.com/a/22713/485
罗里·艾尔索普

Answers:


117

ICMP比“ traceroute”和“ ping”更重要。当您运行DNS服务器(端口不可达)时,它用于提供反馈。在现代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相比,这是一个更大的攻击媒介。


4
不能再说了。+1
Massimo

9
一个类型的ICMP那可以是有害的redirect类型。那是您应该考虑阻止的唯一 ICMP类型。
休伯特·卡里奥

2
@Hubert,如果您可以链接到有关阻止该文件的更多建议,那将非常有帮助redirect。我现在知道我应该考虑一下,但是我的状况并不更好-仍然无法决定一种或另一种方法:)是否有风险?
2011年

重定向ICMP消息告诉主机(路由器永远不要接受它们)这样的子网或主机可以在其他网关上使用(通常是由更快的路由器提供)。至少这就是RFC1122所说的。
休伯特·卡里奥

2
我相信在Linux上默认情况下会忽略重定向。但是,是的,最好过滤掉那个。
Fox

26

ICMP用于一系列诊断(例如ping,traceroute)和网络控制(例如PMTU发现)功能。不加选择地阻止ICMP会导致其他人各种各样的烧心,除非您确切地知道自己在做什么,否则就不要管它了。


14

我从未理解人们为什么要为ICMP计时,如上所述,它只会使自己和他人头痛。您可以确定主机是否足够容易地启动,并且只要它足够有限而不能用作DOS,那么我就从未听说过有任何令人信服的理由来阻止它。(如果有人可以提出原因,请发表)


5
这是信息安全邪教的一部分。安全人员认为他们不需要为事情辩解,因为凡人无法理解安全隐患。另一方面,网络和系统管理员的头痛可归因于懒惰。毕竟,如果管理员知道发生了什么,事情将永远不会中断……
duffbeer703

对于我来说,基本上是为了杀掉诊断工具似乎很奇怪。因为假设您在计算机上运行的任何其他服务都可能获得攻击者感兴趣的信息。你的权利; 看起来确实很“邪教”,不要质疑就做。
Antitribu

6
我从来没有理解过为什么防火墙书籍的作者似乎完全想不到ICMP不仅仅是“ ping”和“ traceroute”,而书籍,博客和HOW-TO都说“阻止ICMP”。
Michael Graff

1
级别和级别,您的答案正确投了票,好说了。通常,我知道,当它被阻止时,您永远无法完全断定间歇性问题出了什么问题,尤其是在途中有多个ICMP块的情况下。
Antitribu

8

您可以尝试通过限制icmp的方式将其用作DOS攻击。但是使用icmp的故障排除工具太多了,例如ping,mtr(我忘记了Windows等效),traceroute(tracert)。完全丢弃它们只是愚蠢的。这是检查实例是否启动的好方法,即使您无法在任何端口上进行telnet。

--limit 10/second
考虑到计算机实际可以处理的数量,对icmp规则的限制可能是一个不错的限制。


6

本着安全理论所提出的精神,这是另一种观点。其他张贴者说的很对,即安全实践常常过于狂热,但其中很多基础都有很好的基础。

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

因此,查看ICMP消息类型,您需要什么才能正常,正确地运行系统?

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

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

实际上,真正丑陋的是重定向。如果您只想快速实用地做某事,请阻止并允许其余的。

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


2
实际上,自1995年以来就不赞成使用源猝灭,并且自(最迟)2005年:)以来,显然已从宿主实现中删除了源猝灭。 tools.ietf.org/html/rfc6633#section-1
sourcejedi

答案更新,谢谢。如果我想得再难一点,我会记得的,,。
Dan Pritts 2013年

我认为PMTU发现(许多浏览器和工具都使用)需要ICMP PING。禁止它就像对用户不礼貌。Ping也用于许多诊断目的,大多数大型公司都允许使用。此外,禁止它没有什么好处。
jjmontes 2014年

2
PMTU发现不需要回声(ping)数据包。PMTU发现是通过在传出数据包上设置“不分段(DF)”位来完成的,并且取决于“ ICMP目标不可达”-需要碎片的消息从具有较小链接MTU的路由器返回。Ping对于诊断目的当然很有用,但对网络侦察和DoS也很有用。对于您和我所知道的所有人,Linux的ICMP堆栈中都有一个潜在的远程根错误。如果您的标准是“我需要吗”,答案是“否”。
丹·普里兹

1
(请注意,我在回答中写道,阻止目标不可达消息会破坏事情
。PMTU

4

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

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

真正的问题是“为什么阻止ICMP?” 你得到什么?只需在您的边界和贵重资产的前面设置良好的过滤规则即可。


3

ping是一个很好的诊断工具,您真希望有一天能拥有它。我正在使用这些:

-A icmp_packets -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT

您可能还想节制它。


8
由于其他人指出的原因,这是十分可悲的(ICMP不仅仅是ping)。您应该有选择地阻止特定的,可能有害的 ICMP消息,并允许其他控制消息通过。
voretaq7

2

如今,即使将ICMP数据包限制在服务器端也可能使DDoS攻击头痛。攻击主要是通过向一台服务器发送巨大的窗口ICMP请求来完成的,如果服务器试图响应每个请求,您猜会发生什么?

我们有一台teampeak服务器,每天都会收到错误的数据包,这主要是因为两个月中有几天我们有一些“空闲时间”。我们所做的是完全禁用/阻止了ICMP响应,服务器上没有DNS服务器,没有NTP服务器,没有邮件服务器,没有FTP服务器,只有两个apache和teampeak。关闭所有不需要该服务的端口。我们计划甚至阻止ssh并仅打开两个端口。今天有21k(!)永久禁令。

情况是,攻击者主要使用ICMP隧道,而与服务器管理员讨论的却很少有真正有趣的日志行,他们说他们有服务器ICMP请求,因此,攻击者利用它来通过攻击通道对他们进行攻击并攻击我们。听起来很奇怪,但这是事实。

例如,如果您不需要服务器诊断,并且能够完全阻止请求或过滤请求以丢弃巨大的窗口,则可以这样做。我也建议您完全阻止:中国,韩国,泰国,土耳其,因为大多数IP地址都来自那里。我拥有这些国家的整体inetnum列表,但几乎每天都有新的列表。

我说我该怎么办,如果您不同意-不要这样做。就那么简单。祝好运


0

至少,您应该允许传递icmp类型3(目标不可达),4(源猝灭)和11(超过时间)。所有这些类型均用于处理网络问题,因此不应进行过滤。

iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

(目前不赞成使用源淬灭类型,但是打开它不会有任何伤害)


-2

我允许来自本地Intranet的ICMP流量,阻止来自Internet的流量。这样,我的服务器几乎不可见在线(它仅在非标准SSH端口上响应)。

iptables -I INPUT 7 -d 208.180.X.X -p icmp --icmp-type 8  -j DROP
iptables -I INPUT 8 -d 208.180.X.X -p icmp --icmp-type 0  -j DROP
iptables -I INPUT 9 -d 208.180.X.X -p icmp --icmp-type 11 -j DROP

这会将其插入到标准环回,已建立的LAN白名单,VOIP提供程序白名单和SSH端口ACCEPT之后。我允许我想要的流量,然后尽力使服务器对世界其他地方不可见。


1
我想我理解您要说的话,但这与您编写的表无关。如果您丢弃特定的ICMP类型,那么未指定的将如何处理?我会假设使用Default-Allow,否则,为什么要指定一个块作为固有块。然后,您声明“我允许我想要的流量”,这将表示Default-Deny或Default-Drop ...基本上您的答案前后矛盾,并且充其量是令人困惑的。
JM Becker 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.