在iptables中设置-j REJECT或-j DROP更好吗?


33

在archlinux Wiki上有一个iptables规则示例:

# Generated by iptables-save v1.4.18 on Sun Mar 17 14:21:12 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sun Mar 17 14:21:12 2013

几天前,我的朋友问我为什么REJECT最后三个规则中存在该规则。他告诉我应该DROP改为使用,并且他提到了一些更好的安全性DROP

因此,我有两个问题:

  1. 这三个规则有什么作用?

  2. 当我放在DROP适当的位置时,有什么区别REJECT --reject-with吗?如果是,有什么区别?


Answers:


33

这三个规则有什么作用?

这三个规则似乎很不言自明:

  1. 拒绝带有ICMP消息“端口不可达”的传入UDP数据包
  2. 使用“ tcp reset”拒绝传入的TCP数据包
  3. 拒绝带有ICMP消息“协议不可达”的(任何其他协议的)传入数据包

如果您正在寻找更多详细信息(有关UDP / TCP数据包,ICMP),则需要深入研究网络文档,也许也要深入man iptables

当我在其中放置DROP REJECT --reject-with时,有什么区别吗?如果是的话,有人可以向我解释差异吗,我将不胜感激。

这有所作为。与普遍看法相反,DROP安全性并没有比更好REJECT。它给合法用户带来不便,并且实际上也无法避免恶意用户的攻击。这篇文章详细解释了原因:

http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject

使用DROP而不是REJECT的一个常见原因是避免提供有关打开哪个端口的信息,但是,丢弃数据包所提供的信息与拒绝信息一样多。

使用REJECT,您可以进行扫描并将结果分类为“已建立连接”和“已拒绝连接”。

使用DROP,您可以将结果分为“连接建立”和“连接超时”两类。

最琐碎的扫描程序将使用操作系统的“连接”调用,并等待一次连接尝试完成后再开始下一次连接。通过丢弃数据包,此类扫描器的速度将大大降低。但是,如果攻击将每次连接尝试的超时设置为5秒,则可以在1.5小时内扫描计算机上的每个保留端口(1..1023)。扫描始终是自动进行的,攻击者不在乎结果不是立即产生的。

功能更强大的扫描程序将自己发送数据包,而不是依赖操作系统的TCP实现。此类扫描仪快速,高效且对REJECT或DROP的选择无动于衷。

结论

DROP并未对敌对力量提供有效的屏障,但会大大降低合法用户运行的应用程序的速度。通常不应使用DROP。


@janos-您能否再详细说明当数据包到达三个规则中的每个规则时实际发生的情况?
Mikhail Morfikov 2014年

3
@Kiwy-阅读链接,然后自己尝试。DROP没有提供比REJECT更好的安全性。它给合法用户带来不便,并且实际上也无法避免恶意用户的攻击。这是因为合法用户在等待连接超时时会遇到连接速度慢的问题,而破解者只是将其工具配置为不等待超时。连接缓慢(由于等待超时)的事实表明您的服务器已安装在防火墙中。
Panther

2
我不能得出这个结论。拒绝生成可以分析的ICMP答案。基于此分析,良好的攻击引擎可以得出正在使用的操作系统。因此,在所有端口都已知的系统上,丢弃可能会更好。这适用于生产环境中的服务器。
Nils

1
仅转发某些端口的防火墙甚至更好。放弃拒绝与完全没有服务运行在第一位不同。许多端口扫描程序将您的主机标记为将来扫描的潜在目标,希望它们在防火墙中找到拒绝或下降时将您的防火墙关闭,因为可以从外部检测到两者。chiark.greenend.org.uk/~peterb/network/drop-vs-reject
Dagelf

1
请注意,引用的文本还有一个段落,即更新,它表示如果您遭受DDoS攻击,DROP会更好,这种情况比较少见,但是当发生DDoS攻击时,拥有它可能是一件好事...您怎么看?
亚历克西斯·威尔克,2016年
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.