Правило iptables разрешить весь исходящий локально исходящий трафик?

11

Мне было интересно, может ли кто-нибудь помочь мне со следующим правилом iptables:

Мы хотели бы разрешить ЛЮБОЙ и ВСЕ локально исходящий (например, на сервере, на котором работает iptables) трафик.

DNS, HTTP и т.д ... все это. Любое соединение, инициированное сервером, на котором запущен iptables, должно быть разрешено.

В настоящее время мы используем в основном политику OUTPUT по умолчанию, ACCEPT. Это правильно? Входы заблокированы, поэтому я предполагаю, что это означает, что соединения (кроме тех, которые мы разрешаем) не могут быть запущены, потому что они будут сброшены, прежде чем наша сторона сможет выполнить политику OUTPUT?

Извините, у меня слабые навыки iptables;)

Спасибо, любезно.

анонимные один
источник

Ответы:

26

Вам нужно два правила, чтобы сделать это:

iptables -I OUTPUT -o eth0 -d 0.0.0.0/0 -j ACCEPT
iptables -I INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Некоторые заметки.

  • Существующие ранее правила, возможно, уже сделали это, но выглядят иначе.
  • Это использует, -Iчтобы заставить эти правила быть первыми. iptablesправила оцениваются сверху вниз.
  • -oИ -iфлаги означают «из» и «в» соответственно. Замените eth0на правильное имя интерфейса Ethernet.
bahamat
источник
у нас есть оба :) я не упомянул второй, потому что, как я уже сказал ... мои навыки iptables - слабый соус. спасибо за разъяснения :)
анонимный -
2
-d 0.0.0.0/0избыточно и не нужно.
zapstar
Отличный ответ. Но теперь я могу пропинговать сервер, и я не понимаю, почему. Вы можете объяснить?
Даниил
@Daniel Потому что, если вы разрешите только исходящий трафик, то пинг-ответ будет отброшен фильтром пакетов, когда он достигнет вашего хоста. Чтобы предотвратить это, вам также необходимо разрешить входящий трафик, связанный с тем же сеансом, что и любой исходящий трафик. Другими словами, поскольку ответ на запрос ping связан с запросом ping, его следует разрешить. Если есть входящий запрос проверки связи и нет записи исходящей проверки связи в таблице сеансов, то входящий пакет будет отброшен. Надеюсь, что это имеет смысл!
Багамат
@bahamat: После того, как я попробовал снова, я обнаружил, что мне нужно явно разрешить трафик icmp. И я говорил о возможности пинговать сервер, где я реализовал правила выше. Кстати не могу воспроизвести, может я где-то ошибся. Спасибо, в любом случае.
Даниэль
0

В настоящее время мы используем в основном политику OUTPUT по умолчанию, ACCEPT.

Этого достаточно для OUTPUT, потому что Netfilter не нуждается в специальных правилах для запуска отслеживания соединений с отслеживанием состояния.

Но если вы хотите отфильтровать входящий трафик в соответствии с политикой запрета по умолчанию, это можно сделать с помощью переключателя INPUT-chain DROP:iptables -P INPUT DROP

После этого все будет установлено только с двумя правилами :

iptables -A INPUT -j ACCEPT -i lo
iptables -A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED

Обратите внимание на правило, разрешающее входной трафик через интерфейс обратной связи - как я отмечал в своем блоге « Минимальный брандмауэр для конечного пользователя », если явно не разрешено, трафик обратной связи не будет обрабатываться проверкой «установленного» состояния по сравнению с возвратом. трафик над, скажем, eth0.

Чтобы гарантировать, что этот минимальный набор правил загружен « как есть » без вмешательства в правила, которые уже могут быть там, удобно использовать iptables-restoreв SHELL-сессии:

lptables-restore <<__EOF__
-P INPUT DROP
-A INPUT -j ACCEPT -i lo
-A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED
__EOF__

Прежде чем делать это, убедитесь, что вы не разорвете свое собственное сетевое соединение 1 , хотя уже открытые сеансы SSH должны продолжать работать в обычном режиме, попытки открыть новые сеансы не будут работать.

__

  1. Конечно, вы можете добавить другие правила, чтобы разрешить такие соединения. Это может быть так просто, как просто -A INPUT -j ACCEPT -p tcp --dport 22- не нужно -m stateздесь повозиться . Также не забудьте исправить lptables-restoreобратно , iptables-restoreпрежде чем пытаться его;)
poige
источник