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