Iptables приводит к зависанию ssh?

Iptables приводит к зависанию ssh?

У меня есть сервер, на котором запущено несколько виртуальных машин через два моста, и я хочу защитить хост с помощью iptables.

Итак, у меня есть значения по умолчанию для IN/OUTPUT: drop и FORWARD: accept, а также некоторые правила IN/OUTPUT, разрешающие мне доступ по SSH.

Теперь проблема в том, что при такой настройке сеансы ssh, по-видимому, зависают, когда команда выводит несколько строк. Например, dateработает, но iptables -Lили topзависает в середине вывода. Я могу завершить сеанс с помощью ~., войти снова, вернуть iptables к значениям по умолчанию, и все снова работает.

Также после установки правил iptables требуется некоторое время, прежде чем проблема возникнет. Я не смог определить точные временные рамки, я думаю, это было между 5-20 минутами.

Есть ли у вас идеи, что может вызвать такую ​​проблему или как ее диагностировать?

решение1

Попробуйте запустить iptables -L -n(добавьте опцию -n). Разрешение имен может привести к зависанию iptables -L.

решение2

Вы полностью блокируете ICMP? Если да, то вы могли создатьPMTU черная дыра.

решение3

Есть ли у вас правило iptable, разрешающее прохождение установленного трафика?

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

Я также видел эту проблему из-за разделения горизонта в сети, но это не похоже на вашу проблему, поскольку проблема исчезает, когда вы удаляете правила iptable.

решение4

Это может быть проблема «черной дыры» MTU.

MTU — это максимальная единица передачи; насколько большой пакет может обработать каждая сторона. Ethernet по умолчанию имеет значение 1500 байт, но это далеко не единственная возможность.

Короткие команды работают, потому что они меньше обоих размеров MTU. Более длинные — нет, потому что они не такие.

Если оба конца соединения не используют одинаковый MTU или если сеть посередине имеет меньший MTU, вашим системам придется как-то это выяснить; этот процесс называется обнаружением MTU пути.

Это происходит с сообщениями ICMP. Если вы блокируете все ICMP, ну, вы блокируете полезные вещи.

Более подробная информация здесь:Почему бы не заблокировать ICMP?

Также обратите внимание, что если сеть с малым MTU в середине находится на уровне 2 (например, настроенные вами мосты), обнаружение MTU пути работать не будет; пакеты будут просто отбрасываться и отображаться как ошибки на коммутаторе/мосте и/или на интерфейсах Ethernet.

Связанный контент