Introducere in Iptables - Firewall-ul Linux
La conectarea reţelei la internet, fundaţia sistemului de securitate trebuie să fie asigurata de un firewall. Un firewall este un instrument care face diferenţa dintre reţelele protejate şi cele neprotejate şi, în multe cazuri, dintre regiunea protejata a unei reţele şi o alta zona neprotejata, a aceleiaşi reţele. De asemenea, conexiunea la internet şi partajarea acesteia la staţiile din reţea se face folosind un router, care este un echipament de reţea care interconectează doua reţele diferite şi permite traficul de date intre ele. De multe ori, routerul şi firewall-ul sunt înglobate în acelaşi echipament de reţea, pentru ca la nivelul interconectării a doua sau mai multe reţele este locul potrivit pentru un firewall care va aplica diferite filtrări şi politici de trafic. Pe lângă protecţia reţelei împotriva utilizatorilor Internet neautorizaţi care doresc să obţină acces, este necesara şi protecţia intre diferite departamente din reţea, de exemplu vânzările şi resursele umane. În majoritatea cazurilor însă, accentul va fi pus mai mult pe protejarea reţelei împotriva atacurilor din exterior decât a atacurilor din interior. Totuşi este mai indicat ca reţeaua să fie construita pe principiul necesităţii – daca un utilizator nu are nevoie de o anumita resursa, atunci nu trebuie să aibă acces la acea informaţie.
Indiferent de problemele de securitate interna, se va descoperi ca un firewall asigura în cadrul reţelei securitatea necesara.
Kernel-ele Linux-ului au avut filtre de pachete chiar de la versiunea 1.1. Prima generaţie, bazată pe ipfw de la BSD, a fost introdusă de Alan Cox în 1994. Aceasta a fost modificată şi întărită de Jos Vos şi alţii pentru Linux 2.0. În 1998, pentru Linux 2.2, a fost introdus programul 'ipchains'. În final, a patra generaţie a filtrului, 'iptables', şi o altă modificare a kernelului au apărut în 1999 pentru Linux 2.4. Din 1999 pana astăzi iptables a cunoscut şi cunoaşte numeroase îmbunătăţiri şi este inclus cu orice distribuţie moderna de Linux.
1.Tipuri de Firewall
Exista patru tipuri principale de firewall-uri, şi toate sunt disponibile pe platforma Linux. Acestea sunt, în ordinea complexităţii şi a funcţionalităţilor: a)tip filtrare de pachete, b)tip proxy, c) inspectare a stării conexiunilor ( statefull ), d) hibrid. Mai exista şi alte tipuri de firewall utilizate în medii de maxima securitate, dar sunt peste scopul acestei lucrări.
· Filtrare de pachete: acestea sunt prima generaţie de firewall-uri, în general cam ceea ce se găseşte pe ruterele moderne astăzi; deşi folositoare, sunt destul de ocolit de un atacator care foloseşte mai multe atacuri obişnuite.
· Proxy la nivel de aplicaţie: acestea sunt a doua generaţie de tehnologie în firewall-uri. Un firewall la nivel de aplicaţie este un server proxy, cum ar fi Squid pentru HTTP. Acestea permit un anumit grad de granularitate în aplicarea politicilor de securitate, care nu se regăsesc în celelalte tipuri de firewall. Mai exact, un proxy este o aplicaţie care rulează pe firewall/ruter, care retransmite traficul dintre un host şi destinaţie. Avantajul rezultat este ca traficul trimis/primit intre cele doua puncte este intermediat de către proxy, ceea ce înseamnă ca se pot face reguli diverse de filtrare a traficului intre cele doua puncte terminale.
· Inspectare a stării conexiunilor – sau Statefull Firewall: aceasta ar fi a treia generaţie de firewall, care are legătură cu metoda de filtrare a pachetelor, dar extinde capabilităţile unui firewall prin continuarea inspectării pachetelor pe măsură ce trec prin firewall. Netfilter/iptables, firewall-ul standard pentru Linux, face parte din aceasta a treia generaţie de firewall.
Trăsăturile principale a iptables sunt:
- filtrarea pachetelor după starea conexiunii ( urmărirea conexiunilor )
- toate tipurile de translatarea a adreselor de reţea
- arhitectura flexibila şi extensibila
- număr mare de funcţionalităţi adiţionale ca patch-uri
· Tip hibrid: - acestea sunt a patra generaţie de firewall şi sunt o combinaţie a celorlalte trei tipuri, permiţând utilizatorilor mai mult control asupra metodelor de control al traficului.
2. Firewall-ul iptables
Pentru a putea construi un firewall eficient, este absolut necesar să se cunoască modul intern de funcţionare a iptables, mai exact traseul pe care-l parcurge un pachet pentru a ajunge la destinaţie, sau – de a fi blocat daca întruneşte anumite condiţii. Este adevărat ca exista numeroase programe utilitare – dintre care vom enumera pe cele mai importante la sfârşitul acestui capitol - , în linie de comanda sau cu interfaţa grafica GUI ori web, care pot fi de mare folos în construirea unui firewall. Nimic însă nu poate suplini lipsa înţelegerii modului de funcţionare a unui firewall, când vine vorba de securitate la înalt nivel. Odată înţeleasa schema logica reprezentând modurile în care un pachet traversează diferite etape în firewall, va fi mult mai uşor să se construiască un firewall avansat, care poate să fie comparat cu oricare firewall comercial de top, şi ceea ce mai important va fi uşor de întreţinut, diagnosticat, şi îmbunătăţit.
Când un pachet intra prima data în firewall, trece prin hardware ( placa de reţea ) şi apoi prin driver intra în kernel. Apoi pachetul începe să traverseze o serie de paşi în kernel, după care este trimis către o anumita aplicaţie ( local ) sau este înaintat către un alt host – sau este pur şi simplu oprit.
Prima data să vedem parcursul unui pachet care este destinat pentru maşina locala. Va traversa următorii paşi pana când va fi înaintat către aplicaţia care-l primeşte:
Tabelul 3.1: Destinaţia maşina locala (pe care este firewall-ul)
|
Pas |
Tabel |
Lanţ |
Comentariu |
|
1 |
|
|
Pe mediul de transmisie (ex., Internet) |
|
2 |
|
|
Intra în interfaţa de reţea (ex., eth0) |
|
3 |
raw |
PREROUTING |
Acest lant este folosit pentru a se ocupa de pachete inainte de urmarirea conexiunilor ( connection tracking ). Poate fi folosit pentru a configura o anumita conexiune sa treaca peste connection-tracking. |
|
4 |
|
|
Aici are loc urmarirea conexiunilor (conntrack) |
|
5 |
mangle |
PREROUTING |
Acest lanţ este în mod normal folosit pentru alterarea pachetelor, de exemplu schimbarea TOS ( Type of Service), etc. |
|
6 |
nat |
PREROUTING |
Acest lanţ este folosit în principal pentru DNAT. Trebuie evitata filtrarea pachetelor în acest lanţ pentru ca poate fi evitata în anumite situaţii. |
|
7 |
|
|
Decizia de rutare, de ex. Pachetul este destinat pentru maşina locala să va fi înaintat, şi unde. |
|
8 |
mangle |
INPUT |
Acest lanţ se foloseşte pentru alterarea pachetelor, dup ace au fost rutate, dar înainte ca acestea să fie trimise către aplicaţia de pe maşina locala. |
|
9 |
filter |
INPUT |
Aici se face filtrarea pentru toate pachetele destinate pentru host-ul local. De reţinut ca toate pachetele destinate maşinii locale trec prin acest lanţ, indiferent prin ce interfaţa sau direcţie au venit. |
|
10 |
|
|
Procesul/aplicaţia locala ( de ex. Un program client/server ) |
Table 3.2. Sursa maşina locala
|
Pas |
Tabel |
Lanţ |
Comentariu |
|
1 |
|
|
Procesul/aplicaţia locala ( de ex. Un program client/server ) |
|
2 |
|
|
Decizia de rutare. Ce adresa sursa va folosi, ce interfaţa de ieşire, şi alte informaţii necesare. |
|
3 |
raw |
PREROUTING |
Acest lant este folosit pentru a se ocupa de pachete inainte de urmarirea conexiunilor ( connection tracking ). Poate fi folosit pentru a configura o anumita conexiune sa treaca peste connection-tracking. |
|
4 |
|
|
Aici are loc urmarirea conexiunilor (conntrack) |
|
5 |
mangle |
OUTPUT |
Aici se face alterarea pachetelor; este de preferat să nu se facă filtrări aici.
|
|
6 |
nat |
OUTPUT |
Acest lanţ poate fi folosit pentru a aplica NAT pachetelor care ies din firewall. |
|
7 |
|
|
Decizia de rutare, întrucât acţiunile din mangle ar fi putut să schimba modul cum ar trebui rutate pachetele. |
|
8 |
filter |
OUTPUT |
Aici se face filtrarea pachetelor care ies din maşina locala. |
|
9 |
mangle |
POSTROUTING |
În acest lanţ din tabela mangle are loc alterarea pachetelor înainte de a pleca din firewall, dar după decizia de rutare. Aici vor intra atât pachetele create de firewall, cat şi cele care traversează firewall-ul. |
|
10 |
nat |
POSTROUTING |
Aici are loc translatarea sursei adreselor sau SNAT. Este de preferat sa nu se facă filtrări aici pentru ca pot să nu se aplice în anumite situaţii. |
|
11 |
|
|
Pachetele ies printr-o interfaţa de reţea (ex., eth0) |
|
12 |
|
|
Mediul de transmisie (ex., fibra optica) |
În exemplul următor, presupunem ca pachetul este destinat pentru un alt host intr-o alta reţea. Pachetul traversează prin mai multe tablele şi lanţuri, în următoarea ordine:
Table 3.3. Pachetele înaintate către alte destinaţii
|
Pas |
Tabel |
Lanţ |
Comentariu |
|
1 |
|
|
Mediul de transmisie (ex., fibra optica) |
|
2 |
|
|
Intra pe o interfaţa de reţea (ex., eth0) |
|
3 |
raw |
PREROUTING |
Acest lant este folosit pentru a se ocupa de pachete inainte de urmarirea conexiunilor ( connection tracking ). Poate fi folosit pentru a configura o anumita conexiune sa treaca peste connection-tracking. |
|
4 |
|
|
Aici are loc urmarirea conexiunilor (conntrack) |
|
5 |
mangle |
PREROUTING |
Acest lanţ este în mod normal folosit pentru alterarea pachetelor, de exemplu schimbarea TOS ( Type of Service), etc. |
|
6 |
nat |
PREROUTING |
Acest lanţ este folosit în principal pentru DNAT. Trebuie evitata filtrarea pachetelor în acest lanţ pentru ca poate fi evitata în anumite situaţii. |
|
7 |
|
|
Decizia de rutare, de ex. Pachetul este destinat pentru maşina locala sau va fi înaintat, şi unde. |
|
8 |
mangle |
FORWARD |
Pachetul este trimis în lanţul FORWARD din tabela mangle. Acest lanţ poate fi folosit pentru anumite necesitaţi, cum ar fi alterarea pachetelor după decizia iniţiala de rutare, dar înainte de decizia de rutare finala – imediat înainte ce pachetul părăseşte firewall-ul. |
|
9 |
filter |
FORWARD |
Pachetul intra în lanţul FORWARD din tabela filter. Doar pachetele care sunt destinate altor host-uri trec pe aici, şi aici să face filtrarea lor. De reţinut ca tot traficul înaintat altor host-uri trece pe aici, nu doar intr-o singura direcţie! |
|
10 |
mangle |
POSTROUTING |
Acest lanţ este folosit pentru alterarea pachetelor după ce toate tipurile de decizii de rutare au avut loc, imediat înainte ca pachetul să paraseasca maşina. |
|
11 |
nat |
POSTROUTING |
Acest lanţ trebuie folosit pentru SNAT , şi trebuie evitata filtrarea aici pentru cc în unele situaţii regulile ar putea să nu se aplica. Tot aici se poate face mascaradarea adreselor. |
|
12 |
|
|
Pachetul iese prin interfaţa de ieşire (ex., eth1). |
|
13 |
|
|
Din nou în mediul de transmisie (ex., cablu UTP). |
După cum se poate observa, un pachet parcurge mai multe tabele şi lanţuri pana ajunge la destinaţie. Pachetul de date poate fi oprit în orice lanţ din iptables, sau oriunde altundeva, daca exista o regula specifica. Trebuie remarcat faptul ca nu exista lanţuri sau tabele specifice pentru diferite interfeţe de reţea sau altceva de acest gen. FORWARD este întotdeauna traversat de toate pachetele care sunt înaintate de firewall/router.

Figura 1: Tabelele şi lanţurile iptables, sunt incluse in schema si target-urile IMQ in instalare implicita (Before NAT si After NAT)
3.Sintaxa folosirii firewall-ului iptables
Fiecare regula este o linie de comenzi şi parametri pe care kernelul o interpretează pentru a şti ce să facă cu un pachet. Daca toate criteriile sunt întrunite, pachetului ii este aplicata ţinta – sau este redirectat cu noi instrucţiuni. Sintaxa de întocmire a regulilor este următoarea:
iptables [ -t tabela ] comanda [ potrivire, sau match ] [ ţinta ]
Tabela
Analizând sintaxa de mai sus, observam ca după comanda iptables va trebuie să specificam tabela unde se aplica regula. După cum am prezentat mai sus, exista trei tabele : mangle, nat, şi filter. Aşadar pana în acest punct o regula trebuie să arate aşa:
iptables –t nat comanda [ potrivire, sau match ] [ ţinta ]
iptables –t mangle comanda [ potrivire, sau match ] [ ţinta ]
Daca nu se specifica nici o tabela, iptables presupune ca regula se aplica în tabela filter. Deci fie ca folosim iptables –t filter [comanda], fie iptables [comanda] , regula se aplica în tabela filter.
Comanda
Trecând mai departe la analiza sintaxei, obervăm ca trebuie introdusa o comanda, imediat după specificarea tabelei. Comenzile se aplica asupra unui lanţ sau chain, şi pot fi:
-A ( append sau adauga ), spre exemplu -A INPUT sau –A PREROUTING
-D ( delete sau şterge ), spre exemplu –D INPUT sau –D POSTROUTING
Ştergerea unei reguli se poate face în doua feluri : fie se specifica întreaga regula cu –D, spre exemplu iptables -D INPUT --dport 80 -j DROP, fie se specifica doar numărul regulii , de ex. : iptables -D INPUT 1
-I ( insert ) lucrează în mod asemănător ca –A, însă spre deosebire de aceasta, -I inserează o regula înaintea celorlalte
-L ( list, afişare ) afişează regulile existente dintr-o anumita tabela sau chain, de ex. iptables –t nat –L , afişează regulile din tabela nat
-F ( flush, sau golire ) şterge toate regulile dintr-un chain sau tabela specificate, de ex : iptables –t mangle –F , şterge toate regulile din tabela mangle
-N (new) – creează un nou lanţ sau chain în tabela specificata, de ex : iptables –t filter –N badpachets , creează un nou chain în tabela filter numit badpachets.
-X , şterge un chain specificat
-P ( policy sau politica ) Un chain sau o tabela are o politica implicita – daca unui pachet nu i se aplica nici o regula, atunci se aplica politica implicita, care poate fi DROP sau ACCEPT, de ex. : iptables –P INPUT DROP , adică daca unui pachet care traversează chain-ul INPUT din tabela filter nu i se aplica nici o regula, atunci el va fi blocat sau va dispărea.
-E ( rename ) redenumeşte un anumit chain , spre exemplu: iptables –E badtcp goodtcp , adică redenumeşte chain-ul badtcp în goodtcp.
Cu aceasta, putem trece la pasul următor în construirea sintaxei. Pana acum o regula poate arata în felul următor:
iptables –t nat –A POSTROUTING [ potrivire, sau match ] [ ţinta ]
iptables -I INPUT [ potrivire, sau match ] [ ţinta ]
iptables –t mangle –D POSTROUTING [ potrivire, sau match ] [ ţinta ]
Match
Următoarea etapa în sintaxa este ceea ce se numeşte match, sau potrivirea caracteristicilor pachetului cu anumite reguli. În aceasta categorie se pot face potriviri după unul sau mai multe detalii: pe ce interfaţa vine sau pleacă pachetul, este un pachet tcp, udp sau icmp, are ca sursa/destinaţie un anumit port, vine/pleacă de la un anumit IP, s.a.
Să le luam pe rând:
Interfaţa pe care intra/iese pachetul se poate specifica cu –i sau --în-interface, respectiv -o sau --out interface; de ex: iptables –A FORWARD –i eth0
Extensiile TCP sunt încărcate automat daca este folosita comanda --protocol tcp sau –p tcp. Acestea vin cu următoarele opţiuni :
--tcp-flags : Daca după ele se pune (opţional)'!', atunci doua strunguri vor ajuta să se filtreze flaguri specifice protocolului TCP. Primul string este un mask: o lista de flaguri pe care vrem să o examineze. Al doilea string ii spune pe care vrem să le filtrezi. De exemplu:
iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK [ ţinta ]
Aceasta indica, ca toate flagurile trebuie examinate (ALL este sinonim cu SYN,ACK,FIN,RST,URG,PSH), dar doar SYN şi ACK vrem să le setam. Exista şi un argument NONE care înseamnă nici un flag.
--syn , adică un pachet care are bitul SYN setat şi bitii ACK şi RST nesetaţi ; aceasta este o scurtare a comenzii --tcp-flags SYN,RST,ACK SYN. Acest flag SYN este important în crearea regulilor pentru ca înseamnă un pachet care cere deschiderea unei noi conexiuni.
--source-port sau --sport opţional urmat de '!', şi apoi de un singur port TCP, sau un interval de porturi. Porturile pot fi specificate prin numele lor, la fel ca în /etc/services, sau numerice. Intervalele sunt ori doua nume de porturi separate cu '-', sau (pentru a specifica un nr. mai mare sau egal cu portul dat) un port cu '-' înainte lui, sau (pentru a specifica un nr. mai mic sau egal cu portul dat), un port precedat de'-'.
--destination-port sau --dport sunt la fel ca şi mai sus, numai ca ele specifica destinaţia în loc de sursa portului care ne interesează să-l filtram.
--tcp-option urmat oprional de '!' şi un număr, se refera la un pachet TCP care este egal cu acel număr. Un pachet care nu are un header TCP complet este aruncat (DROP) automat daca i se încearcă examinarea opţiunilor TCP.
Extensii privind starea conexiunii: Iptables poate determina starea în care este un pachet, din punct de vedere al conexiunii. Aceasta capabilitate tine seama de modelul stabilirii unei conexiuni TCP care se face în trei etape:
- NEW => Server1 se conectează la Server2 trimiţând un pachet SYN (Synchronize).
- RELATED => Server 2 primeşte pachetul SYN, şi răspunde cu un pachet SYN-ACK (Synchronize Acknowledgment).
- ESTABLISHED => Server 1 receptioneaza pachetul SYN-ACK şi răspunde cu un pachet ACK (Acknowledgment).
După ce aceasta conexiune în trei etape este realizata, traficul este considerat ESTABLISHED – stabilita. Opţiunea iptables prin care se distinge starea conexiunii este:
-m state --state NEW,RELATED,ESTABLISHED De ex.:
iptables -A INPUT -m state --state
RELATED,ESTABLISHED [ ţinta ]
iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED [ ţinta ]
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED [ ţinta ]
Extensii UDP : aceste extensii sunt încărcate automat daca este specificat protocolul UDP '--protocol udp'. Aici avem opţiunile '--source-port', '--sport', '--destination-port' şi '--dport' detaliate mai sus la protocolul TCP.
Extensii ICMP : aceasta extensie este încărcata automat daca se specifica '--protocol icmp'. Aceasta ne da o singura opţiune: --icmp-type urmat opţional de '!', reprezentat de un nume a tipului icmp (ex 'host-unreachable'), sau un tip numeric (ex. '3'), sau numeric şi cod separat de'/' (ex. '3/3'). O lista de nume tip icmp se poate obţine cu comanda '-p icmp --help'.
Extensie Layer 2 : iptables permite filtrarea pachetelor după adresa hardware a echipamentului de reţea care-l generează. Aceasta opţiune se specifica prin comanda --match mac , sau –m mac , cu parametrul --mac-source apoi o adresa ethernet scrisa în hexazecimale separate de :, ex '-m mac --mac-source 00:60:08:91:CC:B7'
Mai exista şi alte câteva tipuri speciale de extensii, şi pot fi găsite consultând pagina de manual a iptables.
Aşadar, pana în acest moment putem construi reguli mai complexe:
iptables –A INPUT –p tcp --dport 80 [ ţinta ]
iptables -p tcp --tcp-option 16 [ ţinta ]
iptables –A OUTPUT -p tcp --tcp-flags SYN,FIN,ACK SYN [ ţinta ]
iptables –A INPUT –i eth1 -m mac --mac-source 00:60:08:91:CC:B7 [ ţinta ]
Ţinta
Ceea ce ne mai lipseşte ca regulile să fie complete este să specificam acţiunea, sau ţinta pe care o vor urma pachetele care li s-au aplicat condiţiile din regula.
Specificarea ţintelor:
Acum ştim cum să examinam un pachet, trebuie să ştim ce să facem cu pachetele care se potrivesc regulilor noastre. Aceasta se numeşte Ţinta regulii (rule's target). Există doua ţinte foarte simple: DROP (arunca) şi ACCEPT(accepta). Dacă pachetul îndeplineşte regula şi ţinta ei este una din cele doua, nu vor mai fi consultate alte reguli: soarta pachetului a fost decisă. Se poate ca ţinta să fie un chain creat de utilizator. Daca pachetul parcurge, să zicem tabela filter, trece prin trei fără să existe o potrivire, şi la cea de-a patra, exista match, iar ca acţiune pachetul va fi redirectat în chainul creat de noi, de ex. badtcp:
iptables –A INPUT –p tcp –dport 22 –j badtcp
După cum se observa, pachetul este trimis în chainul badtcp, prin ţinta –j badtcp. În continuare el va parcurge acel chain, iar daca nu va avea o regula care să-I decidă soarta, el se va întoarce din nou, parcurgând regula imediat următoare celeia care l-a trimis în chainul badtcp. Este foarte important să realizam ca regulile se parcurg în ordine, daca exista o potrivire, pachetul va ieşi din firewall, ori fiind acceptat ori blocat sau aruncat. Daca nu se potriveşte cu nici o regula, atunci soarta pachetului va fi decisa de politica tabelelor şi chainurilor parcurse, care poate fi, aşa cum am arătat mai sus, ACCEPT sau DROP.
Alte ţinte:
LOG
Acest modul logheaza pachetele care îndeplinesc o anumita regula a cărei ţinta este LOG. Acesta vine cu următoarele opţiuni: --log-level Urmata de un nume sau număr. Numele sunt (case-insensitive) 'debug', 'info', 'notice', 'warning', 'err', 'crit', 'alert' şi 'emerg', care corespund numerelor de la 7 la 0. Pentru detalii se poate consulta man page-ul pentru syslog.conf
REJECT
Aceasta ţinta are acelaşi efect ca ţinta 'DROP', numai ca expeditorului ii este trimis un mesaj de eroare de tip ICMP 'port unreachable'. Nota: mesajul de eroare de tip ICMP nu este trimis daca (vezi RFC 1122): Pachetul filtrat era chiar el un mesaj de eroare de tip ICMP, sau un tip necunoscut de ICMP. Pachetul filtrat nu era primul fragment dintr-un lanţ de fragmente. Am trimis prea multe mesaje de eroare de tip ICMP la acea destinaţie intr-un anumit timp.
Ţinte speciale:
Exista alte ţinte speciale care vin o dat cu iptables: RETURN, QUEUE, DNAT şi SNAT
RETURN are acelaşi efect ca şi cum ar sari de la sfârşitul unui chain: pentru unul dintre cele trei chain-uri de baza, soarta pachetului va fi decisa de politica acestuia. Pentru o regula dintr-un chain definit de utilizator, traversarea continua exact după regula de la care a fost aruncat pachetul în chain-ul definit de utilizator. Daca o regula (nu este neapărat să fie ultima din chain) dintr-un chain definit de utilizator are ţinta RETURN şi aceasta se potriveşte unui pachet, aceasta îl va trimite înapoi la chainul de unde a venit, cu menţiunea ca este respectata traversarea regulilor, adică la regula exact următoare celei care a trimis pachetul în chain-ul definit de utilizator.
DNAT – este o ţinta speciala, prin care se rescrie prin translatarea adresei de reţea destinaţia unui pachet. Daca unui pachet i se aplica ( match ) regula care are DNAT ca ţinta, pachetul precum şi toate pachetele care urmează vor fi translatate, şi rutate către echipamentul, hostul sau reţeaua corespunzătoare. De reţinut ca ţinta DNAT se poate folosi doar în chain-urile PREROUTING şi OUTPUT din tabela nat. Să dam un exemplu:
iptables -t nat -A PREROUTING --dst 192.168.1.3 -p tcp --dport 80 -j DNAT \
--to-destination 10.10.10.1
Traducând regula, avem : orice pachet care vine cu destinaţia 192.168.1.3 pe portul 80, va fi redirecţionat la IP-ul 10.10.10.1, pe acelaşi port.
SNAT – este o ţinta speciala, prin care se rescrie prin translatarea adresei de reţea sursa unui pachet. Aceasta ţinta este foarte folositoare mai ales în cazul în care partajam o singura conexiune la internet pentru mai multe calculatoare cu adrese IP nerutabile sau private. La ieşirea din firewall, ip-urile private, sau sursa, vor fi modificate cu adresa IP a interfeţei de reţea prin care se face conexiunea la internet. Ţinta SNAT poate fi folosita doar în chainul POSTROUTING din tabela nat. De exemplu:
iptables –t nat –A POSTROUTING –s 192.168.0.0/24 –j SNAT –to-source $IP_EXT
Mai pe înţeles, orice IP sursa din clasa C 192.168.0.0/24 va fi schimbat cu IP-ul denumit generic $IP_EXT
QUEUE este o ţinta speciala, care păstrează pachetul pentru procesarea făcuta de useri. Daca pachetul nu este aşteptat de vreo aplicaţie acesta va fi aruncat.










