使用 iptables 时 REJECT 与 DROP

使用 iptables 时 REJECT 与 DROP

我有什么理由想要

iptables -A INPUT -j REJECT

代替

iptables -A INPUT -j DROP

答案1

作为一般规则,当您想让另一端知道端口不可访问时使用 REJECT;对于您不想让人们看到的主机的连接,请使用 DROP。

通常,LAN 内部连接的所有规则都应使用 REJECT。对于 Internet,除了某些服务器上的 Ident 之外,来自 Internet 的连接通常会被丢弃。

使用 DROP 会使连接看起来像是未占用的 IP 地址。扫描程序可以选择不继续扫描看起来未占用的地址。鉴于 NAT 可用于重定向防火墙上的连接,因此知名服务的存在并不一定表示地址上存在服务器。

任何提供 SMTP 服务的地址都应允许或拒绝 Ident。但是,SMTP 服务器使用 Ident 查找已不再使用。有些聊天协议也依赖于有效的 Ident 服务。

编辑:使用 DROP 规则时:

  • UDP 数据包将被丢弃,其行为将与连接到没有服务的无防火墙端口相同。
  • TCP 数据包将返回 ACK/RST,这与没有服务的开放端口的响应相同。某些路由器将代表停机的服务器响应 ACK/RST。

当使用 REJECT 规则时,会发送 ICMP 数据包,表示端口不可用。

答案2

区别在于 REJECT 目标向源发送拒绝响应,而 DROP 目标不发送任何内容。

这对于 ident 服务等来说很有用。如果您使用 REJECT,那么客户端就不需要等待超时。

更多详情:http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html

答案3

我看到这里有很多相互矛盾的答案,鉴于这是 Google 上第一篇包含正确关键词的文章,以下是正确的解释。
很简单:

DROP 对数据包不做任何处理。它不会转发到主机,也不会得到答复。IPtables 的手册页说它会将数据包丢弃在地上,即它对数据包不做任何处理。REJECT

与 DROP 不同,它会将数据包发回,但答案就好像服务器位于 IP 上,但没有处于侦听状态的端口。如果 TCP 或 UDP 的 ICMP 目标端口不可达,IPtables 将发送 RST/ACK。

答案4

如果您想要完全隐藏您的机器的存在,这-j DROP是合适的。例如,您可以使用它来实现黑名单。

如果您试图隐藏端口已打开的事实,则应该模仿端口未打开时会发生的行为:

  • TCP:-p tcp -j REJECT --reject-with tcp-reset
  • UDP:-p udp -j REJECT --reject-with icmp-port-unreachable

如果端口扫描器发现少数端口丢弃数据包而大多数端口拒绝数据包,则可以假定丢弃的数据包位于开放但隐藏的端口上。

相关内容