Linux IPCHAINS-HOGYAN


Előző | Tartalom | Következő


2. Csomagszűrés alapok

2.1 Mi?

Minden hálózaton keresztül haladó forgalom csomagok formájában valósul meg. Például, ehhez a dokumentációnak a letöltéséhez (ami mondjuk 50 kbyte hosszú), kb. 36 darab 1460 byte hosszú csomagnak kell hozzád megérkeznie (most csak úgy mondtam valamit, a számokat hasra ütésre).

Minden csomag eleje arról árulkodik, hova megy, honnan jött, mi a csomag típusa, valamint egyéb adminisztratív részletek is szerepelnek itt. A csomagnak ezt a részét fejlécnek hívjuk. A csomag többi része, maga a tényleges adat, a csomag teste.

Némely protokollfajta, mint például a TCP is (ami a web, levélforgalomhoz, távoli belépésekhez használatos) a 'kapcsolat' fogalmát használják - mielőtt akármilyen csomag, tényleges adat elküldődne, különböző 'beállító' csomagok (speciális fejlécekkel) cserélnek gazdagépet, mondván például: 'kapcsolódni akarok!', 'OK, gyere bébi', 'kösz', azután a normális csomagok cseréje kezdődik meg (tényleges adatátvitel).

A csomagszűrő olyan program a csomagok fejlécét megvizsgálván eldönti, mi legyen a sorsa az egész csomagnak. Dönthet úgy, hogy a csomagot megtagadva (deny) eldobja (mintha sose érkezett volna meg a csomag), a csomagot elfogadja (accept, a csomag átmegy), vagy pedig elutasítja (reject), ami olyan mint a megtagadás, csak a csomag forrását elmondja, amelyikkel ez történt.

Linux alatt a csomagszűrés bele van építve a kernelbe, és van itt még pár trükkös dolog, amit a csomagokkal kezdhetünk, de az általános elv az, hogy megnézzük a csomag fejlécét, aztán eldöntjük, mi legyen vele.

2.2 Miért?

Irányítás. Biztonság. Éberség.

Irányítás:
Ha arra használod a Linuxodat, hogy csatlakoztasd a belső hálózatodat egy másik hálózathoz (mondjuk, az Internethez), lehetőséged nyílik bizonyos forgalmat engedélyezni, bizonyosakat pedig megtiltani. Például, a csomag fejléce tartalmazza a csomag úti célját, tehát megelőzheted bizonyos csomagok átjutását a külső hálózatra. Egy másik példa: A Netscape-emmel el akarom érni a Dilbert archívumokat, de az oldalon reklámok vannak a doubleclick.net-ről, és a Netscape csak az időmet pazarolja, hogy a hirdetéseket is letöltse. Ha megmondjuk a csomagszűrőnek, hogy ne engedjen csomagokat ki és be a doubleclick.net által birtokolt címekről/re, a probléma megoldódik. (van jobb módszer is, lásd később)

Biztonság:
Ha a Linuxod az egyetlenegy dolog az Internet káosza és a szép, rendes kis belső hálózatod között, jó tudni hogy szabályozhatod mi jöhet be az ajtódon kopogtatva. Például kiengedhetsz bármit a hálózatodról, de aggódva gondolván a jól ismert 'Ping of Death'-re (a halál pingje), szabályozhatod miféléket küldhetnek neked a rosszindulatú kívülállók. Másik példa: mondjuk megtilthatod, hogy kívülről be lehessen a gépedre telnetelni, még akkor is, ha minden usernek jelszava van, talán megfigyelő szeretnél lenni az Interneten (mint a legtöbben), és nem pedig egy szolgáltató gép (akarva vagy máshogyan), egyszerűen senkit nem engedsz bekapcsolódni, elutasítva a csomagszűrővel a kapcsolódás felállítására beérkezett csomagokat.

Éberség:
Néha egy rosszul beállított gép a lokális hálózaton úgy dönt, nekiáll csomagokat hányni a külvilág felé. Jó dolog elmondani a csomagszűrőnek, ha bármi rendellenes történik, azt vegye észre és így talán időben tenni tudnunk ellene, vagy talán csak kíváncsi természetű vagy.

2.3 Hogyan?

A Kernel a csomagszűrővel.

Szükséged van egy olyan kernelre, ami tartalmazza az új IP tűzfal láncokat. Ha nem tudod, megfelelő kernellel rendelkezel-e, nézz utána a /proc/net/ip_fwchains nevű file-nak. Ha megvan, a kerneled jó lesz.

Ha nincs meg, fordítanod kell egy új kernelt, hogy tartalmazhassa a tűzfal láncokat. Először is, tölts le egy új kernel forrást (ha nincs meg a disztribúciód cd-jén) a kedvenc ftp helyedről. Ha 2.1.102-es vagy nagyobb verziószámű kerneled van, nem szükséges patch-elni, egyébként igen. Ennek részleteit megtalálod a KERNEL-HOWTO-ban.

Itt van, milyen konfigurálási opciók szükségesek a fordításnál (2.0-s kernelek)

CONFIG_EXPERIMENTAL=y
CONFIG_FIREWALL=y
CONFIG_IP_FIREWALL=y
CONFIG_IP_FIREWALL_CHAINS=y

2.1 és 2.2-esek esetén:

CONFIG_FIREWALL=y
CONFIG_IP_FIREWALL=y

Az ipchains program a kernellel társalog, és elmondja neki mely csomagokat szűrje. Ez az, ahogy kontrollálod a csomagszűrést.

Ipchains

Az ipchains program szabályokat szúr be és töröl ki a kernel csomagszűrő részébe. Ez azt is jelenti egyben, hogy amit beállítasz, újraindításnál elvész, nézd meg 'szabályok permanens beállítása' részt, hogy a szabályok akkor is visszaálljanak, amikor újraindítod a gépet legközelebb.

Az ipchains az ipfwadm új cseréje, ami a régi tűzfal kódnál volt használatos. Van egypár hasznos szkript az ipchains ftp lelőhelyén: ftp://ftp.rustcorp.com/ipchains/ipchains-scripts-1.1.2.tar.gz

Ez tartalmaz egy shell szkriptet, amit úgy hívnak, hogy ipfwadm-wrapper, amivel úgy végezheted a csomagszűrést, ahogyan eddig is tetted a régi eszközzel. Valószínűleg erre nem is lesz szükséged, ha csak gyorsan nem akarod upgrade-elni a régi ipfwadm-es gépedet. Ebben az esetben nem is kell tovább olvasnod ezt a doksit.

Nézd meg a 'Különbségek az ipchains és az ipfwadm között' című részt a függelékben, valamint az 'ipfadwm wrapper szkript használata'-t, ha további információkra éhezel ezzel kapcsolatban.

A szabályok permanens beállítása

A jelenlegi tűzfal beállításaid a kernelben vannak eltárolva, és ezek újraindításnál elvesznek. Javaslom használd az ipchains-save és az ipchains-restore nevű programokat szabályaid megőrzésére és visszaállítására. Ehhez, állítsd be a szabályokat, majd futtasd ezt (root-ként):

# ipchains-save > /etc/ipchains.rules

Csinálj egy szkriptet, mint például ez:

#! /bin/sh
# Szkript a csomagszures kontrollalasara

# Ha nincs szabaly nem csinal semmit
[ -f /etc/ipchains.rules ] || exit 0

case "$1" in
         start)
             echo -n "Csomagszures bekapcsolasa…:"
             /sbin/ipchains-restore < /etc/ipchains.rules || exit 1
             echo 1 > /proc/sys/net/ipv4/ip_forward
             echo "."
             ;;
         stop)
             echo -n "Csomagszures kikapcsolasa…:"
             echo 0 > /proc/sys/net/ipv4/ip_forward
             /sbin/ipchains -X
             /sbin/ipchains -F
             /sbin/ipchains -P input ACCEPT
             /sbin/ipchains -P output ACCEPT
             /sbin/ipchains -P forward ACCEPT
             echo "."
             ;;
         *)
             echo "Hasznalat: /etc/init.d/packetfilter {start|stop}"
             exit 1
             ;;
     esac
     exit 0

Légy biztos abban, hogy ezt a szkriptet még a boot-folyamat eleje tájékán futtatod. Jómagam (Debian 2.1) csináltam egy szimbolikus linket az /etc/rcS.d könyvtárba, S39packetfilter néven (így ez előbb fog lefutni, mint az S40network. Hogy miért? Hát hogy mire a hálózat felhúzódik, a csomagszűrési szabályok már benn legyenek a kernelben).


Előző | Tartalom | Következő