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ț
politică
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).
- -t, --table
tabel
- 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:
- filter:
- 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).
- nat:
- 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.
- mangle:
- 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ă).
- raw:
- 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).
- security:
- 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.
- -A, --append
lanț definiție-regulă
- 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.
- -C, --check
lanț definiție-regulă
- 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.
- -D, --delete
lanț definiție-regulă
- -D, --delete
lanț număr-regulă
- Ș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ă.
- -I, --insert
lanț [număr-regulă]
definiție-regulă
- 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ă.
- -R, --replace
lanț număr-regulă
definiție-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.
- -L, --list
[lanț]
- 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).
- -S, --list-rules
[lanț]
- 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ă).
- -F, --flush
[lanț]
- 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.
- -Z, --zero
[lanț [număr-regulă]]
- 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).
- -N, --new-chain
lanț
- Creează un nou lanț definit de utilizator cu numele dat. Nu
trebuie să existe deja o țintă cu acest nume.
- -X, --delete-chain
[lanț]
- Ș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.
- -P, --policy
lanț țintă
- Stabilește politica pentru lanțul încorporat
(nedefinit de utilizator) la ținta dată. Ținta
politicii trebuie să fie ACCEPT sau DROP.
- -E, --rename-chain
lanț-vechi lanț-nou
- 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.
- -h
- 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.
- -m, --match
potrivire
- 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.
- -j, --jump
ținta
- 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.
- -g, --goto
lanț
- 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».
- -c, --set-counters
pachete octeți
- 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:
- -v, --verbose
- 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.
- -V, --version
- Afișează versiunea programului și API-ul nucleului
utilizat.
- -w, --wait
[secunde]
- 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ă.
- -n, --numeric
- 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).
- -x, --exact
- 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.
- --line-numbers
- Când listează regulile, adaugă numere de linie la
începutul fiecărei reguli, care corespund poziției
regulii respective în lanț.
- --modprobe=comanda
- 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.11.
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.