Мне было интересно, может ли кто-нибудь помочь мне со следующим правилом iptables:
Мы хотели бы разрешить ЛЮБОЙ и ВСЕ трафик, исходящий локально (например, на сервере, на котором запущен iptables).
DNS, HTTP и т.д ... все это. Любое соединение, инициированное сервером, на котором запущен iptables, должно быть разрешено.
В настоящее время мы используем в основном политику OUTPUT по умолчанию, ACCEPT. Это верно? Входы заблокированы, поэтому я предполагаю, что это означает, что соединения (кроме тех, которые мы разрешаем) не могут быть запущены, потому что они будут сброшены до того, как наша сторона сможет попасть в политику OUTPUT?
Извините, у меня слабые навыки работы с iptables;)
Большое спасибо.
Для этого вам понадобятся два правила:
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.В настоящее время мы используем в основном политику OUTPUT по умолчанию, ACCEPT.
Этого достаточно для OUTPUT, потому что Netfilter не требует специальных правил для запуска отслеживания соединений с отслеживанием состояния.
Но если вы хотите отфильтровать входящий трафик в соответствии с "по умолчанию отказать"политику можно сделать с переключением INPUT
-цепь к DROP
: iptables -P INPUT DROP
После этого все будет установлено с помощью всего 2 правила:
iptables -A INPUT -j ACCEPT -i lo
iptables -A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED
Обратите внимание на правило, разрешающее входной трафик на loopback интерфейсе - как я указал в своем блоге "Минимальный брандмауэр для конечного пользователя", если явно не разрешено, петлевой трафик не будет обрабатываться проверкой" установленного "состояния по сравнению с обратным трафиком, скажем, 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 должны продолжать работать в обычном режиме, попытки открыть новые не будут работать.
__
-A INPUT -j ACCEPT -p tcp --dport 22
- не нужно возиться с -m state
Вот. Также не забудьте исправить lptables-restore
вернуться к iptables-restore
перед тем, как попробовать;)