将'-A INPUT -j DROP'添加到规则列表后,IPTABLES变慢


8

我刚开始使用iptables,偶然发现了一些我不太了解的东西。

仅供参考,我按照Ubuntu Wiki的IptablesHowTo的说明进行操作

nat和mangle表为空,我现在只使用filter表。

问题

如果我添加以下iptables规则:

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

...然后我仍然可以通过ssh访问我的机器,但是所有iptables命令需要大约一两分钟才能运行。这不是DNS问题,请-n不要更改它。

解决方案

如果我刷新表并添加这三个规则,则一切工作正常:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

有人可以向我解释一下,为什么第一条规则对iptables有如此大的影响?我知道它允许建立的会话接收流量,但是如果ssh打开,为什么我需要它?


在某些情况下,sudo是否进行DNS查找,如果阻止了这些查找,该命令将很慢。您的所有其他iptables命令都带有前缀sudo吗?
Ladadadada

运行sudo strace …(从根shell)以查看其受阻。
吉尔斯(Gillles)“所以-别再邪恶了”

Answers:


3

它正在执行DNS查找,并且由于响应被阻止,超时需要一段时间。

尝试执行iptables -n ...以防止DNS查找。

conntrack允许在临时端口上接收连接,该临时端口是为响应计算机发出的请求(在本例中为DNS请求)而创建的。在不允许建立或相关连接的情况下,甚至对您的请求的响应也将被阻止。

EG:如果您尝试访问某个网站,即使您能够发送该网站的请求,该网站的响应也将被阻止。


4

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

您的计算机将丢弃每个传入的数据包,除非它来自SSH端口。如果您希望该计算机仅通过SSH通信,则是个好主意。否则,您需要添加

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

这样可以确保您要连接到某个Web服务器,而不是与其他人建立连接。


虽然总体上是好的建议,但这并不能回答实际提出的问题。
Shadur 2013年

@Shadur conntrack有所作为。这反对全部放弃。
Nils 2013年

如果您通过这种情况下的机器将通用请求发送到Web服务器,则最后一个请求不会显示任何内容,因为防火墙不允许将数据包发送到已建立连接的机器。
edmz 2013年

但是,即使我只允许仅使用前两个命令来执行ssh,为什么iptables命令所花费的时间却比conntrack规则所花的时间长得多?conntrack规则是否意味着我可以连接到Web服务器?那会使丢弃规则无效吗?
mohrphium

不,不会。有了-m conntrack另一个“机会”,可以确定在将数据包丢弃之前先将其接受。在客户端计算机上,iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 如果要查看一些答案,则需要安装。在服务器端,只需允许SSH传入连接并丢弃其他所有内容(如果服务器仅充当SSH服务器)。希望一切都清楚。
edmz 2013年
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.