Shorewall - Инструмент конфигурирования шлюза/фаервола
Shorewall - это инструмент конфигурирования шлюза/фаервола для GNU/Linux. Обычно применяется в качестве скриптовой обертки для iptables, выполненная в виде сервиса.
Зоны
Правила хождения пакетов в Shorewall используют абстракцию зон — все сети, которые вы хотите обрабатывать, надо как-то обозвать. Для начала следует определиться с названиями зон. В моем случае их будет 4: необходимая зона, содержащая сам файрволл, домашняя сетка с DHCP, провайдерская локалка и интернет через PPPoE. Не забудьте скопировать заготовку из вашего пакета! Конфиг получился примерно такой:
# nano /etc/shorewall/zones
# ZONE TYPE OPTIONS IN OUT # OPTIONS OPTIONS fw firewall bots ipv4 net ipv4 mysql ipv4
Интерфейсы и хосты
Когда вы определились с тем, какие у вас будут зоны, нужно сказать, как поделить между зонами сетевые интерфейсы (l2) и IP-сети (l3). В файле interfaces надо перечислить все обрабатываемые интерфейсы. Делается это в формате «В этой зоне будет этот интерфейс целиком», поэтому при делении интерфейса на несколько зон вместо зоны надо указать прочерк. Мой простейший вариант:
# nano /etc/shorewall/interfaces
#ZONE INTERFACE BROADCAST OPTIONS net eth0 detect tcpflags,logmartians,nosmurfs
Политики
Когда вы разделили окружающий мир на зоны, обязательно надо сказать, кому что можно делать по умолчанию. Называется это дело политиками, лежит в файле policy, необходимо определить политики для всех возможных направлений пробегания трафика. Лучше всего в конец дописать дефолтную политику, а чуть выше — исключения:
# nano /etc/shorewall/policy
# SOURCE DEST POLICY LOG LEVEL LIMIT:BURST $FW net ACCEPT net all DROP err # The FOLLOWING POLICY MUST BE LAST all all REJECT err
Hosts
# nano /etc/shorewall/hosts
#ZONE HOST(S) OPTIONS mysql eth0:1.210.189.99 # db1.host.ru bots eth0:1.210.181.30 # backup.host.ru bots eth0:1.210.189.99 # db1.host.ru bots eth0:1.210.189.100 # ws1.host.ru bots eth0:1.210.139.154 # sphinx.host.ru bots eth0:1.210.143.80 # ws2.host.ru
Правила
# nano /etc/shorewall/rules
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK # PORT PORT(S) DEST LIMIT GROUP ACCEPT net $FW icmp ACCEPT $FW net icmp ACCEPT net $FW tcp 80 #ACCEPT net $FW tcp 8080 SSH/ACCEPT net $FW tcp 22 # ftp for 1c client ACCEPT net $FW tcp 40322 ACCEPT net $FW tcp 41000:42000 # all servers from hosts ACCEPT bots $FW ACCEPT $FW bots # MySql DNAT $FW mysql:62.210.189.99 tcp 3306 DNAT net mysql:62.210.189.99 tcp 3306 DNAT $FW $FW:62.210.189.100 tcp 25 - 46.222.222.222 # SMTP ACCEPT net $FW tcp 9999
Правила содержат действия, макросы их настройки. Все макросы находятся в папке /usr/share/shorewall и обозначаются как macro.[ACTION]. Пример: /usr/share/shorewall/macro.SSH, /usr/share/shorewall/macro.AMQP, /usr/share/shorewall/macro.SMTP
Port-forwarding
Если надо пробросить порт на внешнюю сеть, необходимо использовать DNAT, вместо ACCEPT. Для работы этого механизма надо обязательно включить в ядре поддержку перенаправления пакетов.
nano /etc/sysctl.conf.
net.ipv4.ip_forward = 1
И затем перегпузить настройки ядра командой:
linux
$ sudo sysctl -p /etc/sysctl.conf
Bsd
$ sudo sysctl /etc/sysctl.conf reload
Read more: http://plutonit.ru/view_post.php?id=87#ixzz46AKYNB8P
# nano /etc/shorewall/rules
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK # PORT PORT(S) DEST LIMIT GROUP DNAT all mork:navoff:31840 udp 31840 DNAT net mork:navoff:7777 udp 7777 DNAT net mork:navoff:7777 tcp 7777
Firewall
# nano /etc/shorewall/rules
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK # PORT PORT(S) DEST LIMIT GROUP ACCEPT net $FW icmp ACCEPT $FW net icmp ACCEPT net $FW tcp 22 ACCEPT bots $FW ACCEPT $FW bots
Разрешаем подключение по ssh и разрешаем все подключения из /etc/shorewall/hosts
shorewall.conf
# nano /etc/shorewall/shorewall.conf
STARTUP_ENABLED=Yes — пусть запускается VERBOSITY=1 — многословность в консоли SHOREWALL_COMPILER=perl — чтобы не перепуталось, если что *_LOG_LEVEL — когда все заработаеткак надо, поставьте в none, чтобы не засоряло dmesg LOG_MARTIANS — так же IP_FORWARDING=On — для маскарадинга очень нужно. Можно, кончно, и в sysctl.conf это делать, но тут уместнее CLAMPMSS=Yes — лучше включить, если у аплинка MTU меньше, чем у какой-нибудь из машин в домашней сетке. No здесь может привести к крайне неприятному багу с неработающей википедией на части компов. ADMINISABSENTMINDED=Yes — не мните себя б-гом, оставьте так