IPTABLES(8) iptables 1.8.10 IPTABLES(8)

iptables/ip6tables — instrument de administrare pentru filtrarea pachetelor IPv4/IPv6 și NAT

iptables [-t tabel] {-A|-C|-D|-V} lanț definiție-regulă

ip6tables [-t tabel] {-A|-C|-D|-V} lanț definiție-regulă

iptables [-t tabel] -I lanț [număr-regulă] definiție-regulă

iptables [-t tabel] -R lanț număr-regulă definiție-regulă

iptables [-t tabel] -D lanț definiție-regulă

iptables [-t tabel] -S [lanț [definiție-regulă]]

iptables [-t tabel] {-F|-L|-Z} [lanț [număr-regulă]] [opțiuni...]

iptables [-t tabel] -N lanț

iptables [-t tabel] -X [lanț]

iptables [-t tabel] -P lanț ținta

iptables [-t tabel] -E nume-lanț-vechi nume-lanț-nou

rule-specification = [potriviri...] [ținta]

potrivire = -m nume-potrivire [opțiuni-per-potrivire]

ținta = -j nume-țintă [opțiuni-per-țintă]

iptables și ip6tables sunt utilizate pentru a configura, întreține și inspecta tabelele de reguli de filtrare a pachetelor IPv4 și IPv6 din nucleul Linux. Pot fi definite mai multe tabele diferite. Fiecare tabel conține un număr de lanțuri încorporate și poate conține, de asemenea, lanțuri definite de utilizator.

Fiecare lanț este o listă de reguli care se potrivesc cu un set de pachete. Fiecare regulă specifică ce trebuie făcut cu un pachet care se potrivește. Aceasta se numește „țintă”, care poate fi un salt la un lanț definit de utilizator în același tabel.

ȚINTE

O regulă de paravan de protecție specifică criteriile pentru un pachet și o țintă. Dacă pachetul nu se potrivește, este examinată următoarea regulă din lanț; dacă se potrivește, următoarea regulă este specificată de valoarea țintei, care poate fi numele unui lanț definit de utilizator, una dintre țintele descrise în iptables-extensions(8) sau una dintre valorile speciale ACCEPT, DROP sau RETURN.

ACCEPT înseamnă că pachetul trebuie lăsat să treacă. DROP înseamnă să respingă pachetul. RETURN înseamnă oprirea parcurgerii acestui lanț și reluarea la următoarea regulă din lanțul anterior (de apelare). În cazul în care se ajunge la sfârșitul unui lanț încorporat sau dacă o regulă dintr-un lanț încorporat cu ținta RETURN se potrivește, ținta specificată de politica lanțului determină soarta pachetului.

În prezent, există cinci tabele independente (tabelele care sunt prezente în orice moment depind de opțiunile de configurare a nucleului și de modulele care sunt prezente).

Această opțiune specifică tabelul de potrivire a pachetelor pe care trebuie să opereze comanda. Dacă nucleul este configurat cu încărcare automată a modulelor, se va încerca încărcarea modulului corespunzător pentru acest tabel, dacă acesta nu este deja încărcat.

Tabelele sunt următoarele:

Acesta este tabelul implicit (în cazul în care nu este indicată opțiunea -t). Acesta conține lanțurile încorporate INPUT (pentru pachetele destinate soclurilor locale), FORWARD (pentru pachetele care sunt direcționate prin mașină pentru alte gazde din rețea) și OUTPUT (pentru pachetele generate local).
Acest tabel este consultat atunci când se întâlnește un pachet care creează o nouă conexiune. Acesta este format din patru elemente integrate: PREROUTING (pentru modificarea pachetelor imediat ce intră), INPUT ( pentru modificarea pachetelor destinate soclurilor locale), OUTPUT (pentru modificarea pachetelor generate la nivel local înainte de rutare) și POSTROUTING (pentru modificarea pachetelor în momentul în care sunt pe cale să iasă). Suportul IPv6 NAT este disponibil începând cu nucleul 3.7.
Acest tabel este utilizat pentru modificarea specializată a pachetelor. Până la nucleul 2.4.17 avea două lanțuri încorporate: PREROUTING (pentru modificarea pachetelor primite înainte de rutare) și OUTPUT (pentru modificarea pachetelor generate local înainte de rutare). Începând cu nucleul 2.4.18, sunt acceptate și alte trei lanțuri încorporate: INPUT ( pentru pachetele care intră în propria mașină), FORWARD (pentru modificarea pachetelor care sunt direcționate prin mașină) și POSTROUTING (pentru modificarea pachetelor care urmează să iasă).
Acest tabel este utilizat în principal pentru configurarea excepțiilor de la urmărirea conexiunilor în combinație cu obiectivul NOTRACK. Se înregistrează la cârligele netfilter cu o prioritate mai mare și, prin urmare, este apelat înainte de ip_conntrack, sau de orice alte tabele IP. Oferă următoarele lanțuri încorporate: PREROUTING (pentru pachetele care sosesc prin orice interfață de rețea) și OUTPUT (pentru pachetele generate de procesele locale).
Acest tabel este utilizat pentru regulile de rețea ale controlului de acces obligatoriu („Mandatory Access Control”: MAC), cum ar fi cele activate de obiectivele SECMARK și CONNSECMARK. Controlul de acces obligatoriu este implementat de modulele de securitate Linux, cum ar fi SELinux. Tabelul de securitate este apelat după tabelul de filtrare, permițând ca orice reguli de control discreționar al accesului (DAC) din tabelul de filtrare să intre în vigoare înaintea regulilor MAC. Acest tabel oferă următoarele lanțuri încorporate: INPUT (pentru pachetele care intră în mașină), OUTPUT (pentru modificarea pachetelor generate local înainte de direcționare) și FORWARD (pentru modificarea pachetelor care sunt direcționate prin mașină).

Opțiunile care sunt recunoscute de iptables și ip6tables pot fi împărțite în mai multe grupuri diferite.

Aceste opțiuni specifică acțiunea dorită de efectuat. Numai una dintre ele poate fi specificată în linia de comandă, cu excepția cazului în care se specifică altfel mai jos. Pentru versiunile lungi ale numelor comenzilor și opțiunilor, trebuie să folosiți doar suficiente litere pentru a vă asigura că iptables o poate diferenția de toate celelalte opțiuni.

Adaugă una sau mai multe reguli la sfârșitul lanțului selectat. În cazul în care numele de sursă și/sau de destinație se rezolvă la mai multe adrese, se va adăuga o regulă pentru fiecare combinație posibilă de adrese.
Verifică dacă în lanțul selectat există o regulă care corespunde definiției. Această comandă utilizează aceeași logică ca și -D pentru a găsi o intrare corespunzătoare, dar nu modifică configurația iptables existentă și utilizează codul său de ieșire pentru a indica succesul sau eșecul.
Șterge una sau mai multe reguli din lanțul selectat. Există două versiuni ale acestei comenzi: regula poate fi specificată ca număr în lanț (începând de la 1 pentru prima regulă) sau ca o regulă care trebuie să se potrivească.
Introduce una sau mai multe reguli în lanțul selectat, cu numărul de regulă dat. Astfel, dacă numărul regulii este 1, regula sau regulile sunt inserate în capul lanțului. Aceasta este, de asemenea, valoarea implicită în cazul în care nu se specifică niciun număr de regulă.
Înlocuiește o regulă din lanțul selectat. Dacă numele sursă și/sau destinație se rezolvă la mai multe adrese, comanda va eșua. Regulile sunt numerotate începând de la 1.
Listează toate regulile din lanțul selectat. Dacă nu este selectat niciun lanț, sunt enumerate toate lanțurile. La fel ca orice altă comandă «iptables», se aplică la tabelul specificat („filter” este valoarea implicită), astfel încât regulile NAT sunt listate de către
 iptables -t nat -n -L
Vă rugăm să rețineți că această opțiune este adesea utilizată împreună cu opțiunea -n, pentru a evita căutările DNS inverse lungi. Este legal să se specifice și opțiunea -Z (zero), caz în care lanțurile vor fi listate și reduse la zero în mod atomic. Rezultatul exact este influențat de celelalte argumente furnizate. Regulile exacte sunt suprimate până când se utilizează
 iptables -L -v
sau iptables-save(8).
Afișează toate regulile din lanțul selectat. Dacă nu este selectat niciun lanț, toate lanțurile sunt afișate ca în cazul «iptables-save». La fel ca orice altă comandă «iptables», se aplică la tabelul specificat („filter” este valoarea implicită).
Golește lanțul selectat (toate lanțurile din tabel, dacă nu este indicat niciunul). Acest lucru este echivalent cu ștergerea tuturor regulilor una câte una.
Se pun la zero contoarele de pachete și de octeți din toate lanțurile, sau numai din lanțul dat, sau numai din regula dată dintr-un lanț. Este legal să se specifice și opțiunea -L, --list (list), pentru a vedea contoarele imediat înainte de a fi șterse; (a se vedea mai sus).
Creează un nou lanț definit de utilizator cu numele dat. Nu trebuie să existe deja o țintă cu acest nume.
Șterge lanțul specificat. Nu trebuie să existe referințe la lanț. Dacă există, trebuie să ștergeți sau să înlocuiți regulile de trimitere înainte ca lanțul să poată fi șters. Lanțul trebuie să fie gol, adică să nu conțină nicio regulă. Dacă nu se furnizează niciun argument, se vor șterge toate lanțurile goale din tabel. Lanțurile goale integrate pot fi șterse numai cu iptables-nft.
Stabilește politica pentru lanțul încorporat (nedefinit de utilizator) la ținta dată. Ținta politicii trebuie să fie ACCEPT sau DROP.
Redenumește lanțul specificat de utilizator cu numele furnizat de utilizator. Această operație este de ordin cosmetic și nu are niciun efect asupra structurii tabelului.
Ajutor. Oferă o descriere (deocamdată foarte scurtă) a sintaxei comenzii.

Următorii parametri alcătuiesc specificația unei reguli (utilizată în comenzile add, delete, insert, replace și append).

-4, --ipv4
Această opțiune nu are niciun efect în «iptables» și «iptables-restore». Dacă o regulă care utilizează opțiunea -4 este inserată cu (și numai cu) ip6tables-restore, aceasta va fi ignorată în tăcere. Orice altă utilizare va arunca o eroare. Această opțiune permite reguli IPv4 și IPv6 într-un singur fișier de reguli pentru a fi utilizate atât cu «iptables-restore», cât și cu «ip6tables-restore».
-6, --ipv6
Dacă o regulă care utilizează opțiunea -6 este inserată cu (și numai cu) iptables-restore, aceasta va fi ignorată în tăcere. Orice altă utilizare va arunca o eroare. Această opțiune permite reguli IPv4 și IPv6 într-un singur fișier de reguli pentru a fi utilizate atât cu «iptables-restore», cât și cu «ip6tables-restore». Această opțiune nu are niciun efect în «ip6tables» și «ip6tables-restore».
[!] -p, --protocol protocol
Protocolul regulii sau al pachetului care trebuie verificat. Protocolul specificat poate fi unul dintre tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp, mh sau cuvântul cheie special „all”, sau poate fi o valoare numerică, reprezentând unul dintre aceste protocoale sau unul diferit. Este permis și un nume de protocol din /etc/protocols. Un argument „!” înaintea protocolului inversează testul. Numărul zero este echivalent cu all. „all” se va potrivi cu toate protocoalele și este luat ca valoare implicită atunci când această opțiune este omisă. Rețineți că, în ip6tables, antetele de extensie IPv6, cu excepția esp, nu sunt permise. esp și ipv6-nonext pot fi utilizate cu nucleul versiunea 2.6.11 sau o versiune ulterioară. Numărul zero este echivalent cu all, ceea ce înseamnă că nu puteți testa direct câmpul de protocol pentru valoarea 0. Pentru a se potrivi pe un antet HBH, chiar dacă ar fi ultimul, nu puteți utiliza -p 0, ci aveți întotdeauna nevoie de -m hbh.
[!] -s, --source adresa[/masca][,...]
Specificarea sursei. adresa poate fi fie un nume de rețea, un nume de gazdă, o adresă IP de rețea (cu /mască), fie o adresă IP simplă. Numele de gazdă vor fi rezolvate o singură dată, înainte ca regula să fie transmisă nucleului. Rețineți că specificarea oricărui nume care urmează să fie rezolvat cu o interogare la distanță, cum ar fi DNS, este o idee foarte proastă. masca poate fi fie o mască de rețea ipv4 (pentru iptables), fie un număr simplu, specificând numărul de 1 din partea stângă a măștii de rețea. Astfel, o mască iptables de 24 este echivalentă cu 255.255.255.255.0. Un argument „!” înainte de specificarea adresei inversează sensul adresei. Opțiunea --src este un alias pentru această opțiune. Pot fi specificate mai multe adrese, dar acest lucru va conduce la extinderea la mai multe reguli (atunci când se adaugă cu -A), sau va determina ștergerea mai multor reguli (cu -D).
[!] -d, --destination adresa[/masca][,...]
Specificarea destinației. Pentru o descriere detaliată a sintaxei, a se vedea descrierea opțiunii -s (sursă). Opțiunea --dst este un alias pentru această opțiune.
Specifică o potrivire care trebuie utilizată, adică un modul de extensie care testează o anumită proprietate. Setul de potriviri constituie condiția în care este invocată o țintă. Potrivirile sunt evaluate de la prima la ultima după cum este specificat în linia de comandă și funcționează în regim de scurtcircuit, adică dacă o extensie dă un rezultat fals, evaluarea se va opri.
Aceasta specifică ținta regulii, adică ce trebuie făcut dacă pachetul se potrivește cu ea. Ținta poate fi un lanț definit de utilizator (altul decât cel în care se află această regulă), una dintre țintele speciale încorporate care decid imediat soarta pachetului sau o extensie (a se vedea secțiunea EXTENSII DE POTRIVIRE ȘI ȚINTĂ de mai jos). Dacă această opțiune este omisă într-o regulă (și nu se utilizează -g), potrivirea regulii nu va avea niciun efect asupra soartei pachetului, dar contoarele regulii vor fi crescute.
Aceasta specifică faptul că prelucrarea trebuie să continue într-un lanț specificat de utilizator. Spre deosebire de opțiunea „--jump”, RETURN nu va continua procesarea în acest lanț, ci în lanțul care ne-a apelat prin „--jump”.
[!] -i, --in-interface nume
Numele unei interfețe prin intermediul căreia a fost primit un pachet (numai pentru pachetele care intră în lanțurile INPUT, FORWARD și PREROUTING). Atunci când argumentul „!” este utilizat înaintea numelui interfeței, sensul este inversat. Dacă numele interfeței se termină cu un „+”, atunci orice interfață care începe cu acest nume se va potrivi. Dacă această opțiune este omisă, orice nume de interfață se va potrivi.
[!] -o, --out-interface nume
Numele unei interfețe prin intermediul căreia urmează să fie trimis un pachet (pentru pachetele care intră în lanțurile FORWARD, OUTPUT și POSTROUTING). Atunci când argumentul „!” este utilizat înaintea numelui interfeței, sensul este inversat. Dacă numele interfeței se termină cu un „+”, atunci orice interfață care începe cu acest nume se va potrivi. Dacă această opțiune este omisă, orice nume de interfață se va potrivi.
[!] -f, --fragment
Acest lucru înseamnă că regula se referă numai la al doilea și următoarele fragmente IPv4 din pachetele fragmentate. Deoarece nu există nicio modalitate de a determina porturile sursă sau destinație ale unui astfel de pachet (sau tipul ICMP), un astfel de pachet nu se va potrivi cu nicio regulă care le specifică. Atunci când argumentul „!” precede opțiunea „-f”, regula se va potrivi numai cu fragmentele de antet sau cu pachetele nefragmentate. Această opțiune este specifică IPv4, nu este disponibilă în «ip6tables».
Aceasta permite administratorului să inițializeze contoarele de pachete și de octeți ale unei reguli (în timpul operațiilor INSERT, APPEND, REPLACE).

Se pot specifica următoarele opțiuni suplimentare:

Ieșire detaliată. Această opțiune face astfel încât comanda «list» să afișeze numele interfeței, opțiunile regulii (dacă există) și măștile TOS. De asemenea, sunt listate contoarele de pachete și de octeți, cu sufixul „K”, „M” sau „G” pentru multiplicatori de 1000, 1.000.000 și, respectiv, 1.000.000.000.000 (dar consultați opțiunea -x flag pentru a schimba acest lucru). Pentru adăugare, inserare, ștergere și înlocuire, acest lucru determină afișarea de informații detaliate despre regula sau regulile respective. -v poate fi specificat de mai multe ori pentru a emite, eventual, indicații de depanare mai detaliate: specificată de două ori, iptables-legacy va afișa informații despre tabele și intrări în libiptc, iptables-nft afișează regulile în prezentarea netlink (cod VM). Specificată de trei ori, iptables-nft va afișa, de asemenea, toate mesajele netlink trimise către nucleu.
Afișează versiunea programului și API-ul nucleului utilizat.
Așteaptă să se blocheze xtables. Pentru a preveni rularea simultană a mai multor instanțe ale programului, se va încerca obținerea unui blocaj exclusiv la lansare. În mod implicit, programul va ieși dacă nu se poate obține blocarea. Această opțiune va face ca programul să aștepte (pe termen nedefinit sau timp de secunde opțional) până când se poate obține blocarea exclusivă.
Ieșire numerică. Adresele IP și numerele de port vor fi afișate în format numeric. În mod implicit, programul va încerca să le afișeze ca nume de gazdă, nume de rețea sau servicii (ori de câte ori este cazul).
Expandează numerele. Afișează valoarea exactă a contoarelor de pachete și de octeți, în loc să afișeze doar numărul rotunjit în K (multipli de 1000), M (multipli de 1000K) sau G (multipli de 1000M). Această opțiune este relevantă numai pentru comanda -L.
Când listează regulile, adaugă numere de linie la începutul fiecărei reguli, care corespund poziției regulii respective în lanț.
Când se adaugă sau se inserează reguli într-un lanț, utilizează comanda pentru a încărca toate modulele necesare (obiective, extensii de potrivire etc.).

«iptables» utilizează fișierul /run/xtables.lock pentru a obține o blocare exclusivă la lansare.

Variabila de mediu XTABLES_LOCKFILE poate fi utilizată pentru a suprascrie valoarea implicită.

«iptables» poate utiliza module de potrivire a pachetelor și module țintă extinse. O listă a acestora este disponibilă în pagina de manual iptables-extensions(8).

Diferite mesaje de eroare sunt afișate la ieșirea de eroare standard. Codul de ieșire este 0 în cazul funcționării corecte. Erorile care par a fi cauzate de parametrii de linie de comandă nevalabili sau abuzivi determină un cod de ieșire 2. Erorile care indică o incompatibilitate între nucleu și spațiul utilizatorului determină un cod de ieșire 3. Erorile care indică o problemă de resurse, cum ar fi un blocaj ocupat, alocarea eșuată a memoriei sau mesaje de eroare din partea nucleului determină un cod de ieșire 4. În cele din urmă, alte erori determină un cod de ieșire 1.

Hibe? Ce sunt astea? ;-) Ei bine, poate doriți să aruncați o privire la https://bugzilla.netfilter.org/ iptables va ieși imediat cu un cod de eroare 111 dacă constată că a fost apelat ca un program setuid-to-root. «iptables» nu poate fi utilizat în siguranță în acest mod deoarece are încredere în bibliotecile partajate (potriviri „matches”, ținte „targets”) încărcate în timpul execuției, ruta de căutare poate fi definită cu ajutorul variabilelor de mediu.

Acest iptables este foarte asemănător cu «ipchains» de Rusty Russell. Principala diferență constă în faptul că lanțurile INPUT și OUTPUT sunt parcurse numai pentru pachetele care intră în gazda locală și, respectiv, provin din gazda locală. Prin urmare, fiecare pachet trece doar printr-unul dintre cele trei lanțuri (cu excepția traficului loopback, care implică ambele lanțuri INPUT și OUTPUT); anterior, un pachet redirecționat trecea prin toate cele trei.

O altă diferență principală este că -i se referă la interfața de intrare; -o se referă la interfața de ieșire, iar ambele sunt disponibile pentru pachetele care intră în lanțul FORWARD.

Diferitele formate de NAT au fost separate; iptables este un filtru pur de pachete atunci când se utilizează tabelul implicit „filter”, cu module de extensie opționale. Acest lucru ar trebui să evite o mare parte din confuzia legată de combinația de mascare IP și filtrare a pachetelor, observată anterior. Așadar, următoarele opțiuni sunt tratate diferit:

 -j MASQ
 -M -S
 -M -L
Există alte câteva modificări în «iptables».

iptables-apply(8), iptables-save(8), iptables-restore(8), iptables-extensions(8),

„Packet-filtering-HOWTO” detaliază utilizarea iptables pentru filtrarea pachetelor, „NAT-HOWTO” detaliază NAT, „netfilter-extensions-HOWTO” detaliază extensiile care nu se află în distribuția standard, iar „netfilter-hacking-HOWTO” detaliază componentele interne ale «netfilter».
A se vedea https://www.netfilter.org/.

Rusty Russell a scris inițial iptables, în urma unei consultări prealabile cu Michael Neuling.

Marc Boucher l-a făcut pe Rusty să renunțe la «ipnatctl» făcând lobby pentru un cadru generic de selectare a pachetelor în «iptables», apoi a scris tabelul mangle, potrivirea proprietarului, chestiile de marcare și a lucrat peste tot în „iptables” făcând lucruri interesante.

James Morris a scris ținta TOS, și potrivirea tos.

Jozsef Kadlecsik a scris ținta REJECT.

Harald Welte a scris ținta ULOG și NFQUEUE, noua bibliotecă „libiptc”, precum și potrivirile și țintele TTL, DSCP, ECN.

Echipa de bază Netfilter este: Jozsef Kadlecsik, Pablo Neira Ayuso, Eric Leblond, Florian Westphal și Arturo Borrero Gonzalez. Membrii emeriți ai echipei de bază sunt: Marc Boucher, Martin Josefsson, Yasuyuki Kozakai, James Morris, Harald Welte și Rusty Russell.

Pagina de manual scrisă inițial de Herve Eychenne <rv@wallfire.org>.

Această pagină de manual se aplică la versiunea iptables/ip6tables 1.8.10.

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

iptables 1.8.10