Kako postaviti Iptables zaštitni zid da omogući daljinski pristup uslugama u Linuxu - 8. dio


Predstavljamo program sertifikacije Linux Foundation

Sjetit ćete se iz 1. dijela – O Iptablesima ove serije LFCE (Linux Foundation Certified Engineer) da smo dali osnovni opis onoga što je firewall: mehanizam za upravljanje paketi koji ulaze i napuštaju mrežu. Pod „upravljati“ zapravo mislimo na:

  1. Da dozvolimo ili spriječimo da određeni paketi uđu ili napuste našu mrežu.
  2. Za prosljeđivanje drugih paketa s jedne tačke mreže na drugu.

na osnovu unapred određenih kriterijuma.

U ovom članku ćemo raspravljati o tome kako implementirati osnovno filtriranje paketa i kako konfigurirati firewall sa iptables, frontend za netfilter, koji je izvorni modul kernela koji se koristi za firewall.

Imajte na umu da je zaštitni zid opsežna tema i ovaj članak nije namijenjen da bude sveobuhvatan vodič za razumijevanje svega što se o njemu može znati, već kao polazna tačka za dublje proučavanje ove teme. Međutim, ponovo ćemo se osvrnuti na temu u 10. dijelu ove serije kada istražimo nekoliko specifičnih slučajeva upotrebe zaštitnog zida u Linuxu.

Firewall možete zamisliti kao međunarodni aerodrom na koji putnički avioni dolaze i odlaze skoro 24 sata dnevno. Na osnovu brojnih uslova, kao što je valjanost pasoša osobe, ili njena/njena zemlja porijekla (da navedemo nekoliko primjera), može, ili ne mora, biti dozvoljeno da uđe ili izađe iz određene zemlje.

Istovremeno, aerodromski službenici mogu uputiti ljude da se kreću s jednog mjesta aerodroma na drugo ako je potrebno, na primjer kada treba da prođu kroz carinsku službu.

Možda će nam analogija aerodroma biti korisna tokom ostatka ovog uputstva. Samo imajte na umu sljedeće odnose dok nastavljamo:

  1. Osobe=Paketi
  2. Firewall=Aerodrom
  3. Država #1=Mreža #1
  4. Država #2=Mreža #2
  5. Propisi aerodroma koje provode službenici=pravila zaštitnog zida

Iptables – Osnove

Na niskom nivou, jezgro je ono koje “odlučuje” šta da radi sa paketima na osnovu pravila grupisanih u lancima, ili rečenicama. Ovi lanci definiraju koje akcije treba poduzeti kada paket odgovara kriterijima koji su oni specificirali.

Prva akcija koju će preduzeti iptables sastojat će se od odlučivanja šta će učiniti s paketom:

  1. Prihvatiti ga (pustiti ga u našu mrežu)?
  2. Odbiti ga (spriječiti pristup našoj mreži)?
  3. Proslijediti ga (na drugi lanac)?

Samo u slučaju da se pitate zašto se ovaj alat zove iptables, to je zato što su ovi lanci organizirani u tabele, pri čemu je tabela filtera najpoznatija i ona koja je koristi se za implementaciju filtriranja paketa sa svoja tri zadana lanca:

1. Lanac INPUT upravlja paketima koji dolaze u mrežu, a koji su namijenjeni lokalnim programima.

2. Lanac OUTPUT se koristi za analizu paketa koji potiču iz lokalne mreže, a koji se šalju van.

3. Lanac FORWARD obrađuje pakete koji bi trebali biti proslijeđeni na drugu destinaciju (kao u slučaju rutera).

Za svaki od ovih lanaca postoji zadana politika, koja diktira šta bi trebalo uraditi prema zadanim postavkama kada paketi ne odgovaraju nijednom od pravila u lancu. Možete pogledati pravila kreirana za svaki lanac i zadanu politiku pokretanjem sljedeće naredbe:

iptables -L

Dostupna pravila su sljedeća:

  1. ACCEPT → propušta paket. Svaki paket koji ne odgovara nijednom pravilu u lancu je dozvoljen u mrežu.
  2. DROP → tiho ispušta paket. Svaki paket koji ne odgovara nijednom pravilu u lancu je spriječen da uđe u mrežu.
  3. ODBACI → odbija paket i vraća informativnu poruku. Ovo posebno ne radi kao zadana politika. Umjesto toga, namijenjen je dopuni pravila filtriranja paketa.

Kada dođe do odlučivanja koju ćete politiku implementirati, morate uzeti u obzir prednosti i protiv svakog pristupa kao što je objašnjeno gore – imajte na umu da ne postoji jedinstvena veličina -sve rešenje.

Dodavanje pravila

Da biste dodali pravilo u firewall, pozovite naredbu iptables na sljedeći način:

iptables -A chain_name criteria -j target

gdje,

  1. -A označava Append (dodavanje trenutnog pravila na kraj lanca).
  2. chain_name je ili INPUT, OUTPUT ili FORWARD.
  3. cilj je radnja ili politika koja se primjenjuje u ovom slučaju (PRIHVATI, ODBACI ili ODBACI).
  4. kriterijum je skup uslova prema kojima se paketi trebaju ispitati. Sastoji se od najmanje jedne (najvjerovatnije više) sljedećih zastava. Opcije unutar zagrada, odvojene okomitom trakom, ekvivalentne su jedna drugoj. Ostalo predstavlja opcione prekidače:
[--protocol | -p] protocol: specifies the protocol involved in a rule.
[--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated.
[--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined.
[--source | -s] address[/mask]: represents the source address or network/mask.
[--destination | -d] address[/mask]: represents the destination address or network/mask.
[--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID.
[--in-interface | -i] interface: specifies the input interface of the packet.
[--out-interface | -o] interface: the output interface.
[--jump | -j] target: what to do when the packet matches the rule.

Naše okruženje za testiranje

Zalijepimo sve to u 3 klasična primjera koristeći sljedeće testno okruženje za prva dva:

Firewall: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
Source: CentOS 7 
Hostname: dev1.gabrielcanepa.com
IP Address: 192.168.0.17

I ovo za posljednji primjer

NFSv4 server and firewall: Debian Wheezy 7.5 
Hostname: debian
IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
PRIMJER 1: Analiza razlike između politika DROP i REJECT

Prvo ćemo definirati DROP politiku za ulazne pingove na naš zaštitni zid. To jest, icmp paketi će biti tiho ispušteni.

ping -c 3 192.168.0.15
iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

Prije nego što nastavimo s ODBACI dijelom, izbacit ćemo sva pravila iz INPUT lanca kako bismo bili sigurni da će naši paketi biti testirani ovim novim pravilom:

iptables -F INPUT
iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
ping -c 3 192.168.0.15

PRIMJER 2: Onemogućavanje/ponovno omogućavanje ssh prijavljivanja od dev2 do dev1

Bavićemo se lancem OUTPUT dok upravljamo odlaznim saobraćajem:

iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

PRIMJER 3: Dozvoljavanje/sprečavanje NFS klijenata (od 192.168.0.0/24) da montiraju NFS4 dionice

Pokrenite sljedeće komande na NFSv4 serveru/firewall-u da zatvorite portove 2049 i 111 za sve vrste saobraćaja:

iptables -F
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

Sada otvorimo te portove i vidimo šta će se dogoditi.

iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

Kao što možete vidjeti, uspjeli smo montirati NFSv4 share nakon otvaranja saobraćaja.

Umetanje, dodavanje i brisanje pravila

U prethodnim primjerima pokazali smo kako dodati pravila lancima INPUT i OUTPUT. Ako ih umjesto toga želimo umetnuti na unaprijed definiranu poziciju, trebali bismo koristiti prekidač -I (velika slova i).

Morate imati na umu da će se pravila procjenjivati jedno za drugim i da se evaluacija zaustavlja (ili preskače) kada se podudara politika DROP ili ACCEPT. Iz tog razloga, možete se naći u potrebi da po potrebi pomjerite pravila gore ili dolje na listi lanaca.

Koristit ćemo trivijalan primjer da to demonstriramo:

Postavimo sljedeće pravilo,

iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

na poziciji 2) u INPUT lancu (tako se prethodni #2 pomiče kao #3)

Koristeći gornju postavku, promet će se provjeriti da li je usmjeren na port 80 prije provjere za port 2049.

Alternativno, možete izbrisati pravilo i promijeniti cilj preostalih pravila u ODBACI (pomoću prekidača -R):

iptables -D INPUT 1
iptables -nL -v --line-numbers
iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

Na kraju, ali ne i najmanje važno, morat ćete imati na umu da kako bi pravila zaštitnog zida bila trajna, morat ćete ih spremiti u datoteku i zatim ih automatski vratiti nakon pokretanja (koristeći željenu metodu po vašem izboru ili onu koja je dostupan za vašu distribuciju).

Čuvanje pravila zaštitnog zida:

iptables-save > /etc/iptables/rules.v4		[On Ubuntu]
iptables-save > /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Pravila vraćanja:

iptables-restore < /etc/iptables/rules.v4		[On Ubuntu]
iptables-restore < /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Ovdje možemo vidjeti sličnu proceduru (ručno spremanje i vraćanje pravila zaštitnog zida) koristeći lažnu datoteku pod nazivom iptables.dump umjesto standardne kao što je prikazano iznad.

iptables-save > iptables.dump

Da ove promjene budu trajne u svim bootovima:

Ubuntu: Instalirajte iptables-persistent paket, koji će učitati pravila sačuvana u datoteci /etc/iptables/rules.v4.

apt-get install iptables-persistent

CentOS: Dodajte sljedeća 2 reda u datoteku /etc/sysconfig/iptables-config.

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE: Navedite dozvoljene portove, protokole, adrese i tako dalje (odvojeno zarezima) u /etc/sysconfig/SuSEfirewall2.

Za više informacija pogledajte sam fajl, koji ima dosta komentara.

Zaključak

Primjeri navedeni u ovom članku, iako ne pokrivaju sva zvona i zviždaljke iptablea, služe u svrhu ilustracije kako omogućiti i onemogućiti dolazni ili odlazni promet.

Za one od vas koji su ljubitelji firewall-a, imajte na umu da ćemo ovu temu ponovo razmotriti sa konkretnijim aplikacijama u 10. dijelu ove serije LFCE.

Slobodno mi javite ako imate pitanja ili komentara.