iptables je program koji služi za definisanje pravila zaštitnog zida (eng.
firewall). Ovo će biti još jedan kratak tekst koji će se osvrnuti na gotova rešenja za
iptables program. Ukoliko vam nije jasno kako
itables radi, napomenuću da je sistem rada isti kao kod
Look'n'Stop zaštitnog zida za Windows®. To je školjka u koju mogu da se ubacuju razna pravila. Ako se vodimo ovom logikom onda dolazimo do zaključka da
iptables nije upotrebljiv ukoliko nemate pravila. Na mreži postoji mali milion tekstova o tome ali sam počeo malo da kopam i da se raspitujem. Zahvaljujem
Daliboru koji mi je skrenuo pažnju na sledeće 2 veze:
Ako malo bolje pogledamo, prva veza je izuzetno neobična i generiše čudan niz pravila koja su, kako deluje, kvalitetna. Sa druge strane, imamo pravila #2 koja su kraća ali daju jednostavniji pregled onoga što koristimo. Pošto trenutno nisam upoznat sa pravilima dovoljno, skrećem vam pažnju da ova pravila umeju da zaglupe internet konekciju i prekinu vam protok (da sam se toga setio kada sam testirao... :> ).
Evo kako se primenjuju pravila pomoću
iptables programa:
- učitavanje pravila:
iptables-restore << pravila gde je sadržaj pravila datoteke sledeći (ovo je samo primer):
-A OUTPUT -d 10.0.0.1/32 -o eth0 -p tcp -m tcp --dport 9100 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m multiport --dports 21,80,443 -m state --state NEW -j ACCEPT
- učitavanje pravila (metod 2): skripta kao ona ispod (koju sam pisao) gde se svako pravilo izvršava jedno za drugim. Primer:
iptables -A INPUT -i eth+ -p udp -j DROP
iptables -A INPUT -i eth+ -p tcp -m tcp --syn -j DROP
Elem, skripta koja je meni zagolicala maštu je na vezi #2 i ispod se nalazi moja adaptacija skripte (dodao sam opcije, par pravila i standardne portove):
iptables_rules () {
iptables -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -i eth+ -p udp -j DROP
iptables -A INPUT -i eth+ -p tcp -m tcp --syn -j DROP
iptables -A INPUT -i lo -j ACCEPT
}
flush_rules () {
iptables -F
}
help () {
echo "$0 - manage iptables rules
usage: $0 action
Actions:
start - use defined iptables rules
stop - flush iptables rules
* - displays this help"
}
case $@ in
start ) iptables_rules ;;
stop ) flush_rules ;;
* ) help ;;
esac
exit 0
Kao što vidite, skripta ima opcije da se pokreće i gasi (
sitr.sh start pokreće dok
sitr.sh stop gasi skriptu.
sitr.sh je ime skripte kod mene). Zašto? Da bi je mogli ubaciti u
/usr/bin ili
/etc/init.d. Takođe, možda bude poboljšanja u samoj skripti pa mi je zato i lakše.
Skripta koju sam naveo ima komentare u sebi i objašnjeno je sve stoga neću da trošim reči na nju. Ukoliko bude dopuna, dodaću vezu do github/lokalne riznice kako bi mogli da preuzmete najnoviju verziju. Da bi skripta radila posle restarta računara, neophodno je da pogledate
bilo koji od sledećih metoda:
- kopirajte skriptu u
/etc/init.d i kucanje update-rc.d -f sitr.sh start 99 2 3 4 5 . (ukoliko ste skriptu nazvali sitr.sh); - kopirajte skriptu u
/etc/network/if-pre-up.d - dodajte skriptu sa sledećim pokretačem (eng. launcher) u vašem okruženju (KDE, GNOME, Xfce itd.):
sitr.sh start.
Skriptu treba da pokrenete kao
super korisnik (su, root ili kako već volite) i voila. Proverite pravila koja su aktivna sa sledećom komandom (kao super korisnik takođe):
iptables -L -v
Više o ovome će biti tema bloga kada malo više izučim celu tematiku.