25 korisnih pravila IPtable firewall-a koje bi svaki Linux administrator trebao znati


Upravljanje mrežnim prometom jedan je od najtežih poslova s kojima se administratori sistema moraju nositi. On mora da konfiguriše zaštitni zid na takav način da ispunjava zahteve sistema i korisnika i za dolazne i za odlazne veze, a da sistem ne ostane ranjiv na napade.

Ovdje iptables dobro dolaze. Iptables je Linux komandni red firewall koji omogućava administratorima sistema da upravljaju dolaznim i odlaznim prometom putem skupa konfigurabilnih tabličnih pravila.

Iptables koristi skup tabela koje imaju lance koji sadrže skup ugrađenih ili korisnički definiranih pravila. Zahvaljujući njima administrator sistema može pravilno filtrirati mrežni promet svog sistema.

Prema priručniku za iptables, trenutno postoje 3 vrste tabela:

    1. FILTER – ovo je zadana tabela, koja sadrži ugrađene lance za:

      1. INPUT  – paketi namijenjeni lokalnim utičnicama
      2. PROSLJEDI – paketi koji se usmjeravaju kroz sistem
      3. OUTPUT – paketi generirani lokalno
    2. NAT – tabela koja se konsultuje kada paket pokuša da kreira novu vezu. Ima sledeće ugrađene:

      1. PRIROUTING – koristi se za promjenu paketa čim se primi
      2. OUTPUT – koristi se za izmjenu lokalno generiranih paketa
      3. POSTROUTING – koristi se za izmjenu paketa dok se spremaju izaći
    3. MANGLE – ova tabela se koristi za izmjenu paketa. Do verzije kernela 2.4 ova tabela je imala samo dva lanca, ali sada ih ima 5:

      1. PRIROUTING – za promjenu dolaznih veza
      2. IZLAZ – za izmjenu lokalno generiranih  paketa
      3. INPUT – za dolazne pakete
      4. POSTROUTING – za izmjenu paketa dok se spremaju izaći
      5. PROPRIJED – za pakete koji se usmjeravaju kroz kutiju

U ovom članku ćete vidjeti neke korisne naredbe koje će vam pomoći da upravljate svojim Linux box firewall-om putem iptablesa. Za potrebe ovog članka, počet ću s jednostavnijim naredbama i ići na složenije do kraja.

1. Start/Stop/Restart Iptables Firewall

Prvo, trebali biste znati kako upravljati iptables uslugom u različitim Linux distribucijama. Ovo je prilično lako:

Na Linux distribucijama baziranim na SystemD-u

------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables

Na SysVinit baziranim Linux distribucijama

------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start 
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2. Provjerite sva pravila IPtables zaštitnog zida

Ako želite provjeriti postojeća pravila, koristite sljedeću naredbu:

iptables -L -n -v

Ovo bi trebalo vratiti izlaz sličan onome ispod:

Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
 pkts bytes target prot opt in out source destination

Ako više volite provjeriti pravila za određenu tabelu, možete koristiti opciju -t nakon koje slijedi tabela koju želite provjeriti. Na primjer, da provjerite pravila u tabeli NAT, možete koristiti:

iptables -t nat -L -v -n

3. Blokirajte specifičnu IP adresu u IPtables zaštitnom zidu

Ako pronađete neuobičajenu ili uvredljivu aktivnost sa IP adrese, možete blokirati tu IP adresu prema sljedećem pravilu:

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Gdje trebate promijeniti "xxx.xxx.xxx.xxx" sa stvarnom IP adresom. Budite veoma oprezni kada pokrećete ovu naredbu jer možete slučajno blokirati svoju IP adresu. Opcija -A dodaje pravilo na kraj odabranog lanca.

U slučaju da želite samo blokirati TCP promet sa te IP adrese, možete koristiti opciju -p koja specificira protokol. Na taj način će komanda izgledati ovako:

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4. Deblokirajte IP adresu u IPtables zaštitnom zidu

Ako ste odlučili da više ne želite blokirati zahtjeve sa određene IP adrese, možete izbrisati pravilo blokiranja sljedećom naredbom:

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

Opcija -D briše jedno ili više pravila iz odabranog lanca. Ako više volite da koristite dužu opciju, možete koristiti --delete.

5. Blokirajte određeni port na IPtables zaštitnom zidu

Ponekad ćete možda htjeti blokirati dolazne ili odlazne veze na određenom portu. To je dobra mjera sigurnosti i trebali biste stvarno razmisliti o tome kada postavljate svoj firewall.

Za blokiranje odlaznih veza na određenom portu koristite:

iptables -A OUTPUT -p tcp --dport xxx -j DROP

Da dozvolite dolazne veze koristite:

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

U oba primjera promijenite "xxx" sa stvarnim portom koji želite dopustiti. Ako želite blokirati UDP promet umjesto TCP, jednostavno promijenite "tcp" sa "udp" u iznad iptables pravila.

6. Dozvolite više portova na IP tablicama koristeći Multiport

Možete dozvoliti više portova odjednom, koristeći više portova, ispod možete pronaći takvo pravilo za dolazne i odlazne veze:

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7. Dozvolite određeni mrežni raspon na određenom portu na IP tablicama

Možda ćete htjeti ograničiti određene veze na određenom portu na datu mrežu. Recimo da želite dozvoliti odlazne veze na portu 22 na mrežu 192.168.100.0/24.

To možete učiniti sa ovom komandom:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8. Blokirajte Facebook na IPtables zaštitnom zidu

Neki poslodavci vole da blokiraju pristup Facebook-u svojim zaposlenima. Ispod je primjer kako blokirati promet na Facebooku.

Napomena: Ako ste administrator sistema i trebate primijeniti ova pravila, imajte na umu da vaše kolege mogu prestati razgovarati s vama :)

Prvo pronađite IP adrese koje koristi Facebook:

host facebook.com 
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20

Zatim možete blokirati tu Facebook mrežu sa:

iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP

Imajte na umu da opseg IP adresa koje koristi Facebook može varirati u vašoj zemlji.

9. Postavite prosljeđivanje portova u IPtables

Ponekad ćete možda htjeti proslijediti promet jedne usluge na drugi port. To možete postići sljedećom naredbom:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

Gornja komanda prosljeđuje sav dolazni promet na mrežnom interfejsu eth0, sa porta 25 na port 2525. Možete promijeniti portove sa onima koji su vam potrebni.

10. Blokirajte Network Flood na Apache portu sa IPtables

Ponekad IP adrese mogu zahtijevati previše veza prema web portovima na vašoj web stranici. To može uzrokovati brojne probleme i da biste spriječili takve probleme, možete koristiti sljedeće pravilo:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

Gornja komanda ograničava dolazne veze sa po minuti na 100 i postavlja ograničenje burst na 200. Možete urediti limit i limit-burst prema vlastitim specifičnim zahtjevima.

11. Blokirajte dolazne ping zahtjeve na IP tablicama

Neki sistemski administratori vole da blokiraju dolazne ping zahtjeve zbog sigurnosnih razloga. Iako prijetnja nije toliko velika, dobro je znati kako blokirati takav zahtjev:

iptables -A INPUT -p icmp -i eth0 -j DROP

12. Dozvolite pristup povratnoj petlji

Pristup povratnom petljom (pristup sa 127.0.0.1) je važan i uvijek ga ostavite aktivnim:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

13. Vodite evidenciju ispuštenih mrežnih paketa na IPtables

Ako želite da zabilježite ispuštene pakete na mrežni interfejs eth0, možete koristiti sljedeću naredbu:

iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"

Možete promijeniti vrijednost nakon "--log-prefix" nečim po svom izboru. Poruke su prijavljene u /var/log/messages i možete ih tražiti pomoću:

grep "IPtables dropped packets:" /var/log/messages

14. Blokirajte pristup određenoj MAC adresi na IP tablicama

Možete blokirati pristup vašem sistemu sa određene MAC adrese koristeći:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

Naravno, moraćete da promenite "00:00:00:00:00:00" sa stvarnom MAC adresom koju želite da blokirate.

15. Ograničite broj istovremenih veza po IP adresi

Ako ne želite da imate previše istovremenih veza uspostavljenih sa jedne IP adrese na datom portu, možete koristiti naredbu ispod:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Gornja naredba ne dozvoljava više od 3 veze po klijentu. Naravno, možete promijeniti broj porta da odgovara drugoj usluzi. Također --connlimit-above treba promijeniti da odgovara vašim zahtjevima.

16. Pretraživanje unutar IPtables pravila

Nakon što definirate svoja iptables pravila, htjet ćete pretraživati s vremena na vrijeme i možda ćete ih morati mijenjati. Jednostavan način pretraživanja unutar vaših pravila je korištenje:

iptables -L $table -v -n | grep $string

U gornjem primjeru, morat ćete promijeniti $table sa stvarnom tablicom unutar koje želite pretraživati i $string sa stvarnim nizom koji tražite.

Evo primjera:

iptables -L INPUT -v -n | grep 192.168.0.100

17. Definirajte novi lanac IPTables

Uz iptables, možete definirati svoj vlastiti lanac i pohraniti prilagođena pravila u njega. Za definiranje lanca koristite:

iptables -N custom-filter

Sada možete provjeriti postoji li vaš novi filter:

iptables -L
Sample Output
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain custom-filter (0 references)
target prot opt source destination

18. Flush IPtables Firewall Chains ili Pravila

Ako želite isprazniti lance zaštitnog zida, možete koristiti:

iptables -F

Možete isprati lance sa određene tabele sa:

iptables -t nat -F

Možete promijeniti "nat" sa stvarnom tablicom koje lance želite isprazniti.

19. Spremite IPtables pravila u datoteku

Ako želite da sačuvate pravila zaštitnog zida, možete koristiti naredbu iptables-save. Možete koristiti sljedeće da sačuvate i pohranite svoja pravila u datoteku:

iptables-save > ~/iptables.rules

Na vama je gdje ćete pohraniti datoteku i kako ćete je imenovati.

20. Vratite IPtables pravila iz datoteke

Ako želite da vratite listu iptables pravila, možete koristiti iptables-restore. Naredba izgleda ovako:

iptables-restore < ~/iptables.rules

Naravno, put do vaše datoteke pravila može biti drugačiji.

21. Postavite IPtables pravila za PCI usklađenost

Neki sistemski administratori će možda morati da konfigurišu svoje servere da budu kompatibilni sa PCI. Postoje mnogi zahtjevi različitih dobavljača usklađenosti s PCI, ali postoji nekoliko uobičajenih.

U mnogim slučajevima, morat ćete imati više od jedne IP adrese. Moraćete da primenite dolenavedena pravila za IP adresu sajta. Budite posebno oprezni kada koristite dolenavedena pravila i koristite ih samo ako ste sigurni šta radite:

iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP

Ako koristite cPanel ili sličan kontrolni panel, možda ćete morati blokirati i njegove portove. Evo primjera:

iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP

Napomena: Kako biste bili sigurni da ispunjavate zahtjeve vašeg PCI dobavljača, pažljivo provjerite njihov izvještaj i primijenite potrebna pravila. U nekim slučajevima možda ćete morati blokirati i UDP promet na određenim portovima.

22. Dozvolite uspostavljene i povezane veze

Kako je mrežni promet odvojen od dolaznog i odlaznog, poželjet ćete dozvoliti uspostavljeni i povezani dolazni promet. Za dolazne veze uradite to sa:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Za odlaznu upotrebu:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

23. Ispustite nevažeće pakete u IPtables

Moguće je da neki mrežni paketi budu označeni kao nevažeći. Neki ljudi možda više vole da zapisuju te pakete, ali drugi radije da ih ispuste. Za izbacivanje nevažećih paketa možete koristiti:

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

24. Blokirajte vezu na mrežnom sučelju

Neki sistemi mogu imati više od jednog mrežnog interfejsa. Možete ograničiti pristup tom mrežnom sučelju ili blokirati veze s određene IP adrese.

Na primjer:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

Promijenite “xxx.xxx.xxx.xxx ” sa stvarnom IP adresom (ili mrežom) koju želite blokirati.

25. Onemogućite odlaznu poštu kroz IPTables

Ako vaš sistem ne bi trebao slati e-poštu, možete blokirati odlazne portove na SMTP portovima. Na primjer, možete koristiti ovo:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

Zaključak

Iptables je moćan firewall od kojeg lako možete imati koristi. Za svakog administratora sistema je od vitalnog značaja da nauči barem osnove iptablesa. Ako želite pronaći detaljnije informacije o iptables-u i njegovim opcijama, preporučujemo da pročitate njegov priručnik:

man iptables

Ako mislite da bismo trebali dodati još naredbi na ovu listu, podijelite ih s nama, tako što ćete ih poslati u odeljku za komentare ispod.