MUJ NOVY FIREWALL

Written in

by

V pondeli sem se pekne vydesil. Byl jsem zrovna u evicky a najednou koukam ze se nedostanu na muj web server. To je divny, povidam si, co se asi deje. No tak jsem pouzil puttyho abych se podival na svuj servrik doma v predsini. Jenze pruser. Po par sekundach to spojeni vytuhlo zkousel jsem to zas a znovu a nakonec jsem vypozoroval, ze se to kousne vzdy u nejakych slozitejsich operaci (vzdycky napriklad kdyz jsem dal ps -AH, ping neco, top, netstat…) no proste uz mi hlavou vyrily silene predstavy o nejakem crackerovi, ktery s potesenim sleduje moje zoufalstvi. Nakonec jsem zkusil nabootovat to nove jadro 2.6, s keterym ale muj firewall skript nefungoval (hlavne to z me neznameho duvodu nedelalo nat) a kdyz ani to nepomohlo, tak jsem ten server pro jistotu vypnul.

Nastesti ve skutecnosti to byl problem podivneho chovani hostap, ktere mi bezelo na routeru na balkone. Prisel jsem na to tak, ze kdyz jsem prisel druhy den rano domu najednou mi napsal Awe, ze u nej najednou muj signal poklesl asi na 5% toho co sem u nej normalne. Zajimave bylo, ze muj wifimon ukazoval normalni silu signalu. Kazdopadne kdyz se to po restartu dalo do kupy usoudil jsem ze na vine je moje skoro rok stara verze hostap (konkretne hostap-cvs-030302-czf-2-j3) coz byla tehdy kdyz sem to rozbihal jedina verze, kde fungovalo spolehlive regulovani vykonu az do tohoto incidentu s ni nebyl problem.

Na to mi Awe poradil si stahnout zrovna cerstvou verzi a aby fungovala regulace vykonu tak v baliku hostap-driver staci do souboru driver/modules/hostap_config.h pridat (on rikal odkomentovat, ale v tehle verzi sem to nenasel ani zakomentovane)

#define RAW_TXPOWER_SETTING

No a kompilace probehla v poradku (konecne tam mam po nejaky dobe i nejnovejsi jadro – sice porad 2.4 radu – ale hlavni je ze v nem nejsou zadne zname zavazne chyby).

Ta zkusenost, ze jsem si chvili myslel, ze by tam nekdo mohl byt, me ale donutil, ze musim predelat svuj firewall tak aby byl co nejvice bezpecny a pritom bezproblemu funkcni. Kdyz jsem nejak splacal ten skript na kterem jsem jel az do ted, tak mi tehdy slo hlavne o to, abych mohl ten na ten internet co nejdrive, takze jsem nakonec zkoncil u politiky, kde default pro INPUT bylo ACCEPT o cemz se ovsem vsude doctete ze je to to nejhorsi co si muzete z hlediska bezpecnosti na firewall dat.

No takze jsem zapatral a objevil jsem tenhle sqely a uz hotovy skript, dokonce i se skriptem ktery zase smazne vsechny pravidla a nastavi vsechno ACCEPT, coz se sqele hodi na ladeni (proste neco upravite ve vasem firewallu, konkretne kdyz vezmete tenhle tak v souboru mpfw a pak pustite:
# ./fw-off;./mpfw
tam kde mate ty soubory ulozene).

Vzal jsem ho jako zaklad a jal jsem se ho prekopavat k obrazu svemu. Tak predne se mi nelibilo to, ze tam povoluje vsechno zevnitr. To muze fungovat, pokud mate doma izolovanou sit, ale to neni muj pripad. Ja potrebuju filtrovat z obou interfacu. Takze radky:
$IPTABLES -A INPUT -i $LAN1_IFACE -d $LAN1_IP -j ACCEPT
$IPTABLES -A INPUT -i $LAN1_IFACE -d $INET_IP -j ACCEPT
sem proste zakomentoval. Nejvetsi problem na ktery jsem narazil byl v tom, ze ja narozdil od autora tohohle skriptu mam bohuzel dynamicky pridelovanou IP adresu. Coz o to, preklad adres se vyresi snadno: proste se misto SNAT pouzije jako cil MASQUERADE. Generuje se tim sice nejaky overhead navic, protoze se pri kazdem prekladu zjistuje znova adresa, nicmene je to dobre pouzit proto, protoze kdyby se vam zmenila IP behem provozu (coz se vam vetsinou u DHCP samozrejme zmeni) tak i kdyz obnovite firewall, tak vam v cashi zustanou neuzavrena spojeni na starou IP a povede to k problemum. Dobre je to vysvetleno v prislusne sekci iptables tutorialu.

Problemy ale nastaly pri spravnem definovani chainu OUTPUT. Pan Petricek tam totiz ma tohle pro povoleni cehokoli co odchazi primo z te gw tohle:
$IPTABLES -A OUTPUT -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -s $LAN1_IP -j ACCEPT
$IPTABLES -A OUTPUT -s $INET_IP -j ACCEPT

Prvni 2 radky nejsou problem, ale pruser je ten posledni, ptotoze tu verejnou IP nebudeme znat. Docela dlouho jsem nad tim badal, ale nenapadl me zpusob jak definovat pravidla ekvivalentni s timhle bez pouziti te verejne IP. Napadlo me treba ze bych vzal source mac, ale problem je, ze to mohu pouzit jen v chainu INPUT.

V jiz zminenem tutorialu ma skript urceny primo pro DHCP usery, ale problem je ze kdyz to posledni pravidlo zamenite za tohle:
$IPTABLES -A OUTPUT -o $INET_IFACE -j ACCEPT
tak to neresi pripad, kdy zdrojove IP je to dinamicky pridelene a pritom se na to divame z vnitrni site. Napriklad ja kdyz lezu na tenhle svuj blog pres svoji domenu, tak by me to vybloklo 🙁

Nakonec mi nezbylo nez to vyresit jednoduse tak, ze jem default politiku pro OUTPUT dal ACCEPT. Snad jsem si tim neudelal moc velikou douru do sveho serveru.

Jinak pro dobre pochopeni jednotlivych prepinacu utility iptables a s tim i vlastne konstrukce pravidel doporujuji nedavny calanek na rootovi: stavime inet gw.

Tags

Napsat komentář