我有什么理由想要拥有

iptables -A INPUT -j REJECT


iptables -A INPUT -j DROP


#1 楼

通常,当您希望另一端知道端口不可达时,请使用REJECT。对于不想让人们看到的主机,请使用DROP进行连接。您的LAN应该使用REJECT。对于Internet,除了某些服务器上的ident之外,通常会删除Internet上的连接。扫描程序可以选择不继续扫描未占用的地址。鉴于可以使用NAT重定向防火墙上的连接,因此,众所周知的服务的存在并不一定表示地址上服务器的存在。

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

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

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

评论


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

– Dagelf
2014年1月3日,6:02

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

– Dagelf
2014-02-25 15:49

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

– Dagelf
14年2月27日在14:08

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

–Score_Under
18年1月11日在10:01

@Dagelf,您部分正确,但事情一团糟。 DROP不会回复任何东西!关闭的端口将返回RST / ACK,打开的端口将返回ACK或SYN / ACK。现在,REJECT规则将默认为“拒绝icmp-port-unreachable”(使用icmp数据包答复),因此不同于封闭端口响应和DROPped(超时)响应。如果您不喜欢,请使用-j REJECT --reject-with tcp-reset之类的规则。另请参阅chiark.greenend.org.uk/~peterb/network/drop-vs-reject

– nyov
20年2月1日在19:36

#2 楼

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

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

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

评论


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

– Dagelf
2014年2月25日15:50

#3 楼

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

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

评论


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

–Raptor007
16年8月18日在4:52

#4 楼

我在这里看到很多矛盾的答案,这是Google上第一篇使用正确关键字的文章;这是正确的解释。
很简单:DROP对该数据包完全不起作用。它不会转发给主机,也不会得到答复。 IPtables的联机帮助页说它将数据包丢在地板上,即它对数据包不做任何操作。位于IP上,但端口未处于侦听状态。如果使用TCP或使用UDP无法到达ICMP目标端口,则IPtables将发送RST / ACK。

评论


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

– MadHatter
16年1月11日,12:45

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

– Dagelf
18年3月13日在21:55



主机启动,已过滤端口801 / tcp STATE

–a55
20/12/27在1:47

#5 楼

如果您要完全隐藏计算机的存在,请使用-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 ...扫描仪无法判断,对不对?

– Alexis Wilke
16年11月13日,0:33

@AlexisWilke在这种情况下,您要给端口扫描程序提供的唯一其他信息是,您具有某种采用默认DROP策略的防火墙。

–Raptor007
16年11月14日在21:14

#6 楼

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

以下是我的简短PoC FW.IDS-DROP-vs-REJECT是我对主题的禁令规则IDS等)。

简短地说:




DROP如果禁止所有端口,则可以用于隐性入侵者(因此看起来服务器是

REJECT --reject-with tcp-reset是多端口禁止的最佳选择,因为如果某些端口正在应答,它看起来就像是一个真正的封闭端口
(入侵者知道主机DROPREJECT(没有tcp-reset仍然存在)会给入侵者一个“信号”,表明存在某种阻塞(这样可以激发他继续进行“攻击”,以期在某个时候提供所需的数据)

#7 楼

是的,使用DROP是没有意义的。使用REJECT。

即使规则显示“ 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。这样,在打开连接后就不会传输任何数据,而忽略了关闭连接的请求,这意味着扫描仪必须等待连接超时才能确定。但是,对于攻击者而言,检测到这一点并使其超时非常短是很容易的。互联网。

或者只是在不需要防火墙的面向互联网的机器上运行服务。您(通常)会很快得到响应,并且用户或其他服务也不会一直在等待是否出现网络中断。

评论


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

–朱利安·霍尔兹(Juliane Holzt)
2015年4月3日,下午4:55

您能为DROP发出SYN / ACK的指控提供消息来源吗?我从来没有在我的机器上看到它。

–motobói
15年4月12日在21:24

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

– JeanT
15年7月24日在11:32

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

– Dagelf
15年11月30日在19:17

您链接到的文档说“ DROP ...不发送响应”,据我所知,它不支持您关于DROP返回SYN / ACK的主张。我也从未在任何版本的iptables下看到这种行为。如果您有支持您主张的资料来源,那么查看该资料将非常有用;当然,我刚刚完成的数据包转储不支持您的要求。

– MadHatter
16年1月11日在12:42