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
mongo 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
lan eth0

Подробнее: 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
mysql eth0:1.210.143.80 # ws2.host.ru
mongo eth0:1.210.189.99 # db1.host.ru
mongo eth0:1.210.143.80 # ws2.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
# SMTP
DNAT $FW $FW:62.210.189.100 tcp 25 - 46.222.222.222
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

Разобраться с DNAT на localhost

Подробнее: 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

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
# MySql
ACCEPT mysql $FW tcp 3306
# MongoDB
ACCEPT mongo $FW tcp 27017
ACCEPT bots $FW
ACCEPT $FW bots

При условии что mysql настроен на вешний IP адресс bind-address = 0.0.0.0

Разрешаем подключение по 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 — не мните себя б-гом, оставьте так

Пример:

STARTUP_ENABLED=Yes
VERBOSITY=1
SHOREWALL_COMPILER=perl
*_LOG_LEVEL=none
LOG_MARTIANS=none
IP_FORWARDING=On
CLAMPMSS=Yes
ADMINISABSENTMINDED=Yes

Макросы

ls /usr/share/shorewall/

action.A_Drop action.SetEvent macro.A_DropDNSrep macro.DropUPnP macro.IPP macro.MongoDB macro.Puppet macro.SNMP macro.Webcache
action.allowInvalid actions.std macro.A_DropUPnP macro.Edonkey macro.IPPbrd macro.MSNP macro.Razor macro.SNMPTrap macro.Webmin
action.A_Reject action.TCPFlags macro.AllowICMPs macro.Finger macro.IPPserver macro.MSSQL macro.Rdate macro.SPAMD macro.Whois
action.AutoBL action.template macro.Amanda macro.FTP macro.IPsec macro.Munin macro.RDP macro.Squid macro.Xymon
action.AutoBLL action.Untracked macro.AMQP macro.Git macro.IPsecah macro.MySQL macro.Redis macro.SSH modules
action.Broadcast compiler.pl macro.Auth macro.GNUnet macro.IPsecnat macro.NNTP macro.Reject macro.Submission modules.essential
action.DNSAmp configfiles macro.BGP macro.Gnutella macro.IRC macro.NNTPS macro.Rfc1918 macro.SVN modules.extensions
action.Drop configpath macro.BitTorrent macro.Goto-Meeting macro.Jabberd macro.NTP macro.RIPbi macro.Syslog modules.ipset
action.dropInvalid coreversion macro.BitTorrent32 macro.GRE macro.JabberPlain macro.NTPbi macro.RNDC macro.Telnet modules.tc
action.DropSmurfs functions macro.BLACKLIST macro.HKP macro.JabberSecure macro.NTPbrd macro.Rsync macro.Telnets modules.xtables
action.Established getparams macro.Citrix macro.HTTP macro.JAP macro.OpenVPN macro.SANE macro.template prog.footer
action.IfEvent helpers macro.CVS macro.HTTPS macro.Jetdirect macro.OSPF macro.Sieve macro.Teredo Shorewall
action.Invalid lib.base macro.DAAP macro.ICPV2 macro.Kerberos macro.PCA macro.SIP macro.TFTP shorewallrc
action.New lib.cli macro.DCC macro.ICQ macro.L2TP macro.Ping macro.SixXS macro.Time version
action.NotSyn lib.cli-std macro.DHCPfwd macro.ILO macro.LDAP macro.POP3 macro.SMB macro.Trcrt wait4ifup
action.Reject lib.common macro.Distcc macro.IMAP macro.LDAPS macro.POP3S macro.SMBBI macro.VNC
action.Related lib.core macro.DNS macro.IMAPS macro.Mail macro.PostgreSQL macro.SMBswat macro.VNCL
action.ResetEvent macro.A_AllowICMPs macro.Drop macro.IPIP macro.mDNS macro.PPtP macro.SMTP macro.VRRP
action.RST macro.ActiveDir macro.DropDNSrep macro.IPMI macro.mDNSbi macro.Printer macro.SMTPS macro.Web

Ссылки

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