iptables DROP不会以静默方式丢弃数据包

时间:2014-05-09 07:01:30

标签: postgresql iptables

我有两台服务器,一台作为备用服务器,另一台作为活动服务器。从备用pgpool不断检查postgres是否正在另一台服务器上运行。我试图模拟pgpool对活动服务器的请求超时的情况,并尝试使用iptables DROP。

根据我所读到的内容,DROP选项会静默地丢弃数据包,而不会让源代码知道它,并且需要很长时间才能失败(知道源代码)。我在活动服务器的iptables中使用了以下条目

iptables -A INPUT -p tcp -s <standby server ip> -m state --state NEW,ESTABLISHED --dport 5432 -j DROP

通过这样做,我可以模拟超时,但它会超时(甚至不是一秒钟)。

任何人都可以解释它是什么意思&#34;需要很长时间才能失败&#34;在所有的参考?以及是否有任何可以用来增加失败时间的选项。

2 个答案:

答案 0 :(得分:0)

根据规则集中规则的位置,它可能无法触发,<standby server ip>的数据包可能会达到ALLOW规则。

您可以使用iptables

主动监控watch以查看正在触发的规则
$ sudo watch -n1 "iptables -vnL"

“花费很长时间才能失败”意味着DROP告诉iptables不使用tcp重置数据包或icmp错误来响应数据包的发送方。这会导致发送方在关闭尝试连接之前必须等待指定的超时时间。

答案 1 :(得分:0)

我通过使用telnet而不是pgpool再次测试了它,它确实等待了60秒。事实证明问题出在pgpool本身,而不是在iptables中。我提供这个作为任何遇到这个问题的人的答案。谢谢大家的答案