Я только начинаю с 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 …
(из корневой оболочки), чтобы увидеть, что он блокирует.Ответы:
Он выполняет поиск DNS, и поскольку ответ заблокирован, время ожидания истекает.
Попробуйте выполнить iptables -n ..., чтобы предотвратить поиск DNS.
Conntrack позволяет получать соединения по временному порту, который был создан для ответов на запросы, инициированные вашей машиной (в данном случае DNS-запрос). Без разрешения УСТАНОВЛЕННЫЕ или СВЯЗАННЫЕ соединения даже ответы на ваши запросы блокируются.
Например, если вы попытаетесь перейти на веб-сайт, даже если вы сможете отправить запрос на веб-сайт, ответ веб-сайта будет заблокирован.
источник
С
Ваша машина будет отбрасывать каждый входящий пакет, если он не приходит через порт SSH. Это хорошая идея, если вы хотите, чтобы эта машина соединялась только через SSH. В противном случае вам нужно добавить
это даст вам уверенность, что вы собираетесь подключаться к какому-либо веб-серверу, а не к кому-то еще.
источник
-m conntrack
вас может быть еще один «шанс», что пакеты будут приняты до того, как они будут точно отброшены. На клиентском компьютере он должен быть,iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
если вы хотите получить ответ. На стороне сервера просто разрешите входящее соединение SSH и отбросьте все остальное (если сервер действует только как SSH). Надеюсь, все ясно.