Firehol — ultimátní firewall

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
Příspěvek byl publikován v rubrice Firewall, Linux. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

1 komentář u Firehol — ultimátní firewall

  1. Pingback: Domací poštovní server | Heronovo

Komentáře nejsou povoleny.