Powniene╢ przeczytaµ Firewall-HOWTO.
Dowiesz siΩ stamt▒d sk▒d wzi▒µ ipfwadm je╢li jeszcze go nie masz. S▒ jeszcze inne narzΩdzia, kt≤re mo┐esz ╢ci▒gn▒c, ale ja nie zrobi│em nic dalej bez ipfwadm. Jest on do╢µ przyjazny i niskopoziomowy ! Widzisz dok│adnie co siΩ dzieje.
Wkompilowa│e╢ IP-forwarding i -masquerading w j▒dro, wiΩc mo┐esz sprawdziµ czy firewall jest w swoim domy╢lnym (akceptuj▒cym) stanie poleceniami:
ipfwadm -I -l ipfwadm -O -l ipfwadm -F -l
I tak odpowiednio wy╢wietlane s▒ zasady dotycz▒ce wchodz▒cych, wychodz▒cych i przekazywnaych (masquerading) pakiet≤w. -l oznacza "list".
Mo┐liwe, ┐e wkompilowa│e╢ tak┐e zliczanie (accounting):
ipfwadm -A -l
Powiniene╢ zobaczyµ, ┐e nie ma zdefiniowanych ┐adnych zasad i ┐e domy╢lnym stanem jest akceptacja wszystkich pakiet≤w. Mo┐esz wr≤ciµ do tego stanu w ka┐dej chwili pisz▒c:
ipfwadm -I -f ipfwadm -O -f ipfwadm -F -f
-f oznacza "flush". Mo┐liwe, ┐e musisz tego u┐yµ.
ChcΩ po prostu odci▒c resztΩ ╢wiata od swojej sieci wewnΩtrznej i
nic wiΩcej, tak wiΩc ostatni▒ (domy╢ln▒) zasad▒ bΩdzie ignorowanie
wszelkich pakiet≤w pochodz▒cych z wnΩtrza sieci i zaadresownych na
zewn▒trz. Umie╢ci│em wszystkie te zasady (w takiej kolejno╢ci) w
/etc/rc.d/rc.firewall
i wykonujΩ ten skrypt z
rc.local
podczas startu.
ipfwadm -I -a reject -S 192.168.2.0/255.255.255.128 -D 0.0.0.0/0.0.0.0
-S oznacza ╝r≤d│owy (source) adres/maskΩ. -D to adres/maska przeznaczenia (destination).
Ten format dla ipfwadm-a jest trochΩ d│ugi. Program ten jest inteligentny je╢li chodzi o nazwy sieciowe i niekt≤re popularne skr≤ty. Zajrzyj do podrΩcznika systemowego.
Przypuszczalnie bardziej wygodnie jest okre╢laµ niekt≤re lub wszystkie zasady dla wychodz▒cej po│owy firewall-a u┐ywaj▒c opcji -O zamiast -I, ale ja okre╢lΩ je dla czΩ╢ci wchodz▒cej.
Przed zasadami domy╢lnymi muszΩ umie╢ciµ kilka zasad, kt≤re s│u┐▒ jako wyj▒tek od og≤lnego zabronienia dostΩpu do serwis≤w zewnΩtrznych dla klient≤w wewnΩtrznych.
ChcΩ traktowaµ adres firewall-a w sieci wewnΩtrznej specjalnie. ZabroniΩ logowania siΩ na tΩ maszynΩ o ile kto╢ nie ma specjalnego pozwolenia, ale jak ju┐ siΩ tam zaloguj▒, to powinni mieµ mo┐liwo╢µ kontaktu ze ╢wiatem.
ipfwadm -I -i accept -S 192.168.2.100/255.255.255.255 \ -D 0.0.0.0/0.0.0.0
ChcΩ tak┐e, aby klienci wewn▒trz sieci mogli siΩ komunikowaµ z firewall-em. Mo┐e mog▒ go zmusiµ, aby wypu╢ci│ ich na zewn▒trz !
ipfwadm -I -i accept -S 192.168.2.0/255.255.255.128 \ -D 192.168.2.100/255.255.255.255
W tym momencie sprawd╝ czy mo┐esz siΩ dostaµ do klient≤w wewn▒trz sieci z zewn▒trz poprzez telnet i nie mo┐esz siΩ wydostaµ. Oznacza to, ┐e mo┐esz siΩ kontaktowaµ, ale klienci nie mog▒ ci odpowiedzieµ. Powiniene╢ m≤c siΩ dostaµ wszystkimi drogami je╢li uzywasz firewall-a jako maszyny przej╢ciowej. Spr≤buj tak┐e rlogin i ping z uruchomionym tcpdump na jednej z kart. Powiniene╢ umieµ odpowiednio wykorzystaµ to co robisz.
W nastΩpnym kroku polu╝ni│em trochΩ zasady protok≤│ po protokole. ChcΩ, na przyk│ad, wpuszczaµ ping-i, ┐eby dostaµ odpowied╝.
ipfwadm -I -i accept -P icmp -S 192.168.2.0/255.255.255.128 \ -D 0.0.0.0/0.0.0.0
-P icmp to magiczne zaklΩcie dla konkretnego protoko│u.
Dop≤ki trzymam ftp-proxy pozwalam tak┐e na odwo│ania ftp na
zewn▒trz przez konkretne porty. Te docelowe porty na odleg│ej
maszynie to: 20, 21, 115
ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \ -D 0.0.0.0/0.0.0.0 20 21 115
Bez dzia│aj▒cego serwera nazw nie m≤g│bym mieµ dzia│aj▒cego
sendmail-a. Zamiast ustawiµ serwer nazw na firewall-u, pozwoli│em
mu przepuszczaµ zapytania skierowane do najbli┐szego serwera nazw i
umie╢ci│em jego adres w plikach /etc/resolv.conf
u
klient≤w - nameserver 123.456.789.31 - w osobnej linijce.
ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \ -D 123.456.789.31/255.255.255.255 54
To, kt≤rego portu u┐ywa dany serwis mo┐esz dowiedzieµ siΩ z programu tcpdump. Po prostu uruchom dany serwis przez ftp, albo telnet na danym kliencie i szukaj go na portach wej╢ciowych albo wyj╢ciowych na danym kliencie:
tcpdump -i eth1 -e host client04
Plik /etc/services
jest drugim wa┐nym ╝r≤d│em.
Aby pozwoliµ na dostΩp poprzez telnet do firewall-a z zewn▒trz, musisz pozwoliµ klientom na wo│anie na konkretnym porcie. Rozumiem dlaczego jest to potrzebne dla ftp - z powodu serwera, kt≤ry ustawia strumie± danych na ko±cu - ale nie jestem pewien dlaczego telnet tak┐e tego potrzebuje.
ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 ftp telnet \ -D 0.0.0.0/0.0.0.0
S▒ problemy z pewnymi demonami, kt≤re sprawdzaj▒ nazwΩ firewall-a, ┐eby zdecydowaµ jaki jest ich adres sieciowy. rpc.yppasswdd to jeden, z kt≤rym mia│em problemy. Nalega│ na rozsy│anie informacji, ┐e jest on poza firewall-em (na drugiej karcie). To znaczy, ┐e klient wewn▒trz nie mo┐e siΩ z nim porozumieµ.
Zamiast uruchamiania IP-aliasing-u, albo zmiany kodu demona,
odwzorowa│em nazwΩ dla karty wewnΩtrznej u klient≤w w ich plikach
/etc/hosts
.
Teraz chcesz sprawdziµ czy wci▒┐ mo┐esz po│aczyµ siΩ telnet-em, rlogin-em lub ping-owaµ z zewn▒trz. Z wewn▒trz powiniene╢ m≤c ping-owaµ na zewn▒trz. Powiniene╢ m≤c tak┐e po│aczyµ siΩ telnet-em z firewall-em z wewn▒trz a p≤╝niej m≤c robiµ wszystko.
To tyle. W tym momencie mo┐esz siΩ pouczyµ o rpc/Yellow Pages i interakcji z plikiem hase│. Sieµ chroniona firewall-em powinna dzia│aµ tak, aby nie pozwalaµ nieuprzywilejowanym u┐ytkownikom na logowanie siΩ na firewall-u i przez to na wychodzenie na zewn▒trz.. A to ju┐ historia na inne HOWTO.