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

Подробнее: http://www.shorewall.net/manpages/shorewall-zones.html

Интерфейсы и хосты

Когда вы определились с тем, какие у вас будут зоны, нужно сказать, как поделить между зонами сетевые интерфейсы (l2) и IP-сети (l3). В файле interfaces надо перечислить все обрабатываемые интерфейсы. Делается это в формате «В этой зоне будет этот интерфейс целиком», поэтому при делении интерфейса на несколько зон вместо зоны надо указать прочерк. Мой простейший вариант:

# nano /etc/shorewall/interfaces

#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect tcpflags,logmartians,nosmurfs

Подробнее: http://www.shorewall.net/manpages/shorewall-interfaces.html

Политики

Когда вы разделили окружающий мир на зоны, обязательно надо сказать, кому что можно делать по умолчанию. Называется это дело политиками, лежит в файле 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

Подробнее: http://www.shorewall.net/manpages/shorewall-policy.html

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

Подробнее: http://www.shorewall.net/manpages/shorewall-hosts.html

Правила

# 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

Подробнее: http://www.shorewall.net/manpages/shorewall-rules.html

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 — не мните себя б-гом, оставьте так

Ссылки

http://www.hub.ru/wiki/Shorewall

https://www.google.com/search?ie=UTF-8&oe=UTF-8&as_sitesearch=www.shorewall.net&q=Russian+Translation&btnG=Site+Search

http://shorewall.net/standalone_ru.html

http://shorewall.net/MultiISP_ru.html

http://www.shorewall.net/Anatomy_ru.html

http://www.shorewall.net/blacklisting_support_ru.html

http://www.shorewall.net/traffic_shaping_ru.html

http://shorewall.net/three-interface_ru.html

http://shorewall.net/two-interface_ru.html

http://www.opennet.ru/base/net/shorewall.txt.html