Portál AbcLinuxu, 30. dubna 2025 10:38

Firehol

7.7.2007 17:39 | Přečteno: 3928× | Výběrový blog

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
       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

7.7.2007 18:16 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Firehol
Odpovědět | Sbalit | Link | Blokovat | Admin
Hmmm, nabouchat rovnou pravidla pro iptables mi přijde stejně složité jako učit se firehol...
-- Nezdar není hanbou, hanbou je strach z pokusu.
cezz avatar 7.7.2007 18:48 cezz | skóre: 24 | blog: dm6
Rozbalit Rozbalit vše Re: Firehol
Zalezi ako rychlo vies pisat ;) Firehol s jednoduchym konfigurakom zgeneruje pomerne dlhy a dost kvalitny iptables skript.. Navyse ta jednoduchost.. Dobre ak viac ludi spravuje ten isty stroj, neni potom problem vyznat sa v cudzich pravidlach..

Ale to len tak IMHO.. ;-)
Computers are not intelligent. They only think they are.
7.7.2007 19:14 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Firehol
Víc adminů se může starat i o pravidla v iptables :-) stačí je jen správně a přehledně zapisovat...
-- Nezdar není hanbou, hanbou je strach z pokusu.
cezz avatar 8.7.2007 12:11 cezz | skóre: 24 | blog: dm6
Rozbalit Rozbalit vše Re: Firehol

stačí je jen správně a přehledně zapisovat...
a presne toto ma ulahcit firehol.. ;-)

Computers are not intelligent. They only think they are.
Heron avatar 7.7.2007 19:37 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Firehol
V podstatě platí, to co již napsal cezz. Dřív jsem si psal iptables pravidla také sám, ale po přečtení výstupu z fireholu, především pak to, co generuje ten příkaz "protection strong", jsem to vzdal. Firehol toho umí hodně a v konfiguráku je to velmi přehledné. Psát několik desítek chainů ručně je náročnější a náchylnější na chyby.

Jako článek to klidně vyjít může, bude-li zájem.
7.7.2007 22:06 anicka | blog: ze_zivota
Rozbalit Rozbalit vše Re: Firehol
Firehol toho umí hodně a v konfiguráku je to velmi přehledné. Psát několik desítek chainů ručně je náročnější a náchylnější na chyby.

Bohuzel mam taky praktickou zkusenost s pouzivanim fireholu: Zatimco kdybych psala seznam pravidel pro jisty firewall rucne, byly by jich radove desitky, firehol navzdory krase sveho konfiguraku vyrobil tech pravidel neco pres tisic - muzu verit tomu, ze jsou v poradku? :( Neni lepsi napsat tech nekolik desitek pravidel rucne a poradne je zkontrolovat?

Mimochodem, kdyz jsem ho potkala naposledy, byl bez silenych hacku pro distrbicu nasledujici FHS takrka neubalitelny (a to, jak, byl IMHO dalsi duvod odrazujici od pouzivani - muzu jeho autorum verit, ze funguje dobre, kdyz vypada tak, jak vypadal?) - je to uz dneska lepsi?
^D
Heron avatar 8.7.2007 09:12 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Firehol
Pravidel je hodně a je to dáno tím, že pro každý řádek server, client nebo route a nějaké další FH vytváří vlastní chainy.

Co se týče vytváření balíku, tak s tím zkušenosti nemám.
8.7.2007 13:21 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Firehol
Jen doufám, že to taky automaticky nezapíná RP filtr, to je šílený zlozvyk…
Heron avatar 8.7.2007 17:22 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Firehol
Ne nezapíná. Jen forward pro routování.
8.7.2007 13:23 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Firehol
Jako článek to klidně vyjít může, bude-li zájem.
Já myslím, že zájem by byl :-)
When your hammer is C++, everything begins to look like a thumb.
7.7.2007 19:14 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Firehol
Odpovědět | Sbalit | Link | Blokovat | Admin
Nechceš to vydat jako klasický článek?
-- Nezdar není hanbou, hanbou je strach z pokusu.
Josef Kufner avatar 7.7.2007 21:45 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Firehol
Odpovědět | Sbalit | Link | Blokovat | Admin
Ad známé služby: Nebere to náhodou z /etc/services?
Hello world ! Segmentation fault (core dumped)
Heron avatar 8.7.2007 09:15 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Firehol
Nebere. Jsou definovány přímo ve skriptu firehol.
8.7.2007 02:43 Ivanhoej | skóre: 26 | blog: ss2_Debian | Bratislava
Rozbalit Rozbalit vše Re: Firehol
Odpovědět | Sbalit | Link | Blokovat | Admin
Tie komentare sa az nezdravo opakuju.
8.7.2007 03:24 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: Firehol
Musíš počkat, než LtCmdr. Literák stihne zasunout nádobu s antihmotou do javoprostorového okna a uzavře tak tuhle anomálii. ;-)
8.7.2007 03:49 thingie
Rozbalit Rozbalit vše Re: Firehol
Nebo než to někdo prostě spraví.
8.7.2007 03:55 MyDahoo_ | blog: Great_Ideas
Rozbalit Rozbalit vše Re: Firehol
Ne, to jen vidíte vícekrát, než je třeba... :)
Tak ale okamžitě dolů!
8.7.2007 04:09 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: Firehol
Viděl jsi tu epizodu? ;-)
8.7.2007 04:21 MyDahoo_ | blog: Great_Ideas
Rozbalit Rozbalit vše Re: Firehol
Co? Kde? Kdy? Jak? :) Nic nevím, nejsem za to zodpovědný... :)
Tak ale okamžitě dolů!
15.3.2009 12:55 verca
Rozbalit Rozbalit vše Re: Firehol
Odpovědět | Sbalit | Link | Blokovat | Admin

To je vsechno potreba pro linux?
Linux je prece bez viru, ne? https://www.abclinuxu.cz/software/bezpecnost/antiviry

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.