2. MIT NEVEZÜNK TŰZFALNAK
• Egy hardware vagy szoftver komponens amely hálózati kommunikációt korlátoz végponton és
hálózati végpontok között.
• Egy mechanizmus, amely kikényszerít hálózat biztonsági szabályokat, szabványokat.
• Egy ellenőrzési pont, amelyen a hálózati csomagoknak keresztül kell mennie, amelynek
funkciói az alábbiak lehetnek:
• Integritás: a csomagok integritásának ellenőrzése, belső rendszerek integritásának megőrzése, védelme
• Elérhetőség: rendelkezésre állás biztosítási a rendszer biztonságának megőrzésével, hálózati anomáliák
kiküszöbölése
• Adatvédelem: hálózati és végponti adatszivárgás kiküszöbölése, szabványoknak való megfeleltetés
5/3/2015RAKOVICS BENEDEK 2
3. MI A NETFILTER
Útválasztó
Helyi UNIX socketek
1
Bejövő Kimenő
2
4
5
Callback (visszahívás) függvények egy sorozata a
hálózati stackben egy kernel (rendszermag)
megtestülésében
• 2.3 verziószám feletti Linux kerneltől egy API-n
keresztül dolgozhatunk vele, a segédprogramot
iptables néven ismerhetitek, előtte ipchains-nek vagy
ipfwadm-nek hívták
• Minden egyes protokoll rendelkezik saját callback
függvénycsomaggal, mely minden hozzá tartozó
csomagnál regisztrálásra kerül
• Egy Linux tűzfal a kernel modulból és hozzá tartozó
segédprogramokból áll (ip_tables, ip_conntrack,
nf_conntrack)
5/3/2015RAKOVICS BENEDEK 3
4. MIRE HASZNÁLHATÓ A NETFILTER
• Stateful (állapotvizsgálat)* és stateless (állapotvizsgálat nélküli) hálózati csomagszűrésre,
szabályrendszerek létrehozására
• Címfordítások (SNAT) és címálcázás (MASQ) használatára a belső címek átfordítására a publikus
hálózat eléréshez, megosztásához
• Transzparens (átlátható) proxyk (megbízott továbbító) implementálására, ahol az ügyfél gép nem
észleli hogyan és hol kerül kiszolgálásra a kérése (DNAT).
• Átfogó tc (hálózati forgalom vezérlés/formálás) és iproute(2) QoS forgalomvezérlés
bevezetéséhez
* Példa a csomag állapotvizsgálatra, hogy amikor az ügyféltől megjön a (SYN-) ACK válasz akkor
átbillenti a státuszt ESTABLISHED-re (kiépült kapcsolatra).
5/3/2015RAKOVICS BENEDEK 4
5. HOGYAN HASZNÁLHATJUK
• A Linux rendszereken különböző segédprogram lehetnek segítségünkre a netfilter modul közvetett
használatára és kiegészítésére. Ezek közül a legismertebb és előzőekben már említett iptables.
• Iptables lényegében egy program, mely segítségével konfigurálhatjuk a belső netfilter rendszermag
arhiktektúrát. Lehetőséget ad csomagok szűrésére, kapcsolatok követésére, hálózati címfordítás és címálcázás
megvalósítására.
• Ezen kívül vannak más tűzfal programok, mint az UFW, SmoothWall, Turtle Firewall és
berendezések is, mint például az Endian vagy a SonicWall, de ezek mind az iptablest használják.
• Jellemzően kihangsúlyozva, hogy milyen különleges biztonságot ad, amellett, hogy az absztrakciós szint alá
nem hatolhatunk le, hogy auditáljuk a rendszert. Erre találták ki az ICSA (International Computer Security
Association) tanusítványt, hogy egy független szervezet ellenőrizze a piacra dobott hálózati megoldásokat.
5/3/2015RAKOVICS BENEDEK 5
6. HOGYAN MŰKÖDIK A NETFILTER
• A hálózati csomagok - tábla típusoktól függően - különböző
láncokra fűződnek fel netfilterben:
• PREROUTING (nf_ip_prerouting)
• Minden bekerülő csomag, amelynek integritása megfelelő. Jellemzően
DNAT kialakításoknál nyúltok bele.
• INPUT (nf_ip_local_in)
• Olyan bejövő csomagok, amelyek helyi folyamatokat érintenek, tehát
helyi socket létesül hozzá
• FORWARD (nf_ip_forward)
• Jellemzően harmadik féltől származó, tehát helyi folyamatot nem
érintő csomagok, melyeket továbbításra kerülnek
• POSTROUTING (nf_ip_post_routing)
• Minden kimenő csomag a netfilterből, jellemzően SNAT és címálcázási
kialakításoknál használjuk ezt a láncot
• OUTPUT (nf_ip_local_out)
• Helyi folyamatoktól eredeztethető (socketelt), távozó hálózati
csomagok, például egy kiszolgálónk válasza
• Visszahívási függvények állapotai avagy visszatérési értékei egyes
csomagoknál, szabályoknál:
• ACCEPT (nf_accept): folytatjuk a csomagra vonatkozóan a lánc
feldolgozását, beengedjük a helyi folyamatokhoz
• DROP (nf_drop): csomag eldobása és láncfűzér megszaktíása,
visszautasításról nem küldünk érestísét, helyi folyamatok nem érinthet
• QUEUE (nf_queue): várakoztatás a felhasználói térben (userspace), ha
nincs fogadó helyi folyamat akkor eldobja a csomagot, nem utasítja
vissza a kapcsolatot
• Vannak olyan státuszok amiket a lánc szabályokon keresztül
közvetlenül nem manipulálhatunk:
• STOLEN (nf_stolen): leáll a lánc feldolgozása
• REPEAT (nf_repeat): feldolgozás újbóli meghívása
5/3/2015RAKOVICS BENEDEK 6
7. CSOMAGSTÁTUSZOK
• A conntrack (kapcsolatkövető) rendszer szerves része a stateful (állapotkövető) netfilter működésének. Az
egyes csomagok különböző státuszban, különböző okból kerülhetnek be és ki a rendszerünkből. Ezek a
következők lehetnek:
• ESTABLISHED (ip_ct_established)
• A csomag egy már létrejött kapcsolathoz tartozik, az eredeti irányban (input, output vagy esetleg forward)
• RELATED (ip_ct_related)
• A csomag kapcsoltban van egy meglévő connection-nel (létrejött hálózati kapcsolattal) és az eredeti irányban halad
• NEW (ip_ct_new)
• A csomag egy új kapcsolatot próbál kialakítani az eredeti irányban és nem tartozik valamely meglévő kiépült kapcsolathoz
• REPLY (ip_ct_is_reply)
• Ez egy kevert állapot related és established csomagok esetén, ez az ellenkező irányban haladó csomagokra vonatkozik, tehát a
válasza lesz a fent említett csomagtípusnak
5/3/2015RAKOVICS BENEDEK 7
8. TÁBLÁK
• A szabályokat a feldolgozás jellegétől függően különböző táblákba csoportosítjuk, ezek
meghatározzák az érintett beépített láncokat is.
• FILTER: csomagszűrésre használjuk, ez az alapértelmezett tábla, nem kell hivatkoznunk rá az iptables
használata során
• Elérhető láncok: INPUT (local_in), OUTPUT (local_out), FORWARD
• NAT: ez a címfordítási tábla, erre különálló opcióval hivatkoznunk kell, ez kezeli mind a forrás, mind
pedig a cél címfordításokat és ezen keresztül végezzük a címálcázást is
• Elérhető láncok: OUTPUT, PREROUTING, POSTROUTING
• MANGLE: ez az úgynevezett csomagváltoztató tábla, ez csomagok tartalmának módosítására szolgáló
tábla, ez még az útvonal választás előtt megtörténik
• Elérhető láncok: OUTPUT (utána lép POSTROUTING-ba), PREROUTING (elsődleges belépési pont)
5/3/2015RAKOVICS BENEDEK 8
9. LÁNC ÁLLAPOTKÖVETÉSRE
• A legelterjedtebb Layer 4 (L4) hálózati rétegben tűzfal típus jelenleg, amely
ellenőrzi a kapcsolatok státuszát és eldobja a szabálytalan csomagokat.
Nézzünk egy pratikus példát szimplán az integritásnak való megfelelésre:
• Iptables –A szabálytalan_csomagok_lánca –p tcp –tcp-flags ACK SYN, ACK –m state –
state NEW –j REJECT –reject-with tcp-reset
• Ebben az esetben azokat a csomagokat kapjuk el, ahol a csomag önmagát kiépülő
kapcsolatnak akarja feltűntetni, ugyanakkor mi a nyilvántartott kapcsolatok alapján tudjuk,
hogy a státusza új. A végén úgy döntünk, hogy nem eldobjuk, hanem visszautasítjuk a
csomagot és küldőnek a TCP RST választ küldünk.
5/3/2015RAKOVICS BENEDEK 9
10. SZABÁLYOK LÉTREHOZÁSA
• Most, hogy megnéztünk egy gyakorlati példát, nézzük meg hogyan tudunk mi magunk
szabályokat alkotni az egyes integrált táblák beépített láncain.
• Az iptables-ben az egyes szabályoknál meg kell határozni a lánchoz kapcsolódó viszonyát
először (már a táblahivatkozás előtt, melyre –t opcióval hivatkozunk):
• -I a szabály hozzáadása egy megadott helyben a lánchoz, konvenció, hogy az első szabályt gyakran ezzel az
opcióval adják meg
• -A a szabály hozzáfűzése a megadott lánchoz az utolsó helyre
• -L minden szabály listázása az adott láncra vonatkozóan
• -F minden szabály ürítése, de csak a megadott láncból, fontos, hogy ezt táblánként kezeljük
• -N új egyedi lánc létrehozása, nem egyezhet beépített lánc nevével, csak kiterjesztésre alkalmas
• -X egyedi lánc törlése a rendszerből, jellemzően a –F opcióval együtt használják
5/3/2015RAKOVICS BENEDEK 10
11. EGYEZÉSEK ÉS CÉLOK
• Vannak úgynevezett egyezések, melyek közül egy része moduláris, tehát csak bizonyos kiegészítők aktiválása után tudunk
használni, ezek határozzák meg a szabályunk érvényesülését.
• -p protokoll: megadja, hogy mely protokoll az amit fel akarunk fűzni a láncunkra, ezek lehetnek tcp, udp, icmp stb.
• -s vagy –d: a forrás vagy cél IP címet adja meg, amivel egyeztetni akarunk
• --sport és –dport: ezek a tcp és udp protokolloknál az egyes kapuszámokra vonatkozó egyezéseket ellenőrzi, fontos, hogy itt csak egy
szám adható meg, több szám esetén a multiports modult kell használni
• A kiegészítő modulokat, egyeztetőket külön jelölni kell –m opcióval, ezután adhatjuk meg csak a további opciókat,
argumentumokat. Ezekre nézünk két példát.
• -m limit –limit 30/hour –p icmp –j DROP
• -m state –state NEW, ESTABLISHED –j ACCEPT
• Célokat a korábbi visszahívási függvény állapotoknál már taglaltuk (ACCEPT, DROP, REJECT), ezeket kiegészítjük még a
LOG (naplózás, majd a lánc további feldolgozása) valamint a RETURN (visszatérés a hivatkozó láncra) célértékekkel
5/3/2015RAKOVICS BENEDEK 11