Kako postaviti Iptables vatrozid da omogući daljinski pristup uslugama u Linuxu - 8. dio


Predstavljamo vam Linux Foundation Certification Program

Sjetit ćete se iz 1. dijela - O Iptables ove serije LFCE ( Linux Foundation Certified Engineer ) koji smo dali osnovni opis vatrozida: mehanizam za upravljanje paketi koji ulaze i izlaze iz mreže. Pod "upravljanje" zapravo podrazumijevamo:

  1. Da biste omogućili ili spriječili određene pakete da uđu ili napuste našu mrežu.
  2. Za prosljeđivanje ostalih paketa s jedne točke mreže na drugu.

na temelju unaprijed određenih kriterija.

U ovom ćemo članku razgovarati o tome kako implementirati osnovno filtriranje paketa i kako konfigurirati vatrozid s iptables, sučeljem do netfiltera, koji je izvorni modul jezgre koji se koristi za vatrozid.

Napominjemo da je vatrozid velika tema i ovaj članak nije namijenjen opsežnom vodiču za razumijevanje svega što se o njemu može znati, već kao polazište za dublje proučavanje ove teme. Međutim, ponovno ćemo posjetiti temu u 10. dijelu ove serije kada istražimo nekoliko specifičnih slučajeva upotrebe vatrozida u Linuxu.

Vatrozid možete smatrati međunarodnom zračnom lukom u koju putnički zrakoplovi dolaze i odlaze gotovo 24 sata dnevno. Na temelju niza uvjeta, poput valjanosti putovnice neke osobe ili zemlje podrijetla (da navedemo nekoliko primjera), njemu ili njoj može, ili ne mora biti dopušten ulazak ili napuštanje određene zemlje.

Istodobno, službenici zračne luke mogu uputiti ljude da se presele s jednog mjesta na drugo, ako je potrebno, na primjer kada trebaju proći carinsku službu.

Analogija aerodroma možda će nam biti korisna tijekom ostatka ovog vodiča. Samo imajte na umu sljedeće odnose kako nastavljamo:

  1. Osobe = Paketi
  2. Vatrozid = Zračna luka
  3. Zemlja # 1 = Mreža # 1
  4. Zemlja # 2 = Mreža # 2
  5. Propisi aerodroma koje provode službenici = pravila vatrozida

Iptables - osnove

Na niskoj je razini sam kernel taj koji " odlučuje " što će učiniti s paketima na temelju pravila grupiranih u lance ili rečenice . Ti lanci definiraju koje radnje treba poduzeti kada paket odgovara kriterijima koji su oni odredili.

Prva radnja koju će poduzeti iptables sastojat će se u odluci što učiniti s paketom:

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

Samo u slučaju da se pitate zašto se ovaj alat naziva iptables , to je zato što su ti lanci organizirani u tablice, pri čemu je tablica filtra najpoznatija i ona koja je koristi se za implementaciju filtriranja paketa sa svoja tri zadana lanca:

1. Lanac INPUT obrađuje pakete koji dolaze u mrežu i koji su namijenjeni lokalnim programima.

2. Lanac IZLAZ koristi se za analizu paketa nastalih u lokalnoj mreži, koji se trebaju poslati prema van.

3. Lanac NAPRIJED obrađuje pakete koje treba proslijediti na drugo odredište (kao u slučaju usmjerivača).

Za svaki od ovih lanaca postoji zadana politika koja nalaže što treba učiniti prema zadanim postavkama kada se paketi ne podudaraju ni s jednim pravilom u lancu. Možete pogledati pravila stvorena za svaki lanac i zadanu politiku izvršavanjem sljedeće naredbe:

# iptables -L

Dostupne politike su sljedeće:

  1. PRIHVATI → propušta paket. Svaki paket koji se ne podudara ni s jednim pravilom u lancu dopušten je u mrežu.
  2. DROP → tiho ispušta paket. Bilo kojem paketu koji se ne podudara ni s jednim pravilom u lancu onemogućen je ulazak u mrežu.
  3. ODBIJI → odbacuje paket i vraća informativnu poruku. Ovaj posebno ne funkcionira kao zadana politika. Umjesto toga, namijenjen je dopuni pravila filtriranja paketa.

Kad je riječ o odluci koju ćete politiku primijeniti, morate uzeti u obzir prednosti i nedostatke svakog pristupa kako je gore objašnjeno - imajte na umu da ne postoji jednoznačna prilagodba -svo rješenje.

Da biste dodali pravilo vatrozidu, pozovite naredbu iptables kako slijedi:

# iptables -A chain_name criteria -j target

gdje,

  1. -A znači Append (dodavanje trenutnog pravila na kraj lanca).
  2. ime_lanca je ili ULAZ, IZLAZ ili NAPRIJED.
  3. cilj je radnja ili politika koja se primjenjuje u ovom slučaju (PRIHVATI, ODBIJI ili DROP).
  4. kriterij je skup uvjeta prema kojima se paketi trebaju ispitati. Sastoji se od najmanje jedne (najvjerojatnije više) od sljedećih zastava. Opcije unutar zagrada, odvojene okomitom trakom, jednake su jedna drugoj. Ostalo predstavljaju opcionalne sklopke:

[--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.

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

Prvo ćemo definirati politiku DROP za ulazne pingove na naš vatrozid. Odnosno, icmp paketi će se tiho ispuštati.

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

Prije nastavka s dijelom REJECT , ispraznit ćemo sva pravila iz lanca INPUT 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

Bavit ćemo se lancem IZLAZ dok rješavamo odlazni promet:

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

Izvedite sljedeće naredbe na NFSv4 poslužitelju/vatrozidu da biste zatvorili priključke 2049 i 111 za sve vrste prometa:

# 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

Ajmo sada otvoriti te luke i vidjeti što ć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 vidite, uspjeli smo montirati NFSv4 udio nakon otvaranja prometa.

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

Morate imati na umu da će se pravila ocjenjivati jedno za drugim i da se vrednovanje zaustavlja (ili skače) kada se podudaraju pravila DROP ili ACCEPT . Iz tog razloga možda ćete se naći u potrebi da pomaknete pravila prema gore ili dolje na popisu lanaca prema potrebi.

Upotrijebit ćemo trivijalni primjer da to pokažemo:

Postavimo sljedeće pravilo,

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

na položaju 2) u lancu INPUT (premještajući prethodni # 2 kao # 3)

Koristeći gornju postavku, promet će se provjeriti je li usmjeren na priključak 80 prije provjere priključka 2049 .

Možete i izbrisati pravilo i promijeniti cilj preostalih pravila u ODBIJATI (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

I na kraju, ali ne najmanje važno, morat ćete zapamtiti da ćete ih, kako bi pravila vatrozida bila postojana, trebati spremiti u datoteku, a zatim ih automatski vratiti prilikom pokretanja (korištenjem preferirane metode po vašem izboru ili one koja dostupan za vašu distribuciju).

Spremanje pravila vatrozida:

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

Vraćanje pravila:

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

Ovdje možemo vidjeti sličan postupak (ručno spremanje i vraćanje pravila vatrozida) pomoću lažne datoteke koja se zove iptables.dump umjesto zadane, kao što je gore prikazano.

# iptables-save > iptables.dump

Da bi ove promjene bile trajne u svim čizmama:

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

# apt-get install iptables-persistent

CentOS : Dodajte sljedeća dva retka u datoteku /etc/sysconfig/iptables-config .

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE : navedite dopuštene priključke, protokole, adrese i tako dalje (odvojene zarezima) u /etc/sysconfig/SuSEfirewall2 .

Za više informacija pogledajte samu datoteku koja je jako komentirana.

Zaključak

Primjeri u ovom članku, iako ne pokrivaju sva zvona iptable iptables, služe u svrhu ilustracije kako omogućiti i onemogućiti promet u dolaznom ili odlaznom prometu.

Za one koji ste ljubitelji vatrozida, imajte na umu da ćemo ponovno posjetiti ovu temu s određenijim aplikacijama u dijelu 10 ove serije LFCE .

Slobodno mi javite ako imate pitanja ili komentare.