URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 7622
[ Назад ]

Исходное сообщение
"Покритикуйте iptables правила?"

Отправлено Otcp , 26-Окт-12 13:30 
Надеюсь меня никуда не оттправят, составил сам как смог 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 правила?"
Отправлено Otcp , 26-Окт-12 14:34 
поправил еще
# Разрешаем хождение транзитных пакетов
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 правила?"
Отправлено vitroom , 26-Окт-12 15:17 
>[оверквотинг удален]
> 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 нельзя, или ваш сервер кишит руткитами и Вы ему не доверяете?


"Покритикуйте iptables правила?"
Отправлено Otcp , 27-Окт-12 02:24 
>[оверквотинг удален]
>> # Даём доступ к серверу по 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 правила?"
Отправлено uptime , 26-Окт-12 16:17 
> Хочу настроить iptables, с учетом того что удаленный доступ по ftp/ssh мне
> не нужен, почты тоже нет, хочется все лишнее запретить и нужно
> # Разрешаем доступ к серверу из локальной сети по протоколу ssh
> iptables -A INPUT -p tcp -m tcp -s 192.168.2.0/24 --dport 22 -j
> ACCEPT

Без указания привязки ко внутреннему интерфейсу, зайти можно и снаружи, видимо пропустили.
Цепочка FORWARD вцелом как-то не очень...


"Покритикуйте iptables правила?"
Отправлено Otcp , 27-Окт-12 02:25 
>> Хочу настроить iptables, с учетом того что удаленный доступ по ftp/ssh мне
>> не нужен, почты тоже нет, хочется все лишнее запретить и нужно
>> # Разрешаем доступ к серверу из локальной сети по протоколу ssh
>> iptables -A INPUT -p tcp -m tcp -s 192.168.2.0/24 --dport 22 -j
>> ACCEPT
> Без указания привязки ко внутреннему интерфейсу, зайти можно и снаружи, видимо пропустили.
> Цепочка FORWARD вцелом как-то не очень...

Понял, поправил, а что с FORWARD не так чем она плохая?


"Покритикуйте iptables правила?"
Отправлено Otcp , 27-Окт-12 02:30 
> Цепочка FORWARD вцелом как-то не очень...

Т.е. "как-то" не очень это как? Я не все что нужно указал? Или в том что есть ошибка?



"Покритикуйте iptables правила?"
Отправлено uptime , 28-Окт-12 20:11 
>> Цепочка 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 ACCEPT

iptables -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 ACCEPT

iptables -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/

Удачи!