Upravo sam lepo podesio firewall na kućnom serveru, pa da podelim to sa vama.
Pre nego sto počnem sa tehnikalijama, da ukratko opišem scenario:
Bogu hvala pa je ADSL došao. To znači da imamo mogućnost da nam mašine budu 24/7 online.
Imam 2 mašine:
AMD64 - desktop klijentska mašina na kojoj radim svaki dan. Ima jednu mrežnu kartu eth0.
P3 - server mašina koja stoji u drugoj sobi. Ima 2 mrežne karte eth0 i eth1.
Ideja mi je bila da od P3 napravim zaštitni zid koji će da zabrani gotovo sav dolazni saobraćaj, osim par stvari koje su mi potrebne. Pošto i sa AMD64 treba da izlazim na mrežu, bilo je potrebno na P3 namestiti i NAT.
Na obe mašine se vrti Gentoo Linux. ADSL usluga je kod Sezama i imam ruter koji je podešen da radi kao modem i da uzima adresu preko dhcpa. Ovo je tako jer mi P3 glumi firewall i ruter.
Dakle, cela priča će važiti za Gentoo distribuciju, ali ćete se, analogno, lako snaći i na drugim distroima.
Podešavanja servera (P3):
Pre nego što bilo šta počnemo, treba podesiti kernel:
Device drivers -> Networking support -> Networking options -> [*] Network packet filtering (replaces ipchains)
Zatim uđite tu, pa u IP Netfilter Configuration i štiklirajte sve. (nemoj neko da me je isprozivao zbog ovoga, nemam pojma šta sme, a šta ne sme da se izostavi, od glave višak ne boli

Zatim treba instalirati iptables. Na Gentoo-u se to radi ovako:
emerge iptables
Sada editujte fajl /etc/conf.d/net koji je odgovoran za mrežne karte:
iface_eth0="dhcp"
iface_eth1="192.168.0.1 broadcast 192.168.0.255 netmask 255.255.255.0"
Dakle na serveru smo podesili da eth0 koja je vezana za ADSL ruter uzima adresu preko dhcpa, a eth1 koja je vezana sa desktop računarom uzima privatnu adresu 192.168.0.1.
Podešavanje klijenta (AMD64):
Evo njegovog /etc/conf.d/net-a:
iface_eth0="192.168.0.2 broadcast 192.168.0.255 netmask 255.255.255.0"
gateway="eth0/192.168.0.1"
Dakle, eth0 klijenta je vezan za server, ima adresu 192.168.0.2 i setovali smo da je gateway upravo 192.168.0.1.
Obratite pažnju da za samu kartu eth1 na serveru nije podešen gateway! To ćemo uraditi preko iptables-a!
E da, ne zaboravite da podesite DNSove u /etc/resolv.conf na klijentu. Dakle, tu sam strpao Sezamove DNS-ove. Na serveru je to isto potrebno uraditi, mada mislim da dhcp brine o tome, ali neće da škodi.
Pokretanje i testiranje:
Na serveru je potrebno podići mrežne karte i dodati u startup:
/etc/init.d/net.eth0 start
/etc/init.d/net.eth1 start
rc-update add net.eth0 default
rc-update add net.eth1 default
A na klijentu:
/etc/init.d/net.eth0 start
rc-update add net.eth0 default
Ajmo da istestiramo da li ovo radi. Sa servera pokušajte da pingujete svet i klijenta:
ping www.google.com
ping 192.168.0.2
Ako ovo prođe, onda je sve podešeno.
Sada dolazi najzanimljiviji deo, treba konfigurisati firewall i NAT:
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -X
# Omogućavamo NAT na eth0
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Forvardujemo sve što dolazi na eth1 na izlaz eth0 (zato nam nije bio potreban gw)
iptables -A FORWARD -i eth1 -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
# Omogućavamo pristup ssh serveru spolja
iptables -A INPUT --protocol tcp --dport 22 -j ACCEPT
# Omogucavamo pristup HTTP serveru spolja
iptables -A INPUT --protocol tcp --dport 80 -j ACCEPT
# Blokiramo sve ostalo spolja
iptables -A INPUT -i eth0 -m state --state NEW,INVALID -j DROP
iptables -A FORWARD -i eth0 -m state --state NEW,INVALID -j DROP
Sada ovo treba snimiti. Na Gentoo-u ima olakšica, a to je:
/etc/init.d/iptables save
koja na izvesno mesto snima pravila. Ako ne koristite Gentoo, onda ćete koristi alatke iptables-save i iptables-restore. Nije nikakav problem.
Istestirajte da li sve radi:
/etc/init.d/iptables start; /etc/init.d/iptables stop; /etc/init.d/iptables start
Ako ovo prođe, dodajte u startup:
rc-update add iptables default
Potrebno je još dodati sledeću liniju u /etc/conf.d/local.start kako bi pri svakom boot-u sve bilo u redu:
echo 1 > /proc/sys/net/ipv4/ip_forward
To je cela nauka. Sada klijent može nesmetano da ostvaruje konekcije bilo gde, a ulazni saobraćaj je omogućen samo na http i ssh server.
Biće i nastavak za malo komplikovanije slučajeve. Recimo: zabrana da klijent izlazi na neki port, forwardovanje nekog porta na klijenta itd.
Poz.
[Ovu poruku je menjao Vanja Petreski dana 09.09.2005. u 00:00 GMT+1]