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?

mohrphium
источник
В некоторых случаях sudoвыполняет поиск DNS и, если они заблокированы, команда будет медленной. Все ли другие ваши iptablesкоманды имеют префикс sudo?
Ладададада
Запустите sudo strace …(из корневой оболочки), чтобы увидеть, что он блокирует.
Жиль "ТАК - перестань быть злым"

Ответы:

3

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

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

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

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

user2371745
источник
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

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

edmz
источник
Хотя в целом это хороший совет, он не отвечает на вопрос, который на самом деле задавался.
Шадур
@Shadur Conntrack имеет значение. Это против отбросить все.
Нильс
Если вы отправляете общий запрос на веб-сервер через машину, как в этом случае, этот последний ничего не покажет, поскольку брандмауэр не позволяет отправлять пакеты на машину с установленным соединением.
edmz
Но даже если бы я разрешил ssh использовать только первые две команды, почему команды iptables занимают намного больше времени, чем с правилом conntrack ... И означает ли правило conntrack, что я могу подключиться к веб-серверу? Разве это не сделает правило отбрасывания бесполезным?
Морфий
Нет, не будет. С этим у -m conntrackвас может быть еще один «шанс», что пакеты будут приняты до того, как они будут точно отброшены. На клиентском компьютере он должен быть, iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT если вы хотите получить ответ. На стороне сервера просто разрешите входящее соединение SSH и отбросьте все остальное (если сервер действует только как SSH). Надеюсь, все ясно.
edmz