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. Исходящий трафик должен блокироваться как можно ближе к отправителю