iptables导致ssh失速?

我有一台服务器通过两个网桥运行多个虚拟机,并希望通过iptables保护主机。

所以我有IN / OUTPUT:drop和FORWARD:accept的默认值,还有一些IN / OUTPUT规则允许我访问ssh

现在问题出在这个设置上,当一个命令产生一些输出行时,ssh-sessions似乎冻结了。 例如date工作,但iptables -Ltop将挂起在他们的输出中间。 我可以用~.杀死会话~. ,再次login,将iptables设置回默认值,一切工作。

在设置iptables规则之后,在问题出现之前还需要一段时间。 我还没有能够确定确切的时间表,我认为已经在5-20分钟之间。

任何想法可能会导致这样的问题,或者如何去诊断它呢?

尝试运行iptables -L -n (添加-n选项)。 名称parsing可能会导致iptables -L挂起。

你完全阻止ICMP吗? 如果是这样,你可能已经创build了一个PMTU黑洞 。

你有一个iptable的规则,允许build立的stream量通过?

 iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT 

我也看到这个问题,因为在networking上的水平分割,但这听起来不像你的问题,因为当你删除iptable规则的问题消失

这可能是一个MTU的黑洞问题。

MTU是最大传输单位; 每边可以处理多大的数据包。 以太网默认为1500字节,但这不是唯一的可能性。

短命令的工作原理是因为它们低于两个MTU大小。 更长的那些不是因为它们不是。

如果连接的两端不使用相同的MTU,或者中间的networkingMTU较小,则系统需要以某种方式计算出来; 该过程称为pathMTU发现。

这种情况发生的方式是ICMP消息。 如果你阻止了所有的ICMP,那么你阻止了有用的东西。

更多信息: 为什么不阻止ICMP?

另外请注意,如果中间的小型MTUnetworking是第2层(例如,您configuration的网桥),pathMTU发现将不起作用; 数据包将被丢弃,并在交换机/网桥和/或以太网接口上显示为错误。