使用iptables时拒绝与拒绝


Answers:


79

通常,当您希望另一端知道端口不可达时,请使用REJECT。对于与您不希望别人看到的主机建立连接,请使用DROP。

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

使用DROP会使连接看起来好像是到一个未占用的IP地址。扫描程序可以选择不继续扫描未占用的地址。假定可以使用NAT重定向防火墙上的连接,则众所周知的服务的存在不一定表示地址上服务器的存在。

标识应在提供SMTP服务的任何地址上传递或拒绝。但是,SMTP服务对Ident查找的使用已停止使用。有聊天协议也依赖于工作的身份服务。

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

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


5
这不是真的。即使规则说“ DROP”,系统仍将使用TCP SYN / ACK答复进入的数据包,就好像它是打开的一样。要真正丢弃数据包,系统需要使用TCP RST / ACK进行应答-没有防火墙规则。因此,最好的防火墙设置是仅转发选定端口的一种。您的DROP规则将通告您的防火墙,端口扫描程序将知道您正在对某些内容进行防火墙保护,并不断锤击您,以期将防火墙关闭。
Dagelf

2
我的观点是,从外部可以检测到您是否在对某些防火墙进行防火墙处理,因为仅当您进行DROP时,TCP堆栈的行为就与没有首先运行的服务时的TCP栈的行为不同!
Dagelf 2014年

2
不会改变僵尸网络利用差异并因此监视端口的事实。
Dagelf

1
无论您做什么,都要保持一致。如果攻击者选择了一个未使用的端口号并尝试进行连接,则应该获得与选择了您有目的地阻止的端口相同的响应。给出不同的答复告诉他那里有东西。例如,他可以使用purtnumber给出不同的响应来确定您正在使用的数据库服务器,他可以为该服务器定制SQL注入...
user313114

5
@Dagelf您从哪里获得DROP发送响应的信息?这是个大新闻,与我所观察到的一切都背道而驰。您是否有指向描述此行为的文档的链接?
得分_

27

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

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

有关此的更多信息:http : //www.linuxtopia.org/Linux_Firewall_iptables/x4550.html


2
DROP目标不会发送任何内容。检查我对已接受答案的评论,如果您对详细信息感兴趣,请自己研究该主题!
Dagelf 2014年

8

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

以上是使用DROP代替REJECT的主要原因之一。


6
如果没有iptables规则,则关闭的端口默认为REJECT。如果您删除每个端口,这是一个很好的选择(您的主机出现了),但是如果您仅删除特定的端口,则实际上给了他们比拒绝更多的信息。如果有人使用诸如nmap之类的覆盖式探针,则丢弃数据包的特定端口将显示为“已过滤”,这意味着他们知道您所藏的服务在那里。
Raptor007 '16

7

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

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

REJECT与DROP的不同之处在于,DRJ确实将数据包发回,但是答案就像是服务器位于IP上,但端口没有处于侦听状态。如果使用TCP或使用UDP无法到达ICMP目标端口,则IPtables将发送RST / ACK。


2
向我+1,但答案并不完全不同意。就我所见,他们全都同意,但达格夫除外-他错了。
MadHatter

好的,那么这里有个小窍门:做一个“ nmap localhost”。现在,选择任何未“打开”的端口...并添加“不执行任何操作”的规则,例如:“ iptables -I INPUT -p tcp --dport 888 -j DROP”。现在再次“ nmap localhost”。你看到了什么?...
Dagelf

4

如果您要完全隐藏计算机的存在,-j DROP则适当。例如,您可以使用它来实现黑名单。

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

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

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


如果您打开几个端口(即22、25、53、80、443)然后丢弃其他所有内容,该怎么办?现在我是否正在运行MySQL,PostgreSQL,SQLite或Cassandra ...扫描仪无法判断,对不对?
亚历克西斯·威尔克,2016年

@AlexisWilke在这种情况下,您给端口扫描程序提供的唯一其他信息是,您已使用默认的DROP策略安装了某种防火墙。
Raptor007

0

尽管有很多正确答案,但我只有两美分:

这是我关于主题禁令(防火墙,IDS等)的简短PoC FW.IDS-DROP-vs-REJECT

不久:

  • DROP 如果禁止所有端口,则可用于新旧入侵者(因此服务器似乎位于入侵者一侧)
  • REJECT --reject-with tcp-reset 是多端口禁止的最佳选择,因为它看起来像一个真正的封闭端口
  • 如果某些端口正在应答(入侵者知道主机还活着),DROP并且REJECT(没有tcp-reset)将向入侵者发出“信号”,表明存在某种阻塞(因此可能会刺激他继续进行“攻击”,以期提供所需的数据)在某一点)

-5

是的,使用DROP是没有意义的。使用拒绝。

即使规则说“ DROP”,系统仍会使用TCP RST / ACK答复传入的SYN-这是没有服务运行的端口的默认行为。(tcpdump等未记录此信息。)

如果服务正在运行,则SYN与TCP SYN / ACK匹配。

因为DROP不会像往常一样使用TCP SYN / ACK响应,而是使用RST / ACK,所以您的DROP规则将通告您的防火墙,并且端口扫描程序将知道您正在对某些内容进行防火墙保护,并且可能会不断打击您赶上防火墙。

现在,nmap可以报告“已过滤”而不是“关闭”,例如:

$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
53/tcp   open  domain
80/tcp   open  http

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

$ iptables -I INPUT -p tcp --dport 1111 -j DROP
$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
53/tcp   open  domain
80/tcp   open  http
1111/tcp filtered lmsocialserver

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

$ iptables -D INPUT 1

因此,唯一的“不可见”防火墙设置是专用设备位于设备之间并且仅选择性转发端口的设置。

如果您真的想弄乱基本的扫描器,可以使用TARPIT tcp连接,它将TCP窗口设置为0,这样在打开连接后就不会传输任何数据,而忽略关闭连接的请求,这意味着扫描器必须等待如果需要确保连接超时发生。但是,对于攻击者而言,检测到这一点并使超时时间非常短是微不足道的。

考虑到所有因素,您最好只使用REJECT-或在服务器和Internet之间放置专用的端口转发设备。

或者仅在不需要防火墙的面向互联网的机器上运行服务。

通常,REJECT最适合Web服务器,因为无论尝试访问它的任何服务(可能经常会出现这种情况,您)都将迅速获得响应,并且用户或其他服务将不会一直在等待网络中断。


5
这个答案是不正确的。使用tcpdump可以很容易地显示出DROP规则将导致系统不发送任何答案-就像人们期望的那样。您的声明“要真正丢弃数据包,系统需要使用TCP RST / ACK进行回复”是没有意义的,因为回复任何内容显然不是“真正丢弃数据包”。如果您“丢弃”数据包,您只是不回答,这显然是DROP规则的效果。
朱莉安·霍尔兹(Julian Holzt),2015年

3
你能提供有关指控的来源DROP会发出SYN/ACK?我从来没有在我的机器上看到它。
motobói

2
@Dagelf您的文章确实说“ DROP(又名DENY,BLACKHOLE)禁止数据包通过。不发送任何响应。”
JeanT

它不会发送正常响应,但是无论如何它都会发送一个响应。
Dagelf

3
您链接到的文档显示“ DROP ... Send no response ”,据我所知,它不支持您的DROP返回a的声明SYN/ACK。我也从未在任何版本的上看到这种行为iptables。如果您有支持您主张的消息来源,那么查看该消息将非常有用;当然,我刚刚完成的数据包转储不支持您的要求。
MadHatter
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.