Firehol je jeden z mnoha skriptů usnadňující vytváření pravidel pro iptables na linuxu. Nutno říci, že je jedním z nejsnadněji použitelným (můj subjektivní názor), což ale neznamená, že by ztrácel na kvalitě. Právě naopak.
Předem upozorňuji, že tento článek si neklade za cíl vysvětlit kompletní možnosti fireholu, ale chce poskytnout dobrý začátek lidem, kteří si chtějí nastavit jednoduchý a bezpečný firewall. Pro kompletní dokumentaci navštivte domácí stránku fireholu.
Instalace
Nejprve je nutné stáhnout rpm
ze stránek projektu. Po instalaci balíčku příkazem
rpm -Uhv firehol*.rpm
jej přidáme mezi služby tak, aby se spouštěl automaticky při startu:
chkconfig --add firehol chkconfig firehol on
Nyní přistoupíme k vlastní konfiguraci. V oblíbeném editoru otevřeme soubor /etc/firehol/firehol.conf
. Soubor začíná verzí konfigurační souboru:
version 5
Konfigurace rozhraní
Dále si definujeme několik sekcí interface
, pro každé síťové rozhraní jednu:
interface eth0 NET policy drop protection strong server ident reject with tcp-reset server http accept server icmp accept server ssh accept src 1.2.3.4 server vnc accept src 1.2.3.4 client all accept
interface
V prvním řádku definujeme síťové rozhraní eth0
a naše pojmenování NET
, které bude použito pro generování iptables řetězců (chains) a v logu (který po odladění fireholu doporučuji vypnout).
policy
Udává výchozí politiku zacházení s packety pro které nejsou definována pravidla server
. Hodnoty mohou být drop
– zahození packetu bez upozornění nebo reject
– zahodí packet a pošle ICMP upozornění klientovi, že tu cesta nevede.
protection strong
Zabezpečení proti všem známým technikám útoků.
server
Několik řádků s definicemi pravidel pro služby. Za slovem server
následuje jméno služby (buď známé nebo ručně definované) služby a její povolení parametrem accept
nebo zakázání parametrem reject
nebo drop
.
Obvykle si vystačíme s jednoduchou definicí:
server http accept
kterou povolujeme připojení z venčí na náš webový server.
Dále je možné pomocí parametru src
definovat IP
, ze kterých povolíme, nebo naopak zakážeme připojení. Např:
server ssh accept src 1.2.3.4
povoluje připojení na šifrovaný terminál pouze pro vybranou IP
client
Definici podobnou službám mohou mít i klienti, kteří se snaží připojit z našeho PC ven. V drtivé většině případů si vystačíme s pouhým:
client all accept
Tím by měla být definice rozhraní hotová. Pokud má náš stroj s více síťovými rozhraními sloužit také jako router, je nutné definovat sekce router
Nastavení sekcí router
Pro každou routovací cestu (tj pro každou kombinaci síťových rozhraní, přes které mohou putovat data k dalším počítačů v sítích) je nutné vytvořit sekci router
:
router LAN2NET inface eth1 outface eth0 route all accept src 192.168.5.3 route all accept src 192.168.5.4 route all accept src 192.168.5.10 route all drop
Za definicí router
následuje pojmenování a definice síťových rozhraní pro vstup a výstup packetů. Opět si ve většině případů vystačíme s
route all accept
ale zde je vhodné vyjmenovat jednotlivé IP, které mají mít přístup (v tomto případě) na Internet. Opět můžeme definovat jednotlivé služby, které dané stroje mohou na Internetu využívat. V předchozím výpisu sekce router je směr ven, který obvykle neomezujeme. Naopak je potřeba si dávat pozor na směr dovnitř:
router NET2LAN inface eth0 outface eth1 route torent accept dst 192.168.5.3 route all drop
kde je velice vhodné vyjmenovat jednotlivé služby, které mohou jít dovnitř. Zde je ukázka nastavení sekce router
pro přesměrování portu pro použití bittorrent klienta na jednom PC uvnitř sítě.
Přesměrování portů a NAT
Po routeru často také požadujeme překlad sítových adres (NAT) a s tím související přesměrování portů na PC v síti za routerem.
NAT celé sítě můžeme definovat v sekci interface
nebo router
(pak se uvažuje outface
rozhraní) příkazem masquerade
, ale osobně doporučuji provádět NAT pro jednotivé PC zvlášť pomocí příkazu snat
:
snat to 1.2.3.4 src 192.168.5.3 snat to 1.2.3.4 src 192.168.5.4 snat to 1.2.3.4 src 192.168.5.10
kde IP 1.2.3.4 je venkovní IP adresa routeru.
Přesměrování portů pak zařídí příkaz nat to-destination
:
nat to-destination 192.168.5.3 proto tcp dport 6881 dst 1.2.3.4
Známé služby
Abecední seznam fireholu známých služeb:
AH, all, amanda, any, anystateless, apcupsd, apcupsdnis, aptproxy, asterisk, cups, custom, cvspserver, darkstat, daytime, dcc, dcpp, dhcp, dhcprelay, dict, distcc, dns, echo, emule, eserver, ESP, finger, ftp, gift, giftui, gkrellmd, GRE, h323, heartbeat, http, https, hylafax, iax, iax2, icmp, ICMP, icp, ident, imap, imaps, irc, isakmp,
jabber, jabberd, ldap, ldaps, lpd, microsoft_ds, mms, ms_ds, msn, multicast, mysql, netbackup, netbios_dgm, netbios_ns, netbios_ssn, nfs, nis, nntp, nntps, ntp, nut, nxserver, oracle, OSPF, p2p, ping, pop3, pop3s, ortmap, postgres, pptp, privoxy, radius, radiusold, radiusoldproxy, radiusproxy, rdp, rndc, rsync, rtp, samba, sip, smtp, smtps, snmp, snmptrap, socks, squid, ssh, stun, submission, sunrpc, swat, syslog, telnet, tftp, time, timestamp, upnp, uucp, vmware, vmwareauth, vmwareweb, vnc, webcache, webmin, whois, xdmcp
Definice vlastních služeb
Na začátku konfiguračního souboru je možné definovat další služby pomocí proměnných server_servicename_ports
a client_servicename_ports
jak ukazuje následující příklad:
server_svn_ports="tcp/3690" client_svn_ports="default" server_torrent_ports="tcp/6881 udp/6881" client_torrent_ports="default"
Parametr default
u klientských portů znamená rozsah 1024-65535, tedy běžný rozsah využitelný aplikacemi bez nutnosti běžet s právy roota, které bychom potřebovali pro použití portů nižších než 1024.
Omezení logování
V původním nastavení firehol zapisuje do logu mnoho informací, které běžně nepotřebujeme. Umravníme jej nastavením proměnné
FIREHOL_LOG_LEVEL="7"
v konfiguračním souboru.
Ukázka konfiguračního souboru
Ukázka malého konfiguračního souboru pro router s web serverem, několika vlastními službami, natem a přesměrováním portů pro bittorrent:
version 5 FIREHOL_LOG_LEVEL="7" server_svn_ports="tcp/3690" client_svn_ports="default" server_torrent_ports="tcp/6881 udp/6881" client_torrent_ports="default" server_vnc_ports="tcp/5902 udp/5902" client_vnc_ports="default" snat to 1.2.3.4 src 192.168.5.3 snat to 1.2.3.4 src 192.168.5.4 snat to 1.2.3.4 src 192.168.5.10 nat to-destination 192.168.5.3 proto tcp dport 6881 dst 1.2.3.4 nat to-destination 192.168.5.3 proto udp dport 6881 dst 1.2.3.4 interface eth0 NET policy drop protection strong server ident reject with tcp-reset server http accept server icmp accept server ssh accept src 4.5.6.7 server vnc accept src 5.6.7.8 server svn accept client all accept interface eth1 LAN policy reject server all accept client all accept router LAN2NET inface eth1 outface eth0 route all accept src 192.168.5.3 route all accept src 192.168.5.4 route all accept src 192.168.5.10 route all drop router NET2LAN inface eth0 outface eth1 route torrent accept dst 192.168.5.3 route all drop
Pingback: Domací poštovní server | Heronovo