Обложка канала

Хмельной Девопс

Будничный хаос и мрак при поддержке ИТ систем.

Хмельной Девопс

8 лет назад
Открыть в
У многих очень часто возникают проблемы с настройкой firewall. А все потому что никто и никогда не пытается рисовать упрощенную схемку сети. Я для себя используют примерно такой алгоритм при настройке firewall:

1. Нарисовать схемку со всеми заинтересованными сторонами - локальная сеть, сервера, клиенты и тд и тп
2. Показать на этой схемке движение пакетов/сегментов/whatever
3. Описать словами или символами какие потоки должны быть разрешены, какие запрещены, какие перекинуты.
4. Переписать пункт 3 на языке фаервола (в нашем случае iptables).

Ниже будет приведена очень простая схема с локальной сетью и двумя серверами внутри.

Первый кейс - разрешить клиенту А доступ к firewall по ssh:

1.a Входящий трафик на интерфейсе eth0 от клиента с ip 1.1.1.1 на порт 22 разрешить
1.b iptables -I INPUT -i eth0 -s 1.1.1.1/32 -p tcp -m tcp --dport 22 -j ACCEPT

Второй кейс - нам надо пробрасывать все запросы, идущие к нам на порт 80, на зеленый сервер на порт 80:

2.a Весь входящий трафик на интерфейс eth0 на порт 80 проксировать на зеленый сервер на порт 80
2.b iptables -t nat -I PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination green_ip:80

Третий кейс - нам надо запретить красному серверу выходить в интернет:

3.a Весь входящий трафик на eth1 идующий от красного сервера в интернет запретить
3.b iptables -I INPUT -i eth1 -s red_ip/32 ! -d 172.16.0.0/24 -j DROP

Как вы можете заметить - весь локальный трафик, обращенный к firewall'у от красного сервера будет разрешен, что соответствует условию задачи.

И последний, четвертый кейс - маскировать исходящий адрес от всех клиентов локальной сети:

4.a Во всем трафике от пользователей локальной сети, идущим в интернет, маскировать исходящий адрес
4.b iptables -t nat -I POSTROUTING -o eth0 -s 172.16.0.0/24 -j MASQUERADE

Ну и вишинка на торте - блокируем весь остальной входящий трафик. Вообще есть два подхода к настройке firewall - blacklisting или whitelisting. При первом мы разрешаем все, что не запрещено. При втором наоборот - запрещаем все, что не разрешено. Я придерживаюсь подходе whitelisting и обычно меняю политику входящего (и исходящего) трафика на DROP. Так образом все что не разрешено явно будет запрещено:

iptables -P INPUT DROP

Кстати, про исходящие правила. Тут все точно так же как и с входящими, просто меняется вектор движения трафика. По этому поводу циско рекомендует придерживаться следующий правил:

1. Входящий трафик должен блокироваться как можно ближе к получателю
2. Исходящий трафик должен блокироваться как можно ближе к отправителю