Надеюсь меня никуда не оттправят, составил сам как смог iptable правила, ситуация примерно такая:1. Есть сервер щлюз c nginx
2. За ним несколько серверов (не все web сервера т.е., там еще та же mysql репликация отдельно для бэкапов на довольно дохлом железе)
Хочу настроить iptables, с учетом того что удаленный доступ по ftp/ssh мне не нужен, почты тоже нет, хочется все лишнее запретить и нужно оставить, вот так примерно я сделал... Но не знаю, покритикуйте пожайлуста, посоветуйте что не так? Интернет всем нужен для обновлений и т.п., поэтому и NAT тоже есть, делал по примерам)) правда под себя переделал кое что. Система Debian, eth0 - интернет, eth2 - локалка# Для очистки таблицы правил
iptables -F
iptables -X# Добавляем правила по умолчанию
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP# Разрешаем доступ по localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT# Эти правила служат для того, чтобы для каждого разрешающего правила не пришлось прописывать обратное ему (для прохождения ответных пакетов).
# Короче говоря, позволяют входящие и исходящие соединения, инициированные уже установленными соединениями
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT# Далее действуем по мере необходимости
# Разрешаем доступ к серверу из локальной сети по протоколу ssh
iptables -A INPUT -p tcp -m tcp -s 192.168.2.0/24 --dport 22 -j ACCEPT# Разрешаем доступ к серверу из локальной сети по протоколу ftp
iptables -A INPUT -p tcp -m tcp -s 192.168.2.0/24 --dport 21 -j ACCEPT# Разрешаем пинговать сервер из локальной сети
iptables -A INPUT -p icmp -m icmp --icmp-type echo-request -s 192.168.2.0/24 -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type echo-reply -d 192.168.2.0/24 -j ACCEPT# Разрешаем серверу доступ к внешним (интернетовским) DNS-серверам
iptables -A OUTPUT -p tcp -m tcp -o eth0 --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -m udp -o eth0 --dport 53 -j ACCEPT# Разрешаем серверу доступ к внешним http-серверам
iptables -A OUTPUT -p tcp -m tcp -o eth0 --dport 80 -j ACCEPT# Даём доступ к серверу по http из интернета
iptables -A INPUT -p tcp -m tcp -i eth0 --dport 80 -j ACCEPT# Разрешаем хождение транзитных пакетов
iptables -A FORWARD -i eth0 -s 192.168.2.0/24 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth2 -i eth0 -d 192.168.2.0/24 -j ACCEPT# NAT
iptables -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j SNAT --to-source <мой-внешний-ip>
поправил еще
# Разрешаем хождение транзитных пакетов
iptables -A FORWARD -i eth0 -d 192.168.2.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 192.168.2.0/24 -j ACCEPT
>[оверквотинг удален]
> iptables -A OUTPUT -p tcp -m tcp -o eth0 --dport 80 -j
> ACCEPT
> # Даём доступ к серверу по http из интернета
> iptables -A INPUT -p tcp -m tcp -i eth0 --dport 80 -j
> ACCEPT
> # Разрешаем хождение транзитных пакетов
> iptables -A FORWARD -i eth0 -s 192.168.2.0/24 -o eth0 -j ACCEPT
> iptables -A FORWARD -i eth2 -i eth0 -d 192.168.2.0/24 -j ACCEPT
> # NAT
> iptables -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j SNAT --to-source <мой-внешний-ip>А, просто OUTPUT в ACCEPT нельзя, или ваш сервер кишит руткитами и Вы ему не доверяете?
>[оверквотинг удален]
>> # Даём доступ к серверу по http из интернета
>> iptables -A INPUT -p tcp -m tcp -i eth0 --dport 80 -j
>> ACCEPT
>> # Разрешаем хождение транзитных пакетов
>> iptables -A FORWARD -i eth0 -s 192.168.2.0/24 -o eth0 -j ACCEPT
>> iptables -A FORWARD -i eth2 -i eth0 -d 192.168.2.0/24 -j ACCEPT
>> # NAT
>> iptables -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j SNAT --to-source <мой-внешний-ip>
> А, просто OUTPUT в ACCEPT нельзя, или ваш сервер кишит руткитами и
> Вы ему не доверяете?Да я думал чем больше закрыть тем спокойнее будет, разве нет?
> Хочу настроить iptables, с учетом того что удаленный доступ по ftp/ssh мне
> не нужен, почты тоже нет, хочется все лишнее запретить и нужно
> # Разрешаем доступ к серверу из локальной сети по протоколу ssh
> iptables -A INPUT -p tcp -m tcp -s 192.168.2.0/24 --dport 22 -j
> ACCEPTБез указания привязки ко внутреннему интерфейсу, зайти можно и снаружи, видимо пропустили.
Цепочка FORWARD вцелом как-то не очень...
>> Хочу настроить iptables, с учетом того что удаленный доступ по ftp/ssh мне
>> не нужен, почты тоже нет, хочется все лишнее запретить и нужно
>> # Разрешаем доступ к серверу из локальной сети по протоколу ssh
>> iptables -A INPUT -p tcp -m tcp -s 192.168.2.0/24 --dport 22 -j
>> ACCEPT
> Без указания привязки ко внутреннему интерфейсу, зайти можно и снаружи, видимо пропустили.
> Цепочка FORWARD вцелом как-то не очень...Понял, поправил, а что с FORWARD не так чем она плохая?
> Цепочка FORWARD вцелом как-то не очень...Т.е. "как-то" не очень это как? Я не все что нужно указал? Или в том что есть ошибка?
>> Цепочка FORWARD вцелом как-то не очень...
> Т.е. "как-то" не очень это как? Я не все что нужно указал?
> Или в том что есть ошибка?Возможно не совсем понял что Вам необходимо от шлюза, но если что... :-)
Используйте модуль conntrack для отслеживания соединений, в т.ч. для FORWARD.
Разрешайте инициализацию NEW соединений на внутреннем интерфейсе.
Выглядит примерно так:iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A FORWARD -m state --state NEW -i eth2 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -m state --state NEW -i eth2 -p tcp,udp --dport 53 -j ACCEPTiptables -A INPUT -m state --state NEW -i eth2 -p tcp -s 192.168.2.0/24 --dport 22 -j ACCEPT
Тогда предыдущие правила для FORWARD уже будут не нужны.
Про OUTPUT Вам уже говорили, ставьте в ACCEPT.
>> iptables -A INPUT -p tcp -m tcp -s 192.168.2.0/24 --dport 22 -j ACCEPT
>Без указания привязки ко внутреннему интерфейсу, зайти можно и снаружи, видимо пропустили.Здесь не совсем прав, зайти со внешнего адреса конечно не получится (легко),
т.к. фильтруете по адресам (не заметил), но привязка к интерфесу часто бывает желательна.Пара линков по теме:
http://www.frozentux.net/documents/iptables-tutorial/
http://firehol.sourceforge.net/Удачи!