IPTABLES работает медленно после добавления -A INPUT -j DROP в список правил


8

Я только начинаю с iptables и наткнулся на то, чего я не очень понимаю.

К вашему сведению, я следовал инструкциям IptablesHowTo вики-сайта Ubuntu .

Таблицы nat и mangle пусты, сейчас я работаю только с таблицей фильтров.

Проблема

Если я добавлю следующие правила 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?
— Ладададада

Запустите sudo strace …(из корневой оболочки), чтобы увидеть, что он блокирует.
— Жиль "ТАК - перестань быть злым"

Ответы:


3

Он выполняет поиск DNS, и поскольку ответ заблокирован, время ожидания истекает.

Попробуйте выполнить iptables -n ..., чтобы предотвратить поиск DNS.

Conntrack позволяет получать соединения по временному порту, который был создан для ответов на запросы, инициированные вашей машиной (в данном случае DNS-запрос). Без разрешения УСТАНОВЛЕННЫЕ или СВЯЗАННЫЕ соединения даже ответы на ваши запросы блокируются.

Например, если вы попытаетесь перейти на веб-сайт, даже если вы сможете отправить запрос на веб-сайт, ответ веб-сайта будет заблокирован.


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

это даст вам уверенность, что вы собираетесь подключаться к какому-либо веб-серверу, а не к кому-то еще.


Хотя в целом это хороший совет, он не отвечает на вопрос, который на самом деле задавался.
— Шадур

@Shadur Conntrack имеет значение. Это против отбросить все.
— Нильс

Если вы отправляете общий запрос на веб-сервер через машину, как в этом случае, этот последний ничего не покажет, поскольку брандмауэр не позволяет отправлять пакеты на машину с установленным соединением.
— edmz

Но даже если бы я разрешил ssh использовать только первые две команды, почему команды iptables занимают намного больше времени, чем с правилом conntrack ... И означает ли правило conntrack, что я могу подключиться к веб-серверу? Разве это не сделает правило отбрасывания бесполезным?
— Морфий

Нет, не будет. С этим у -m conntrackвас может быть еще один «шанс», что пакеты будут приняты до того, как они будут точно отброшены. На клиентском компьютере он должен быть, iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT если вы хотите получить ответ. На стороне сервера просто разрешите входящее соединение SSH и отбросьте все остальное (если сервер действует только как SSH). Надеюсь, все ясно.
— edmz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.