25+ најчешћих иптаблес команди са примерима

Konfigurisanje zaštitnog zida pomoću iptables na Linuxu

Kada koristite Linux, imate širok spektar mogućnosti da osigurate svoj sistem. Iptables, alatka za zaštitu od požara u komandnoj liniji, nudi izuzetnu fleksibilnost i snažnu zaštitu.

Međutim, zbog svoje prirode komandne linije, zahteva određeno vreme da se savlada.

Ako ste administrator sistema ili student Linuxa, na pravom ste mestu jer ćemo proći kroz najčešće korišćene iptables komande sa primerima.

Šta je iptables?

Iptables je softverski zaštitni zid ugrađen u Linux. On omogućava korisnicima Linuxa da definišu pravila koja direktno ili indirektno utiču na mrežni saobraćaj.

To znači da možete koristiti iptables da kreirate pravila koja blokiraju ili dozvoljavaju saobraćaj preko određenih portova, izvornih IP adresa, mrežnih interfejsa i još mnogo toga.

Kada definišete pravila, sav saobraćaj mora proći kroz njih. Na primer, za svaku novu vezu, iptables će proveriti da li postoje unapred definisana pravila koja odgovaraju toj vezi. Ako postoje, primeniće pravilo na vezu. U suprotnom, primeniće podrazumevano pravilo.

Da biste koristili iptables, unesite sledeću komandu:

$ iptables -L -n -v 

Objašnjenje parametara:

  • -L se koristi za prikaz svih pravila.
  • -n prikazuje numerički izlaz za brže performanse.
  • -v prikazuje izlaz u detaljnom formatu.

Ako pokrenete komandu iptables bez ikakvih parametara, dobićete sledeći izlaz:

iptables v1.8.7 (nf_tables): no command specified

Try `iptables -h' or 'iptables --help' for more information.

Možda ćete morati da ga instalirate ako se pojavi greška, kao što je „komanda ‘iptables’ nije pronađena“.

Da biste instalirali iptables na svoju Linux distribuciju, koristite ovu komandu:

$ sudo apt-get install iptables

Ako je već instaliran, dobićete sličan izlaz kao ovaj:

#output
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
iptables is already the newest version (1.8.7-1ubuntu5).
iptables set to manually installed.
0 upgraded, 0 newly installed, 0 to remove, and 35 not upgraded.

Šta je zaštitni zid?

Zaštitni zidovi predstavljaju osnovni oblik zaštite za sisteme, mreže i lične računare. Mogu biti hardverski ili softverski, a oslanjaju se na pravila kako bi pravilno funkcionisali.

Većina zaštitnih zidova je veoma prilagodljiva, što omogućava kreiranje ili izmenu pravila. Na primer, s obzirom na to da paketi sa interneta koriste portove za ulazak u sistem, skeniranje portova može pomoći u njihovom filtriranju. Takođe, možete dozvoliti ili blokirati usluge na osnovu izvorišne IP adrese ili mrežnog interfejsa.

Ako koristite Linux, imate pristup ugrađenom iptables-u. Međutim, možete koristiti i samostalni Linux zaštitni zid kako biste dodatno zaštitili svoj sistem.

Zašto vam je potreban iptables za konfiguraciju zaštitnog zida?

Zašto biste uopšte koristili iptables? Postoje i druge dobre alatke za zaštitu od požara u komandnoj liniji, kao što su ufw i firewalld. Takođe, možete koristiti samostalne Linux zaštitne zidove koji su jednostavni za korišćenje i nude više funkcija.

Šta onda čini iptables tako atraktivnim za konfigurisanje zaštitnog zida? Razlozi uključuju:

  • Nudi veliku fleksibilnost odmah po instalaciji. Možete postaviti pravila na nivou paketa.
  • Relativno je jednostavan za korišćenje kada razumete kako funkcioniše.
  • Lako blokira neželjeni saobraćaj.
  • Može preusmeriti pakete na alternativnu IP adresu.
  • Štiti sisteme od DoS napada.

I još mnogo toga!

Razumevanje iptables arhitekture i njene veze sa Netfilterom

Da bismo ispravno razumeli iptables, moramo naučiti o njegovoj arhitekturi. To će nam omogućiti da jasno razumemo različite komponente iptables-a. Kada ih upoznamo, možemo ih koristiti za pisanje pravila zaštitnog zida.

Kada govorimo o iptables-u, neizbežno je spomenuti i Netfilter. Možete zamisliti Netfilter kao „velikog brata“ iptables-a. On se nadograđuje na iptables i nudi bolji set funkcija za upravljanje zaštitnim zidom. Međutim, on koristi iptables kao jedno od sredstava za postizanje odličnih sposobnosti zaštitnog zida.

Iptables je interfejs komandne linije za Netfilter hook-ove na nivou kernela. Ovi hook-ovi mogu komunicirati sa Linux mrežnim stekom, što utiče na pakete na najdubljem nivou.

Kako izgleda iptables arhitektura?

Tabele

Arhitektura iptables-a počinje sa tabelama. Ove tabele služe za organizaciju pravila. Svaka tabela je klasifikovana prema tipu odluka koje donosi. Jednostavnije rečeno, tabela pojednostavljuje obradu paketa prilažući poseban način obrade.

Različite tabele koje nudi iptables uključuju:

  • Tabela filtera: Određuje odluku o filtriranju paketa. Jednostavno rečeno, odlučuje da li paket treba da stigne do odredišta ili ne.
  • NAT tabela: Određuje odluku o prevođenju adrese. Ovde se usmeravanje paketa određuje na osnovu NAT mreža. Na primer, ako paket ne može da pristupi NAT-u, preskočiće ga i potražiće mrežu koja nije NAT.
  • Mangle tabela: Upravlja posebnim potrebama obrade paketa. Na primer, možete je konfigurirati da promeni informacije zaglavlja paketa, kao što su TTL vrednosti.
  • Raw tabela: Omogućava vam da detaljno radite sa aspektom stanja iptables zaštitnog zida. Možete usmeravati pakete na osnovu njihovog „stanja“ pre nego što Linux kernel počne da prati njihovo stanje. Prvenstveno se koristi za obeležavanje paketa, bez obzira da li se sistem za praćenje veze bavi njima ili ne. Ako se paket ne prati, postavlja se na NOTRACK cilj.

Lanci

Zatim, unutar „tabela“ imamo „lance“.

Ovi lanci vrše duboku inspekciju paketa u različitim fazama njihovog putovanja. Na primer, možete ih pregledati kada stignu do porta ili mrežnog interfejsa. Na ovaj način se odluka može doneti pre nego što se paket pusti u sistemski proces.

Kao i tabele, postoje različiti lanci, uključujući:

  • PRE-ROUTING lanac: Pravila u ovom lancu se odnose na novopridošle pakete na mrežnom interfejsu.
  • INPUT lanac: Pravila u INPUT lancu upravljaju dolaznim vezama. Kada se završe, predaju se lokalnom procesu.
  • OUTPUT lanac: OUTPUT lanac se bavi paketima koje generišu procesi.
  • FORWARD lanac: FORWARD lanac upravlja paketima koji nisu namenjeni lokalnim sistemima. To je prenosnik za druge sisteme, kao što je ruter.
  • POST-ROUTING lanac: POST-ROUTING lanac se bavi paketima koji tek treba da prođu kroz mrežni interfejs.

Nisu svi lanci dostupni u svakoj tabeli. Na primer, FORWARD lanac je dostupan samo u mangle, filter i security tabeli. Slično, POST-ROUTING lanac je dostupan u mangle i nat (SNAT) tabelama. Samo je OUTPUT lanac dostupan u svim tabelama.

Cilj

Sada imamo „cilj“. Kada paket stigne, kreće se kroz lance kako bi se utvrdilo koje pravilo mu najviše odgovara. Ako se poklapa, izvršava se odgovarajuća radnja, a zatim se paket šalje do cilja, čime se okončava njegova putanja.

U mnogim slučajevima, paket ne odgovara nijednom opisu ili skupu pravila. Tu na scenu stupa podrazumevana politika – cilj.

Ciljevi mogu biti ACCEPT, DROP i REJECT. Ovo su završni ciljevi koji odlučuju o sudbini paketa.

  • ACCEPT: Prihvata paket.
  • DROP: Odbacuje paket, onemogućavajući pošiljaocu da sazna da li sistem postoji ili ne.
  • REJECT: Odbija paket.

Postoje i ciljevi koji nisu završni i koji se uglavnom koriste za čuvanje informacija o paketu.

Najčešće iptables komande sa primerima

Pre nego što počnete sa izvršavanjem iptables komandi, uverite se:

  • Da imate administratorski pristup za pokretanje komandi. Ako komanda ne uspe zbog nedostatka privilegija, ponovo je pokrenite koristeći sudo ispred nje.
  • Ovaj članak nije vodič za konfigurisanje iptables-a na Ubuntu-u.
  • Koristićemo iptables komandu koja radi sa IPv4. Ako želite da radite sa IPv6, koristićete ip6tables.

Provera statusa iptables-a

Da biste proverili trenutni status iptables-a, pokrenite sledeću komandu:

$ iptables -L -n -v
#output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Gornji izlaz sadrži mnogo informacija, ali ukazuje na to da zaštitni zid nije aktivan, jer su svi lanci trenutno podešeni na ACCEPT i nemaju pravila.

Moraćete da dodate pravila da biste aktivirali zaštitni zid.

Dodavanje pravila u lanac

Kada dodate pravilo, ono se uvek dodaje u lanac. Zbog toga morate koristiti opciju -A (Add). Sintaksa je sledeća:

$ sudo iptables - A

Međutim, ako je pokrenete, dobićete sledeće:

iptables v1.8.7 (nf_tables): option "-A" requires an argument

Try `iptables -h' or 'iptables --help' for more information.

Argumenti koje možete koristiti za dodavanje pravila su:

  • -i: označava interfejs. Ovde možete navesti interfejs za koji dodajete pravila (npr., ppp0, eth0).
  • -p: skraćenica za protokol. Ovde navodite mrežni protokol koji se koristi za filtriranje paketa (npr., ICMP, TCP, UDP). Ako želite da pravilo važi za sve protokole, navedite „all“ kao vrednost argumenta.
  • -s: argument source, navodi izvor saobraćaja (IP adresa ili ime hosta).
  • –dport: dport označava odredišni port, gde navodite broj porta na koji je paket usmeren.
  • -j: argument TARGET, gde navodite ime TARGET-a (ACCEPT, DROP ili REJECT).

Takođe je neophodno pisati naredbu u sledećem redosledu:

$ sudo iptables -A <chain-name> -i <interface-name> -p <protocool-name> -s <source> --dport <port no.> -j <target>

Čuvanje promena u iptables

Kada dodate pravilo, možete ga sačuvati pomoću komande iptables -save.

$ sudo iptables -save

Izlaz je sledeći:

[email protected]:~$ sudo iptables-save

# Generated by iptables-save v1.8.7 on Sun May 14 13:37:34 2023

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 392 -j REJECT --reject-with icmp-port-unreachable

-A OUTPUT -o lo -j ACCEPT

COMMIT

# Completed on Sun May 14 13:37:34 2023

Trajna pravila (ručno)

Podrazumevano, iptables ne čuva pravila. Dakle, ako ponovo pokrenete računar, sva pravila će biti uklonjena. Morate koristiti sledeće komande da ne biste morali ponovo da konfigurišete iptables.

Za IPv4 pravila, koristite komandu:

$ sudo iptables-save > /etc/iptables/rules.v4

Za IPv6 pravila, koristite komandu:

$ sudo iptables-save > /etc/iptables/rules.v6

Trajna pravila (automatski)

Da biste obezbedili da pravila ostanu sačuvana čak i nakon ponovnog pokretanja, i to automatski, morate instalirati iptables-persistent paket.

Da biste to uradili, pokrenite sledeću komandu:

$ sudo apt-get install iptables-persistent

Pojaviće se sledeći prozor. Pritisnite Enter na .

Pošto radimo sa IPv4 tabelom, biće prikazana samo IPv4 pravila. Ako radite na IPv6, biće prikazan odgovarajući prozor.

Napomena: Paket učitava samo sačuvana iptables pravila. Zato, svaki put kada promenite iptables, morate ih sačuvati pomoću komande iptables -save.

Ponovno učitavanje pravila nakon ponovnog pokretanja

Kada se pravila sačuvaju, morate ih vratiti sledećom komandom:

$ sudo iptables-restore < /etc/iptables/rules.v4

Ili

$ sudo iptables-restore < /etc/iptables/rules.v6

Omogućavanje saobraćaja na localhostu / Omogućavanje povratne petlje

Da biste omogućili saobraćaj na localhostu, koristite sledeću komandu:

$ sudo iptables -A INPUT -i lo -j ACCEPT

Ovde, lo označava interfejs povratne petlje za sve lokalne komunikacije.

Slično tome, možemo dozvoliti da paketi prolaze kroz interfejs povratne petlje:

$ sudo iptables -A OUTPUT -o lo -j ACCEPT

Da biste proverili kako je promenio pravila, pokrenite iptables -L -n -V

#output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Omogućavanje saobraćaja na određenim portovima

Možete omogućiti da saobraćaj bude ACCEPT ili REJECT na određenim portovima.

Na primer, SSL, HTTP i SSH portovi su važni za normalno funkcionisanje aplikacija. Možete dodati pravila da ACCEPT pakete kroz portove kako biste bili sigurni da rade kako treba.

Za SSL, pokrenite sledeću komandu:

$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Za HTTPS, pokrenite sledeću komandu:

$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Za omogućavanje celokupnog HTTPS saobraćaja na eth0 interfejsu:

$ iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

$ iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

Za SSH, pokrenite sledeću komandu:

$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Da biste prihvatili SAV dolazni SSH saobraćaj na eth0 interfejsu, koristite sledeće:

$ iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

$ iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Drugi primer je da omogućite saobraćaj porta za svoju prilagođenu aplikaciju. Recimo port 233.

Da biste otvorili veze na tom portu, pokrenite:

$ sudo iptables -A INPUT -p tcp --dport 233 -j ACCEPT

Slično tome, možete onemogućiti veze na određenom portu koristeći opciju REJECT target.

Hajde da blokiramo sve veze na portu 392:

$ sudo iptables -A INPUT -p tcp --dport 392 -j REJECT

Da biste proverili, pokrenite komandu iptables -L -n -v.

#output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:233

    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

 0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0

Brisanje postojećih pravila

Da biste obrisali postojeća pravila, pokrenite sledeću komandu:

$ iptables -F

ili

$ iptables --flush

Napomena: Ako niste sačuvali pravila, ona su izgubljena i ne mogu se vratiti pomoću iptables -restore.

Brisanje pravila pomoću brojeva redova

Da biste obrisali određeno pravilo, prvo morate dobiti listu pravila sa brojevima redova:

$ sudo iptables -L --line-numbers
#output

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

2    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http

3    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https

4    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:233

5    REJECT     tcp  --  anywhere             anywhere             tcp dpt:392 reject-with icmp-port-unreachable

Ako želite da uklonite pravilo broj 4 za INPUT lanac, pokrenite sledeću komandu:

$ sudo iptables -D INPUT 4

Ako ponovo pokrenete komandu iptables -n -v -L:

#output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

Prikazivanje samo INPUT ili OUTPUT lančanih pravila

Da biste prikazali samo INPUT lančana pravila, pokrenite sledeću komandu:

$ sudo iptables -L INPUT -n -v --line-numbers
#ouput

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

num   pkts bytes target     prot opt in     out     source               destination

1        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

2        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

3        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

4        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

Slično tome, ako želite da vidite samo pravila OUTPUT lanca, pokrenite:</p