Bil*_*hor 91

作为一般规则,当您希望另一端知道端口无法访问时使用 REJECT '使用 DROP 连接到您不希望人们看到的主机。

通常,LAN 内的所有连接规则都应使用 REJECT。对于 Internet,除了某些服务器上的 ident,来自 Internet 的连接通常被删除。

使用 DROP 使连接看起来像是一个未被占用的 IP 地址。扫描器可以选择不继续扫描看起来未被占用的地址。鉴于 NAT 可用于重定向防火墙上的连接,众所周知的服务的存在并不一定表明地址上存在服务器。

任何提供 SMTP 服务的地址都应该通过或拒绝 Ident。但是,SMTP 服务对 Ident 查找的使用已不再使用。有一些聊天协议也依赖于有效的身份服务。

编辑:当使用 DROP 规则时: - UDP 数据包将被丢弃,行为将与连接到没有服务的非防火墙端口相同。- TCP 数据包将返回一个 ACK​​/RST,它与没有服务的开放端口将响应的响应相同。一些路由器将代表关闭的服务器以 ACK/RST 进行响应。

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

  • 这不是真的。即使规则说“DROP”,系统仍然会用 TCP SYN/ACK 回复传入的数据包,就好像它是打开的一样。要真正丢弃数据包,系统需要回复 TCP RST/ACK - 对此没有防火墙规则。因此,最好的防火墙设置是只转发选定端口的防火墙设置。你的 DROP 规则会宣传你的防火墙,端口扫描器会知道你正在设置防火墙,并不断攻击你,希望能将你的防火墙拦截下来。 (9认同)
  • @Dagelf 你从哪里得到 DROP 发送响应的信息?这是个大新闻,与我观察到和被告知的一切背道而驰。你有描述这种行为的文档的链接吗? (9认同)
  • @Dagelf,你部分正确,但把事情弄得一团糟。`DROP` 不会回复_任何_!关闭的端口将返回“RST/ACK”,打开的端口将返回“ACK”或 SYN/ACK。现在,`REJECT` 规则将_default_ 设为“reject-with icmp-port-unreachable”(用 icmp 数据包回复),因此不同于关闭端口响应和 DROPped(超时)响应。如果您不喜欢那样,请使用“-j REJECT --reject-with tcp-reset”之类的规则。另见 http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject (4认同)
  • 我的观点是,从外部可以检测到您是否对某些东西设置了防火墙,因为仅当您 DROP 时您的 TCP 堆栈的行为与您首先没有运行服务时的行为不同! (3认同)
  • 不会改变这样一个事实,即存在僵尸网络利用差异并因此监控您的端口。 (2认同)

Ziz*_*ncs 31

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

例如,这对于 ident 服务很有用。如果您使用 REJECT,则客户端不需要等待超时。

更多相关信息:http : //www.linuxtopia.org/Linux_Firewall_iptables/x4550.html

  • DROP 目标不发送任何内容。检查我对已接受答案的评论,如果您对细节感兴趣,请自行研究该主题! (2认同)

wzz*_*zrd 9

通常,您希望忽略攻击者对某些端口的探测,我的意思是您不想发回“连接被拒绝”。“连接被拒绝”的意思是:“这里有一台服务器”,并且可能会泄露更多信息,而丢弃数据包不会泄露有关软件版本、可能存在的漏洞甚至服务器正在侦听您 IP 的事实的线索。

以上是使用 DROP 而不是 REJECT 的主要原因之一。

  • 如果没有 iptables 规则,关闭的端口默认为 REJECT。如果您删除每个端口,这是一个不错的选择(您的主机出现故障),但是如果您只删除特定端口,您实际上为它们提供了比拒绝更多的信息。如果有人使用像 nmap 这样的全面探测,丢弃数据包的特定端口将显示为“已过滤”,这意味着他们知道您在那里隐藏了一项服务。 (9认同)

小智 8

我在这里看到很多相互矛盾的答案,鉴于这是 Google 上第一篇使用正确关键字的文章;这是正确的解释。
很简单:

DROP 对数据包什么也不做。它不会转发给主机,也不会得到答复。IPtables 的联机帮助页说它会将数据包丢弃在地板上,即它对数据包没有任何作用。

REJECT 与 DROP 不同,它确实发送了一个数据包,但答案是好像服务器位于 IP 上,但没有处于侦听状态的端口。IPtables 将在 TCP 或 UDP 的情况下发送 RST/ACK,ICMP 目标端口不可达。

  • 来自我的 +1,但答案并没有真正不同。他们都同意,据我所知,除了达格夫——他错了。 (3认同)
  • 好的,这里有一个小技巧给你:做一个“nmap localhost”。现在选择任何不是“开放”的端口......并添加一个“什么都不做”的规则,例如:“iptables -I INPUT -p tcp --dport 888 -j DROP”。现在再次“nmap localhost”。你看到了什么?... (2认同)

Rap*_*007 6

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

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

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

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