1. Linux
Netfilter gyorstalpaló
Vessük is bele magunk rögtön a konfigurációba. Aki figyelt órákon az nagyjából tudja a netfilter
felépítését (táblák, láncok, szabályok) és hogy milyen célokra használható, milyen funkciókkal
rendelkezik.
Most nem tudok egy ötpercesben több óra elméletet összefoglalni, egy gyors áttekintés után
megnézzük az egyes konfigurációkat, beállításokat.
Mire használjuk a netfiltert? Iptables-zel konfiguráltunk csomagszűrést, címfordítást internet
rétegben, ezekhez jöttek pár kiegészítő modulok is.
A legfontosabb, hogy a netfilter a Linux kernel része, így nem kellett külön programot telepítenünk
a működéshez, viszont a különböző utasításokat valahol rögzítenünk kellett és indításkor
megoldani, hogy ezek a szabályok érvénybe lépjenek. - Sokan használják az iptables-save és
iptables-restore módszert, aki tudja mit csinál, az természetesen csinálhatja úgy is (csak tudjam,
hogy úgy csinálta). -
Két módszer létezik arra, hogy a létrehozott szabályrendszerünkhöz a parancsfájlunk futtatásra
kerüljön induláskor. Az egyik, hogy az adott interface felcsatolásakor futtatjuk, a másik, hogy a
rc.local (/etc/rc.local) – ez minden futatási szintnél indít - vagy inittab-ben adjuk hozzá futásra pl.
„/bin/sh /root/iptables-start.sh”. Azért arra figyeljünk, hogy futtatási joga legyen a root-nak rajta.
Most először egy példát az interfaces (ifup)-os inicializáláskori futtatásra: nano
/etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
pre-up /root/tuzfal.sh
Láthatjátok, hogy itt a történet csak arról szól, hogy mielőtt felcsatolná az interfacet (persze nem árt
ha auto indul a csatoló mert különben nincs nagyon értelme) fogja és futtatja a pre-up-nál megadott
shell scriptet.
Shell szkriptekről annyit röviden, hogy célszerű az elején beírni a rendszernek, hogy milyen
parancsértelmezőt használjon, mert egyáltalán nem biztos hogy pl. az rc.local-ba elé írtuk a /bin/sh-
t. Ezért szoktuk úgy kezdeni az sh fájlt, hogy „#!/bin/sh” vagy ugyanezt bash-el ha szükség van rá.
Nézzük a fájl tartalmát. Az első dolog általában az, hogy lenullázzuk a számlálókat (bájt és
csomag), kiürítjük a szabályokat és kitöröljük a láncokat. Ehhez ennyit kell beírni:
iptables -Z
iptables -F
iptables -X
Ezután jöhet az érdemi része a dolognak. Meg kell adni az alapértelmezett szabályokat, policyket az
egyes láncokhoz. Röviden ezek az INPUT, OUTPUT és FORWARD. Ez utóbbi egyébként alapból
2. nincs is engedélyezve a kernelben, mármint az ip továbbítás (forwarding). Ez elengedhetetlen ugye
a címfordításhoz, így majd ott a kernel konfigban is kell állítani.
Ha nem akarunk bonyolult konfigurációt akkor megtehetjük, hogy csak a tűzfalas host gépet védjük
és az átmenő forgalomhoz, illetve a kifelé menő kommunikációt nem korlátozzuk.
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
Ez a konfiguráció nem „whitelisting” módszer, tehát nem az van hogy minden tiltunk és majd ami
szerintünk elengedhetetlenül szükség azt majd engedélyezzük, így nem is biztonságos annyira.
Természetesen az igazi az ha alapból mindent „DROP”-ra állítunk.
Nézzünk egy csomagszűrési – filter táblán fogunk dolgozni – szabályt, amely használja a multiport
modult. A multiport nélkül is lehet dolgozni, de akkor csak porttartományt vagy egyetlen portot
lehet szabályonként konfigurálni.
iptables -A INPUT -i eth0-p tcp -m multiport --dports 80,443 -m state --state NEW,ESTABLISHED
-j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Az első szabály arról szól, hogy az elsődleges csatolót megjelöljük mint bejövő csatoló az INPUT
lánchoz és ahol a célport 80 vagy 443 TCP-n azokat elfogadjuk, feltéve hogy ezek új vagy kiépült
kapcsolatok. Ha nem használnánk az -m multiportot -ot akkor nem dports lenne hanem dport és
csak annyit adnánk meg hogy –dport 80. A state modul plusz biztonságot ad, de nem kötelező
használni.
A második és harmadik szabály a loopback eszközünkre vonatkozik. A helyi folyamatok gyakran
egymás közötti kommunikációnál, már ha az TCP/IP-n megy akkor azt ezen a belső csatolón
végzik, emiatt itt célszerű minden forgalmat engedélyezni, nagy baj nem történhet így.
A legegyszerűbb cone NATolás amit néztünk az a dinamikus forrás címfordítás volt, más néven
MASQ/masquerade vagyis címálcázás. Ehhez a következő konfigurációt kell használni:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
A címálcázásról lehet még olvasgatni akit érdekel itt:
http://www.ibiblio.org/pub/linux/docs/howto/other-formats/html_single/Masquerading-Simple-
HOWTO.html.
Na most mondtam, hogy alapból a Linuxban a forwarding nincs engedélyezve. Azt szokták páran
csinálni hogy a shell script végére még annyit beírnak hogy „echo 1 >
/proc/sys/net/ipv4/ip_forward” és akkor a script indulásakor átállítja a helyi folyamat
nyilvántartásban hálózati csomagtovábbításhoz, hogy az engedélyezve legyen.
echo 1 > /proc/sys/net/ipv4/ip_forward
Ennél egy picit szebb ha a „sysctl.conf”-ban átírjátok az ipv4 forwardingot 0-ról 1-re, mert akkor ez
állandó kernel konfig lesz. A dőlt betűs részek lényegében maga az iptables-start.sh tartalma, csak
felejtsétek az elejéről a „#!/bin/sh” -t. Beni