iptables-extensions(8) iptables 1.8.10 iptables-extensions(8) NUME iptables-extensions - lista de extensii din distribuia iptables standard SINOPSIS ip6tables [-m nume [opiuni-modul...]] [-j nume-inta [opiuni-inta...] iptables [-m nume [opiuni-modul...]] [-j nume-inta [opiuni-inta...] EXTENSII DE POTRIVIRE iptables poate utiliza module extinse de potrivire a pachetelor cu opiunile -m sau --match, urmate de numele modulului de potrivire; dupa acestea, devin disponibile diverse opiuni suplimentare de linie de comanda, in funcie de modulul specific. Putei specifica mai multe module de potrivire extinsa intr-o singura linie i putei utiliza opiunile -h sau --help dupa ce modulul a fost specificat pentru a primi ajutor specific acelui modul. Modulele de potrivire extinsa sunt evaluate in ordinea in care sunt specificate in regula. Daca -p sau --protocol a fost specificata i daca i numai daca este intalnita o opiune necunoscuta, iptables va incerca sa incarce un modul de potrivire cu acelai nume ca protocolul, pentru a incerca sa faca opiunea disponibila. addrtype Acest modul potrivete pachetele in funcie de tipul de adresa. Tipurile de adresa sunt utilizate in cadrul stivei de reea a nucleului i clasifica adresele in diverse grupuri. Definiia exacta a acelui grup depinde de protocolul specific stratului trei. Sunt posibile urmatoarele tipuri de adrese: UNSPEC o adresa nespecificata (adica 0.0.0.0) UNICAST o adresa uni-difuzare ,,unicast" LOCAL o adresa locala BROADCAST o adresa de difuzare in toata reeaua ,,broadcast" ANYCAST un pachet ,,anycast" MULTICAST o adresa de difuzare multipla (catre mai multe maini) ,,multicast" BLACKHOLE o adresa de gaura neagra ,,blackhole" UNREACHABLE o adresa inaccesibila ,,unreachable" PROHIBIT o adresa interzisa ,,prohibited" THROW FIXME NAT FIXME XRESOLVE [!] --src-type tip Se potrivete daca adresa sursa este de tipul dat [!] --dst-type tip Se potrivete daca adresa de destinaie este de tipul dat --limit-iface-in Verificarea tipului de adresa poate fi limitata la interfaa de intrare a pachetului. Aceasta opiune este valabila numai in lanurile PREROUTING, INPUT i FORWARD. Ea nu poate fi specificata cu opiunea --limit-iface-out. --limit-iface-out Verificarea tipului de adresa poate fi limitata la interfaa pe care pleaca pachetul. Aceasta opiune este valabila numai in lanurile POSTROUTING, OUTPUT i FORWARD. Ea nu poate fi specificata cu opiunea --limit-iface-in. ah (specifica IPv6) Acest modul potrivete parametrii din antetul de autentificare al pachetelor IPsec. [!] --ahspi spi[:spi] Se potrivete cu SPI. [!] --ahlen lungimea Lungimea totala a acestui antet in octei. --ahres Se potrivete daca campul rezervat este completat cu zero. ah (specifica IPv4) Acest modul potrivete SPI-urile din antetul de autentificare al pachetelor IPsec. [!] --ahspi spi[:spi] bpf Potrivire cu ajutorul filtrului de soclu Linux ,,Linux Socket Filter". Ateapta o ruta catre un obiect eBPF sau un program cBPF in format zecimal. --object-pinned ruta Transmite o ruta catre un obiect eBPF fixat. Aplicaiile incarca programele eBPF in nucleu cu apelul de sistem bpf() i comanda BPF_PROG_LOAD i le pot fixa intr-un sistem de fiiere virtual cu BPF_OBJ_PIN. Pentru a utiliza un obiect fixat in iptables, montai sistemul de fiiere bpf utilizand mount -t bpf bpf ${BPF_MOUNT} apoi inserai filtrul in iptables dupa ruta: iptables -A OUTPUT -m bpf --object-pinned ${BPF_MOUNT}/{PINNED_PATH} -j ACCEPT --bytecode cod Transmite formatul codului de octei BPF generat de instrumentul nfbpf_compile. Formatul codului este similar cu rezultatul comenzii <>: o linie care stocheaza numarul de instruciuni, urmata de o linie pentru fiecare instruciune. Liniile de instruciuni urmeaza modelul ,,u16 u8 u8 u32" in notaie zecimala. Campurile codifica operaia, decalajul de salt daca este adevarat, decalajul de salt daca este fals i campul generic multiutilizare ,,K". Comentariile nu sunt acceptate. De exemplu, pentru a citi numai pachetele care corespund ,,ip proto 6", introducei urmatorul text, fara comentarii sau spaii albe: 4 # numarul de instruciuni 48 0 0 9 # incarca octetul ip->proto 21 0 1 6 # salt egal cu IPPROTO_TCP 6 0 0 1 # returneaza pasul (diferit de zero) 6 0 0 0 # returneaza eroarea (zero) Putei trece acest filtru la potrivirea bpf cu urmatoarea comanda: iptables -A OUTPUT -m bpf --bytecode '4,48 0 0 9,21 0 1 6,6 0 0 1,6 0 0 0' -j ACCEPT Sau, in schimb, putei apela instrumentul nfbpf_compile. iptables -A OUTPUT -m bpf --bytecode "`nfbpf_compile RAW 'ip proto 6'`" -j ACCEPT Sau utilizai <>. In acest caz, generai BPF vizand un dispozitiv cu acelai tip de legatura de date ca i potrivirea xtables. Iptables trece pachetele de la nivelul de reea in sus, fara nivelul mac. Selectai un dispozitiv cu tipul de legatura de date RAW, cum ar fi un dispozitiv tun: ip tuntap add tun0 mode tun ip link set tun0 up tcpdump -ddd -i tun0 ip proto 6 Consultai <> pentru o lista a tipurilor de legaturi/conexiuni de date cunoscute pentru un anumit dispozitiv. Este posibil sa dorii sa aflai mai multe despre BPF din pagina de manual bpf(4) a FreeBSD. cgroup [!] --path ruta Potrivete apartenena la cgroup2. Fiecare soclu este asociat cu cgroup-ul v2 al procesului de creare. Aceasta se potrivete cu pachetele care provin de la sau se indreapta catre toate soclurile din subierarhia rutei specificate. Ruta trebuie sa fie relativa la radacina ierarhiei cgroup2. [!] --cgroup id-clasa Se potrivete cu id-clasa al cgroup net_cls. id-clasa ,,classid" este marcajul stabilit prin controlorul cgroup net_cls. Aceasta opiune i opiunea ,,--path" nu pot fi utilizate impreuna. Exemplu: iptables -A OUTPUT -p tcp --sport 80 -m cgroup ! --path service/http-server -j DROP iptables -A OUTPUT -p tcp --sport 80 -m cgroup ! --cgroup 1 -j DROP IMPORTANT: atunci cand este utilizata in lanul INPUT, potrivirea cgroup are in prezent doar o funcionalitate limitata, ceea ce inseamna ca se va potrivi doar cu pachetele care sunt procesate pentru soclurile locale prin demultiplexarea timpurie a soclurilor. Prin urmare, utilizarea generala pe lanul INPUT nu este recomandata decat daca implicaiile sunt bine inelese. Disponibila incepand cu Linux 3.14. cluster Va permite sa implementai clustere de partajare a incarcarii porii de acces i a serverului ,,back-end" fara a avea nevoie de echilibratori de incarcare. Aceasta potrivire necesita ca toate nodurile sa vada aceleai pachete. Astfel, potrivirea clusterului decide daca acest nod trebuie sa gestioneze un pachet avand in vedere urmatoarele opiuni: --cluster-total-nodes numar Stabilete numarul total de noduri din cluster. [!] --cluster-local-node numar Stabilete ID-ul numarului nodului local. [!] --cluster-local-nodemask masca Stabilete masca ID a numarului nodului local. Putei utiliza aceasta opiune in loc de opiunea --cluster-local-node. --cluster-hash-seed valoare Stabilete valoarea seminei sumei de control (hash) a funciei Jenkins. Exemplu: iptables -A PREROUTING -t mangle -i eth1 -m cluster --cluster-total-nodes 2 --cluster-local-node 1 --cluster-hash-seed 0xdeadbeef -j MARK --set-mark 0xffff iptables -A PREROUTING -t mangle -i eth2 -m cluster --cluster-total-nodes 2 --cluster-local-node 1 --cluster-hash-seed 0xdeadbeef -j MARK --set-mark 0xffff iptables -A PREROUTING -t mangle -i eth1 -m mark ! --mark 0xffff -j DROP iptables -A PREROUTING -t mangle -i eth2 -m mark ! --mark 0xffff -j DROP i urmatoarele comenzi pentru a face ca toate nodurile sa vada aceleai pachete: ip maddr add 01:00:5e:00:01:01 dev eth1 ip maddr add 01:00:5e:00:01:02 dev eth2 arptables -A OUTPUT -o eth1 --h-length 6 -j mangle --mangle-mac-s 01:00:5e:00:01:01 arptables -A INPUT -i eth1 --h-length 6 --destination-mac 01:00:5e:00:01:01 -j mangle --mangle-mac-d 00:zz:yy:xx:5a:27 arptables -A OUTPUT -o eth2 --h-length 6 -j mangle --mangle-mac-s 01:00:5e:00:01:02 arptables -A INPUT -i eth2 --h-length 6 --destination-mac 01:00:5e:00:01:02 -j mangle --mangle-mac-d 00:zz:yy:xx:5a:27 NOTAIE: comenzile arptables de mai sus utilizeaza sintaxa dezvoltatorilor principali. Daca utilizai arptables-jf inclus in unele versiuni RedHat, CentOS i Fedora, va vei lovi de erori de sintaxa. Prin urmare, va trebui sa le adaptai la sintaxa arptables-jf pentru a le face sa funcioneze. In cazul conexiunilor TCP, facilitatea de preluare trebuie sa fie dezactivata pentru a evita marcarea ca valide a pachetelor TCP ACK care vin in direcia de raspuns. echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose comment Va permite sa adaugai comentarii (pana la 256 de caractere) la orice regula. --comment comentariu Exemplu: iptables -A INPUT -i eth1 -m comment --comment "my local LAN" connbytes Potrivete in funcie de numarul de octei sau pachete pe care o conexiune (sau unul dintre cele doua fluxuri care constituie conexiunea) le-a transferat pana in prezent sau in funcie de numarul mediu de octei pe pachet. Contoarele sunt pe 64 de bii i, prin urmare, nu este de ateptat sa se debordeze ;) Principala utilizare este detectarea descarcarilor de lunga durata i marcarea acestora pentru a fi programate folosind o banda de prioritate inferioara in controlul traficului. Octeii transferai pe conexiune pot fi vizualizai i prin <> i accesai prin <>. OBSERVAI ca pentru conexiunile care nu au informaii contabile, potrivirea va returna intotdeauna fals. Fanionul sysctl ,,net.netfilter.nf_conntrack_acct" controleaza daca conexiunile new vor fi numarate in octei/pachete. Fluxurile de conexiuni existente nu vor catiga/pierde o/structura de contabilizare atunci cand fanionul sysctl be este inversat. [!] --connbytes from[:to] potrivete pachetele de la o conexiune ale carei pachete/octei/marime medie a pachetelor este mai mare decat FROM i mai mica decat TO octei/pachete. daca TO este omis, se face doar verificarea FROM. ,,!" se utilizeaza pentru a potrivi pachetele care nu se incadreaza in interval. --connbytes-dir {original|reply|both} ce pachete trebuie luate in considerare --connbytes-mode {packets|bytes|avgpkt} daca se verifica cantitatea de pachete, numarul de octei transferai sau dimensiunea medie (in octei) a tuturor pachetelor primite pana in prezent. Reinei ca atunci cand ,,both" este utilizat impreuna cu ,,avgpkt", iar datele circula (in principal) intr-o singura direcie (de exemplu HTTP), dimensiunea medie a pachetelor va fi aproximativ jumatate din pachetele de date reale. Exemplu: iptables .. -m connbytes --connbytes 10000:100000 --connbytes-dir both --connbytes-mode bytes ... connlabel Modulul potrivete sau adauga connlabels la o conexiune. connlabels sunt similare cu connmarks, cu excepia faptului ca etichetele sunt bazate pe bii; adica toate etichetele pot fi ataate unui flux in acelai timp. In prezent sunt acceptate pana la 128 de etichete unice. [!] --label nume potrivete daca eticheta numele a fost definita pe o conexiune. In locul unui nume (care va fi tradus intr-un numar, a se vedea EXEMPLUL de mai jos), poate fi utilizat un numar. Utilizarea unui numar prevaleaza intotdeauna asupra connlabel.conf. --set daca eticheta nu a fost definita pe conexiune, definii-o. Reinei ca definirea unei etichete poate eua. Acest lucru se datoreaza faptului ca nucleul aloca zona de stocare a etichetei conntrack atunci cand este creata conexiunea i rezerva doar cantitatea de memorie necesara setului de reguli care exista in momentul crearii conexiunii. In acest caz, potrivirea va eua (sau va reui, in cazul in care opiunea --label a fost negata). Aceasta potrivire depinde de libnetfilter_conntrack 1.0.4 sau ulterior. Traducerea etichetelor se face prin intermediul fiierului de configurare /etc/xtables/connlabel.conf. Exemplu: 0 eth0-in 1 eth0-out 2 ppp-in 3 ppp-out 4 bulk-traffic 5 interactive connlimit Va permite sa restricionai numarul de conexiuni paralele la un server per adresa IP client (sau bloc de adrese client). --connlimit-upto n Se potrivete daca numarul de conexiuni existente este mai mic sau egal cu n. --connlimit-above n Se potrivete daca numarul de conexiuni existente este mai mare decat n. --connlimit-mask lungime-prefix Grupeaza gazdele folosind lungimea prefixului. Pentru IPv4, acesta trebuie sa fie un numar cuprins intre (inclusiv) 0 i 32. Pentru IPv6, intre 0 i 128. Daca nu este specificata, se utilizeaza lungimea maxima a prefixului pentru protocolul aplicabil. --connlimit-saddr Aplica limita asupra grupului sursa. Aceasta este valoarea implicita daca nu este specificata opiunea ,,--connlimit-daddr". --connlimit-daddr Aplica limita pe grupul de destinaie. Exemple: # permite 2 conexiuni telnet pentru fiecare gazda client iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT # se poate face i invers: iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT # limiteaza numarul de cereri HTTP paralele la 16 per reea sursa de clasa C (masca de reea de 24 de bii) iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT # limiteaza numarul de cereri HTTP paralele la 16 pentru conexiunea la reeaua locala (ipv6) ip6tables -p tcp --syn --dport 80 -s fe80::/64 -m connlimit --connlimit-above 16 --connlimit-mask 64 -j REJECT # limiteaza numarul de conexiuni la o anumita gazda: ip6tables -p tcp --syn --dport 49152:65535 -d 2001:db8::1 -m connlimit --connlimit-above 100 -j REJECT connmark Acest modul se potrivete cu campul de marcaj netfilter asociat unei conexiuni (care poate fi definit utilizand inta CONNMARK de mai jos). [!] --mark valoare[/masca] Potrivete pachetele din conexiuni cu valoarea de marcare data (daca este specificata o masca, aceasta este logic AND cu marca inainte de comparaie). conntrack Acest modul, atunci cand este combinat cu urmarirea conexiunii, permite accesul la starea de urmarire a conexiunii pentru acest pachet/conexiune. [!] --ctstate lista-stare lista-stare este o lista separata prin virgule a starilor conexiunii care trebuie sa corespunda. Starile posibile sunt enumerate mai jos. [!] --ctproto l4proto Protocolul Layer-4 care trebuie sa corespunda (dupa numar sau nume) [!] --ctorigsrc adresa[/masca] [!] --ctorigdst adresa[/masca] [!] --ctreplsrc adresa[/masca] [!] --ctrepldst adresa[/masca] Potrivire cu adresa sursa/destinaie originala/replica [!] --ctorigsrcport port[:port] [!] --ctorigdstport port[:port] [!] --ctreplsrcport port[:port] [!] --ctrepldstport port[:port] Potrivire in funcie de portul sursa/destinaie original/raspuns (TCP/UDP/etc.) sau de cheia GRE. Potrivirea in funcie de intervalele de porturi este acceptata numai in versiunile de nucleu mai mari de 2.6.38. [!] --ctstatus lista-stare lista-stare este o lista separata prin virgule a starilor conexiunii care trebuie sa corespunda. Starile posibile sunt enumerate mai jos. [!] --ctexpire timp[:timp] Potrivete durata de viaa ramasa in secunde cu o valoare data sau un interval de valori (inclusiv) --ctdir {ORIGINAL|REPLY} Potrivete pachetele care circula in direcia specificata. Daca acest fanion nu este specificat deloc, se potrivesc pachetele in ambele direcii. Stari pentru --ctstate: INVALID Pachetul nu este asociat cu nicio conexiune cunoscuta. NEW Pachetul a iniiat o conexiune noua sau a fost asociat cu o conexiune care nu a primit pachete in ambele direcii. ESTABLISHED Pachetul este asociat cu o conexiune care a vazut pachete in ambele direcii. RELATED Pachetul incepe o conexiune noua, dar este asociat cu o conexiune existenta, cum ar fi un transfer de date FTP sau o eroare ICMP. UNTRACKED Pachetul nu este urmarit deloc, ceea ce se intampla daca il anulai in mod explicit folosind ,,-j CT --notrack" in tabelul brut. SNAT O stare virtuala, care se potrivete daca adresa sursa iniiala difera de destinaia raspunsului. DNAT O stare virtuala, care se potrivete daca destinaia iniiala difera de sursa raspunsului. Stari pentru --ctstatus: NONE Niciuna dintre cele de mai jos. EXPECTED Aceasta este o conexiune ateptata (adica un asistent conntrack a configurat-o). SEEN_REPLY Conntrack a vazut pachete in ambele direcii. ASSURED Intrarea conntrack nu trebuie sa fie niciodata expirata inainte de termen. CONFIRMED Conexiunea este confirmata: pachetul de origine a parasit locaia. cpu [!] --cpu numar Potrivete cpu-ul care gestioneaza acest pachet. cpu-urile sunt numerotate de la 0 la NR_CPU-1 Poate fi utilizat in combinaie cu RPS (Remote Packet Steering) sau cu NIC-uri cu multiple cozi pentru a repartiza traficul de reea pe cozi diferite. Exemplu: iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 0 -j REDIRECT --to-ports 8080 iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 1 -j REDIRECT --to-ports 8081 Disponibila incepand cu Linux 2.6.36. dccp [!] --source-port,--sport port[:port] [!] --destination-port,--dport port[:port] [!] --dccp-types masca Potrivete atunci cand tipul de pachet DCCP este unul dintre ,,mask". ,,mask" este o lista de tipuri de pachete separate prin virgule. Tipurile de pachete sunt: REQUEST RESPONSE DATA ACK DATAACK CLOSEREQ CLOSE RESET SYNC SYNCACK INVALID. [!] --dccp-option numar Se potrivete daca este definita opiunea DCCP. devgroup Potrivete grupul de dispozitive al interfeei de intrare/ieire a unui pachet. [!] --src-group nume Potrivete grupul de dispozitive al dispozitivului de intrare [!] --dst-group nume Potrivete grupul de dispozitive al dispozitivului de ieire dscp Acest modul corespunde campului DSCP de 6 bii din campul TOS din antetul IP. DSCP a inlocuit TOS in cadrul IETF. [!] --dscp valoare Potrivire cu o valoare numerica (zecimala sau hexazecimala) [0-63]. [!] --dscp-class clasa Potrivete clasa DiffServ. Aceasta valoare poate fi oricare dintre clasele BE, EF, AFxx sau CSx. Aceasta va fi apoi convertita in valoarea sa numerica corespunzatoare. dst (specific IPv6) Acest modul corespunde parametrilor din antetul opiunilor de destinaie [!] --dst-len lungime Lungimea totala a acestui antet in octei. --dst-opts tip[:lungime][,tip[:lungime]...] tipul numeric al opiunii i lungimea datelor opiunii in octei. ecn Acest lucru va permite sa potrivii biii ECN din antetul IPv4/IPv6 i TCP. ECN este mecanismul de notificare explicita a congestiei, astfel cum este specificat in RFC3168 [!] --ecn-tcp-cwr Aceasta se potrivete daca bitul TCP ECN CWR (Congestion Window Received) este activat. [!] --ecn-tcp-ece Aceasta se potrivete daca bitul TCP ECN ECE (ECN Echo) este activat. [!] --ecn-ip-ect numar Aceasta se potrivete cu un anumit IPv4/IPv6 ECT (ECN-Capable Transport). Trebuie sa specificai un numar intre ,,0" i ,,3". esp Acest modul potrivete SPI-urile din antetul ESP al pachetelor IPsec. [!] --espspi spi[:spi] eui64 (specific IPv6) Acest modul potrivete partea EUI-64 a unei adrese IPv6 autoconfigurate stateless. Acesta compara EUI-64 derivat din adresa MAC sursa din cadrul Ethernet cu cei 64 de bii inferiori ai adresei sursa IPv6. Dar bitul ,,Universal/Local" nu este comparat. Acest modul nu se potrivete cu alte cadre de strat de legatura i este valabil numai in lanurile PREROUTING, INPUT i FORWARD. frag (specific IPv6) Acest modul potrivete parametrii din antetul Fragment. [!] --fragid id[:id] Potrivete identificarea data sau un interval al acesteia. [!] --fraglen lungime Aceasta opiune nu poate fi utilizata cu versiunea de nucleu 2.6.10 sau ulterioara. Lungimea antetului Fragment este statica i aceasta opiune nu are sens. --fragres Se potrivete daca campurile rezervate sunt completate cu zero. --fragfirst Se potrivete cu primul fragment. --fragmore Se potrivete daca exista mai multe fragmente. --fraglast Se potrivete daca acesta este ultimul fragment. hashlimit hashlimit utilizeaza ,,galei" hash pentru a exprima o potrivire de limitare a ratei (precum potrivirea limitei) pentru un grup de conexiuni utilizand o singura regula iptables. Gruparea se poate face pe grup de gazde (adresa sursa i/sau destinaie) i/sau pe port. Aceasta va ofera posibilitatea de a exprima ,,N pachete per masura-timp per grup" sau ,,N octei per secunda" (a se vedea mai jos pentru cateva exemple). Sunt necesare opiunile de limita hash (--hashlimit-upto, --hashlimit-above) i --hashlimit-name. --hashlimit-upto cantitate[/second|/minute|/hour|/day] Se potrivete daca rata este mai mica sau egala cu cantitatea/masura-timp. Aceasta este specificata fie ca numar, cu un sufix opional de masura-timp de timp (valoarea implicita este 3/ora), fie ca amountb/secunda (numar de octei pe secunda). --hashlimit-above cantitate[/second|/minute|/hour|/day] Se potrivete daca rata este mai mare de cantitate/masura-timp. --hashlimit-burst cantitate Numarul iniial maxim de pachete pentru potrivire: acest numar se reincarca cu unu de fiecare data cand limita specificata mai sus nu este atinsa, pana la acest numar; valoarea implicita este 5. Atunci cand se solicita potrivirea ratei pe baza de octei, aceasta opiune specifica cantitatea de octei care poate depai rata data. Aceasta opiune trebuie utilizata cu prudena - daca intrarea expira, valoarea burst este i ea reiniializata. --hashlimit-mode {srcip|srcport|dstip|dstport},... O lista separata prin virgule de obiecte care trebuie luate in considerare. Daca nu este furnizata opiunea ,,--hashlimit-mode", hashlimit acioneaza ca limita, dar la preul de a face curaenie in hash. --hashlimit-srcmask prefix Atunci cand se utilizeaza ,,--hashlimit-mode srcip", toate adresele sursa intalnite vor fi grupate in funcie de lungimea prefixului dat, iar subreeaua astfel creata va fi supusa hashlimit. prefix trebuie sa fie intre (inclusiv) 0 i 32. Reinei ca ,,--hashlimit-srcmask 0" face practic acelai lucru ca i nespecificarea <> pentru ,,--hashlimit-mode", dar este tehnic mai costisitor. --hashlimit-dstmask prefix Ca ,,--hashlimit-srcmask", dar pentru adresele de destinaie. --hashlimit-name foo Numele pentru intrarea /proc/net/ipt_hashlimit/foo. --hashlimit-htable-size galei Numarul de galei ale tabelului hash --hashlimit-htable-max intrari Numarul maxim de intrari in tabelul hash. --hashlimit-htable-expire msec Dupa cate milisecunde expira intrarile hash. --hashlimit-htable-gcinterval msec Cate milisecunde sunt intre intervalele de colectare a gunoiului. --hashlimit-rate-match Clasificarea fluxului in loc de limitarea ratei acestuia. Aceasta acioneaza ca o potrivire adevarat/fals daca rata este mai mare/mai mica decat un anumit numar --hashlimit-rate-interval sec Poate fi utilizata cu ,,--hashlimit-rate-match" pentru a specifica intervalul la care rata ar trebui sa fie eantionata Exemple: potrivire pe gazda sursa ,,1000 de pachete pe secunda pentru fiecare gazda din 192.168.0.0/16" => -s 192.168.0.0/16 --hashlimit-mode srcip --hashlimit-upto 1000/sec potrivire pe portul sursa ,,100 de pachete pe secunda pentru fiecare serviciu de la 192.168.1.1" => -s 192.168.1.1 --hashlimit-mode srcport --hashlimit-upto 100/sec potrivire pe subreea ,,10000 de pachete pe minut pentru fiecare subreea /28 (grupuri de 8 adrese) din 10.0.0.0/8" => -s 10.0.0.0/8 --hashlimit-mask 28 --hashlimit-upto 10000/min potrivire de octei pe secunda ,,fluxuri care depaesc 512koctei/s" => --hashlimit-mode srcip,dstip,srcport,dstport --hashlimit-above 512kb/s potrivire de octei pe secunda ,,gazde care depaesc 512koctei/s, dar permit pana la 1Megaoctei fara potrivire" --hashlimit-mode dstip --hashlimit-above 512kb/s --hashlimit-burst 1mb hbh (specific IPv6) Acest modul corespunde parametrilor din antetul de opiuni Hop-by-Hop [!] --hbh-len lungime Lungimea totala a acestui antet in octei. --hbh-opts tip[:lungime][,tip[:lungime]...] tipul numeric al opiunii i lungimea datelor opiunii in octei. helper Acest modul potrivete pachetele legate de un anumit conntrack-helper. [!] --helper ir Potrivete pachetele referitoare la conntrack-helper specificat. irul poate fi ,,ftp" pentru pachetele referitoare la o sesiune ftp pe portul implicit. Pentru alte porturi, adaugai -portnr la valoare, adica ,,ftp-2121". Aceleai reguli se aplica i pentru ceilali asisteni conntrack-helpers. hl (specific IPv6) Acest modul corespunde campului Hop Limit din antetul IPv6. [!] --hl-eq valoare Se potrivete daca limita Hop este egala cu valoare. --hl-lt valoare Se potrivete daca limita Hop este mai mica decat valoare. --hl-gt valoare Se potrivete daca limita Hop este mai mare decat valoare. icmp (specific IPv4) Aceasta extensie poate fi utilizata daca este specificat ,,--protocol icmp". Aceasta ofera urmatoarea opiune: [!] --icmp-type {tip[/cod]|nume-tip} Aceasta permite specificarea tipului ICMP, care poate fi un tip ICMP numeric, o pereche tip/cod sau una dintre denumirile tipului ICMP afiate de comanda iptables -p icmp -h icmp6 (specific IPv6) Aceasta extensie poate fi utilizata daca se specifica ,,---protocol ipv6-icmp" sau ,,---protocol icmpv6". Aceasta ofera urmatoarea opiune: [!] --icmpv6-type tip[/cod]|nume-tip Aceasta permite specificarea tipului ICMPv6, care poate fi un ICMPv6 numeric tip, tip i cod, sau una dintre denumirile tipului ICMPv6 afiate de comanda ip6tables -p ipv6-icmp -h iprange Aceasta se potrivete cu un anumit interval arbitrar de adrese IP. [!] --src-range de-la[-la] Potrivete IP-ul sursa in intervalul specificat. [!] --dst-range de-la[-la] Potrivete IP-ul destinaiei in intervalul specificat. ipv6header (specific IPv6) Acest modul corespunde antetelor de extensie IPv6 i/sau antetelor de nivel(strat) superior. --soft Potrivete daca pachetul include any din antetele specificate cu --header. [!] --header antet[,antet...] Potrivete pachetul care include EXACT toate antetele specificate. Antetele incapsulate cu antetul ESP sunt excluse din domeniu. Tipurile posibile de antet pot fi: hop|hop-by-hop Antetul de opiuni Hop-by-Hop dst Antetul de opiuni destinaie route Antetul de direcionare frag Antetul fragmentelor auth Antetul de autentificare esp Antetul incapsularii sarcinii de securitate (Encapsulating Security Payload) none Niciun antet Next(urmator) care sa corespunda cu 59 din campul antetul urmator ,,Next Header field" al antetului IPv6 sau orice antet de extensie IPv6 prot care se potrivete cu orice antet de protocol de nivel(strat) superior. De asemenea, sunt permise un nume de protocol din ,,/etc/protocols" i o valoare numerica. Numarul 255 este echivalent cu prot. ipvs Potrivete proprietaile conexiunii IPVS. [!] --ipvs pachetul aparine unei conexiuni IPVS Oricare dintre urmatoarele opiuni implica opiunea ,,--ipvs" (chiar i negata) [!] --vproto protocol Protocolul VIP care urmeaza sa se potriveasca; prin numar sau nume, de exemplu ,,tcp" [!] --vaddr adresa[/masca] Adresa VIP pentru potrivire [!] --vport port Portul VIP care trebuie sa corespunda; prin numar sau nume, de exemplu ,,http" --vdir {ORIGINAL|REPLY} direcia fluxului pachetului [!] --vmethod {GATE|IPIP|MASQ} Metoda de redirecionare IPVS utilizata [!] --vportctl port Portul VIP al conexiunii de control care trebuie sa corespunda, de exemplu 21 pentru FTP length Acest modul potrivete lungimea incarcaturii utile de nivel 3 (de exemplu, pachetul de nivel 4) a unui pachet cu o anumita valoare sau gama de valori. [!] --length lungimea[:lungimea] limit Acest modul se potrivete la o rata limitata utilizand un filtru de tip ,,token bucket". O regula care utilizeaza aceasta extensie se va potrivi pana cand aceasta limita este atinsa. Poate fi utilizat in combinaie cu inta LOG pentru a oferi o jurnalizare limitata, de exemplu. xt_limit nu accepta negarea - va trebui sa utilizai ,,-m hashlimit ! --hashlimit rate" in acest caz, omiand in acelai timp ,,--hashlimit-mode". --limit rata[/second|/minute|/hour|/day] Rata medie maxima de potrivire: specificata ca numar, cu un sufix opional ,,/second", ,,/minute", ,,/hour" sau ,,/day"; valoarea implicita este 3/hour. --limit-burst numar Numarul iniial maxim de pachete care se potrivesc: acest numar se reincarca cu unu de fiecare data cand limita specificata mai sus nu este atinsa, pana la acest numar; valoarea implicita este 5. mac [!] --mac-source adresa Potrivete adresa MAC sursa. Aceasta trebuie sa fie de forma XX:XX:XX:XX:XX:XX:XX. Reinei ca acest lucru are sens numai pentru pachetele care provin de la un dispozitiv Ethernet i intra in lanurile PREROUTING, FORWARD sau INPUT. mark Acest modul corespunde campului de marcaj netfilter asociat unui pachet (care poate fi definit utilizand inta MARK de mai jos). [!] --mark valoare[/masca] Potrivete pachetele cu valoarea marcajului fara semn data (daca este specificata o masca, aceasta este logic AND corelata cu masca inainte de comparaie). mh (specific IPv6) Aceasta extensie este incarcata daca se specifica ,,---protocol ipv6-mh" sau ,,---protocol mh". Aceasta ofera urmatoarea opiune: [!] --mh-type tip[:tip] Aceasta permite specificarea tipului de antet de mobilitate (MH), care poate fi un MH numeric tip, tip sau una dintre denumirile de tip MH afiate de comanda ip6tables -p mh -h multiport Acest modul se potrivete cu un set de porturi sursa sau destinaie. Pot fi specificate pana la 15 porturi. Un interval de porturi (port:port) conteaza ca doua porturi. Poate fi utilizat numai impreuna cu unul dintre urmatoarele protocoale: tcp, udp, udplite, dccp i sctp. [!] --source-ports,--sports port[,port|,port:port]... Se potrivete daca portul sursa este unul dintre porturile date. Indicatorul --sports este un alias convenabil pentru aceasta opiune. Mai multe porturi sau intervale de porturi sunt separate prin virgula, iar un interval de porturi este specificat prin doua puncte. Prin urmare, 53,1024:65535 ar corespunde porturilor 53 i tuturor porturilor de la 1024 la 65535. [!] --destination-ports,--dports port[,port|,port:port]... Se potrivete daca portul de destinaie este unul dintre porturile date. Indicatorul --dports este un alias convenabil pentru aceasta opiune. [!] --ports port[,port|,port:port]... Se potrivete daca porturile sursa sau destinaie sunt egale cu unul dintre porturile date. nfacct Potrivirea nfacct furnizeaza infrastructura de contabilizare extinsa pentru iptables. Trebuie sa utilizai aceasta potrivire impreuna cu utilitatea autonoma din spaiul utilizatorului nfacct(8) Singura opiune disponibila pentru aceasta potrivire este urmatoarea: --nfacct-name nume Aceasta va permite sa specificai numele obiectului existent care va fi utilizat pentru contabilizarea traficului care corespunde acestui set de reguli. Pentru a utiliza aceasta extensie, trebuie sa creai un obiect contabil: nfacct add http-traffic Apoi, trebuie sa il ataai la obiectul contabil prin iptables: iptables -I INPUT -p tcp --sport 80 -m nfacct --nfacct-name http-traffic iptables -I OUTPUT -p tcp --dport 80 -m nfacct --nfacct-name http-traffic Apoi, putei verifica cantitatea de trafic care corespunde regulilor: nfacct get http-traffic { pkts = 00000000000000000156, bytes = 00000000000000151786 } = http-traffic; Putei obine nfacct(8) de la https://www.netfilter.org sau, alternativ, din depozitul git.netfilter.org. osf Modulul osf realizeaza amprentarea pasiva a sistemului de operare. Acest modul compara anumite date (dimensiunea ferestrei, MSS, opiunile i ordinea lor, TTL, DF i altele) din pachetele cu bitul SYN activat. [!] --genre ir Potrivete un gen de sistem de operare folosind o amprenta pasiva. --ttl nivel Efectueaza verificari TTL suplimentare asupra pachetului pentru a determina sistemul de operare. nivel poate fi una dintre urmatoarele valori: o 0 - Comparaie TTL reala intre adresa IP i amprenta digitala. Aceasta funcioneaza in general pentru LAN-uri. o 1 - Verifica daca TTL-ul antetului IP este mai mic decat cel al amprentei. Funcioneaza pentru adresele ce pot fi direcionate la nivel global. o 2 - Nu compara deloc TTL--ul. --log nivel Inregistreaza genurile determinate in dmesg chiar daca acestea nu corespund cu cel dorit. nivel poate fi una dintre urmatoarele valori: o 0 - Inregistreaza toate semnaturile care corespund sau necunoscute o 1 - Inregistreaza numai prima o 2 - Inregistreaza toate semnaturile cunoscute care corespund Este posibil sa gasii aa ceva in syslog: Windows [2000:SP3:Windows XP Pro SP1, 2000 SP3]: 11.22.33.55:4024 -> 11.22.33.44:139 hops=3 Linux [2.5-2.6:] : 1.2.3.4:42624 -> 1.2.3.5:22 hops=4 Amprentele de SO pot fi incarcate cu ajutorul programului nfnl_osf. Pentru a incarca amprente digitale dintr-un fiier, utilizai: nfnl_osf -f /usr/share/xtables/pf.os Pentru a le elimina din nou, nfnl_osf -f /usr/share/xtables/pf.os -d Baza de date privind amprentele digitale poate fi descarcata de la http://www.openbsd.org/cgi-bin/cvsweb/src/etc/pf.os . owner Acest modul incearca sa corespunda diferitelor caracteristici ale creatorului pachetului, pentru pachetele generate local. Aceasta potrivire este valabila numai in lanurile OUTPUT i POSTROUTING. Pachetele transmise nu au niciun soclu asociat cu ele. Pachetele provenite de la firele de execuie ale nucleului au un soclu, dar de obicei nu au proprietar. [!] --uid-owner nume-utilizator [!] --uid-owner id-utilizator[-id-utilizator] Verifica daca structura de fiiere a soclului de pachete (daca are una) este deinuta de utilizatorul dat. De asemenea, putei specifica un UID numeric sau un interval UID. [!] --gid-owner nume-grup [!] --gid-owner id-grup[-id-gru] Verifica daca structura de fiiere a soclului de pachete este deinuta de grupul dat. De asemenea, putei specifica un GID numeric sau un interval GID. --suppl-groups Face ca grupul sau grupurile specificate cu --gid-owner sa fie verificate i in grupurile suplimentare ale unui proces. [!] --socket-exists Verifica daca pachetul este asociat cu un soclu. physdev Acest modul se potrivete cu dispozitivele de intrare i ieire ale portului de punte aservite unui dispozitiv de punte. Acest modul face parte din infrastructura care permite un paravan de protecie IP cu punte transparenta i este util numai pentru versiunile de nucleu mai mari de versiunea 2.5.44. [!] --physdev-in nume Numele unui port de punte prin care este primit un pachet (numai pentru pachetele care intra in lanurile INPUT, FORWARD i PREROUTING). Daca numele interfeei se termina cu un ,,+", atunci se va potrivi orice interfaa care incepe cu acest nume. Daca pachetul nu a ajuns printr-un dispozitiv punte, acest pachet nu va corespunde acestei opiuni, cu excepia cazului in care se utilizeaza ,,!". [!] --physdev-out nume Numele unui port de punte prin care va fi trimis un pachet (pentru pachetele de punte care intra in lanurile FORWARD i POSTROUTING). Daca numele interfeei se termina cu un ,,+", atunci se va potrivi orice interfaa care incepe cu acest nume. [!] --physdev-is-in Se potrivete daca pachetul a intrat printr-o interfaa punte. [!] --physdev-is-out Se potrivete daca pachetul va pleca printr-o interfaa punte. [!] --physdev-is-bridged Verifica daca pachetul este conectat prin punte i, prin urmare, nu este direcionat. Acest lucru este util numai in lanurile FORWARD i POSTROUTING. pkttype Acest modul corespunde tipului de pachet din stratul de legatura(conexiune). [!] --pkt-type {unicast|broadcast|multicast} policy Acest modul se potrivete cu politica utilizata de IPsec pentru gestionarea unui pachet. --dir {in|out} Utilizat pentru a selecta daca sa se potriveasca politica utilizata pentru decapsulare sau politica care va fi utilizata pentru incapsulare. in este valabil in lanurile PREROUTING, INPUT i FORWARD, out este valabil in lanurile POSTROUTING, OUTPUT i FORWARD. --pol {none|ipsec} Verifica daca pachetul este supus procesarii IPsec. --pol none nu poate fi combinata cu --strict. --strict Selecteaza daca sa se potriveasca cu politica exacta sau sa se potriveasca daca orice regula a politicii se potrivete cu politica data. Pentru fiecare element de politica care urmeaza sa fie descris, se pot utiliza una sau mai multe dintre urmatoarele opiuni. Atunci cand --strict este in vigoare, trebuie utilizata cel puin una pentru fiecare element. [!] --reqid id Se potrivete cu reqid-ul regulii de politica. Reqid poate fi specificat cu setkey(8) folosind unique:id ca nivel. [!] --spi spi Se potrivete cu SPI al SA. [!] --proto {ah|esp|ipcomp} Potrivete protocolul de incapsulare. [!] --mode {tunnel|transport} Potrivete modul de incapsulare. [!] --tunnel-src adresa[/masca] Se potrivete cu adresa punctului final sursa al unui SA in mod tunel. Valabila numai cu --mode tunnel. [!] --tunnel-dst adresa[/masca] Se potrivete cu adresa punctului final de destinaie al unui SA in mod tunel. Valabila numai cu --mode tunnel. --next Incepe urmatorul element din specificaia politicii. Poate fi utilizata numai cu --strict. quota Implementeaza cotele de reea prin decrementarea unui contor de octei cu fiecare pachet. Condiia se potrivete pana cand contorul de octei ajunge la zero. Comportamentul este inversat in cazul negaiei (de exemplu, condiia nu corespunde pana cand contorul de octei ajunge la zero). [!] --quota octei Cota exprimata in octei. rateest Estimatorul de rata se poate potrivi cu ratele estimate colectate de obiectivul RATEEST. Acesta accepta potrivirea pe baza valorilor absolute bps/pps, compararea a doua estimatoare de rata i potrivirea pe baza diferenei dintre doua estimatoare de rata. Pentru o mai buna inelegere a opiunilor disponibile, acestea sunt toate combinaiile posibile: o rateest operator rateest-bps o rateest operator rateest-pps o (rateest minus rateest-bps1) operator rateest-bps2 o (rateest minus rateest-pps1) operator rateest-pps2 o rateest1 operator rateest2 rateest-bps(fara rata!) o rateest1 operator rateest2 rateest-pps(fara rata!) o (rateest1 minus rateest-bps1) operator (rateest2 minus rateest-bps2) o (rateest1 minus rateest-pps1) operator (rateest2 minus rateest-pps2) --rateest-delta Pentru fiecare estimator (in mod absolut sau relativ), se calculeaza diferena dintre debitul determinat de estimator i valoarea statica aleasa cu opiunile BPS/PPS. Daca debitul este mai mare decat BPS/PPS specificat, se va utiliza 0 in loc de o valoare negativa. Cu alte cuvinte, se utilizeaza ,,max(0, rateest#_rate - rateest#_bps)". [!] --rateest-lt Se potrivete daca rata este mai mica decat rata/estimatorul dat. [!] --rateest-gt Se potrivete daca rata este mai mare decat rata/estimatorul dat. [!] --rateest-eq Se potrivete daca rata este egala cu rata/estimatorul dat. In aa-numitul ,,mod absolut", se utilizeaza un singur estimator de rata i se compara cu o valoare statica, in timp ce in ,,modul relativ", doi estimatori de rata sunt comparai unul cu celalalt. --rateest nume Numele estimatorului cu o rata pentru modul absolut. --rateest1 nume --rateest2 nume Numele celor doi estimatori de rata pentru modul relativ. --rateest-bps [valoare] --rateest-pps [valoare] --rateest-bps1 [valoare] --rateest-bps2 [valoare] --rateest-pps1 [valoare] --rateest-pps2 [valoare] Compara estimatorul (estimatorii) pe octei sau pachete pe secunda i compara cu valoarea aleasa. Consultai lista de puncte de mai sus pentru a afla care opiune trebuie utilizata in fiecare caz. Se poate utiliza un sufix de unitate - cele disponibile sunt: bit, [kmgt]bit, [KMGT]ibit, Bps, [KMGT]Bps, [KMGT]iBps. Exemplu: Acesta este modul in care pot fi direcionate conexiunile de date de ieire de la un server FTP pe doua linii, in funcie de laimea de banda disponibila in momentul in care a fost iniiata conexiunea de date: # Estimarea ratelor de ieire iptables -t mangle -A POSTROUTING -o eth0 -j RATEEST --rateest-name eth0 --rateest-interval 250ms --rateest-ewma 0.5s iptables -t mangle -A POSTROUTING -o ppp0 -j RATEEST --rateest-name ppp0 --rateest-interval 250ms --rateest-ewma 0.5s # Marcare bazata pe laimea de banda disponibila iptables -t mangle -A balance -m conntrack --ctstate NEW -m helper --helper ftp -m rateest --rateest-delta --rateest1 eth0 --rateest-bps1 2.5mbit --rateest-gt --rateest2 ppp0 --rateest-bps2 2mbit -j CONNMARK --set-mark 1 iptables -t mangle -A balance -m conntrack --ctstate NEW -m helper --helper ftp -m rateest --rateest-delta --rateest1 ppp0 --rateest-bps1 2mbit --rateest-gt --rateest2 eth0 --rateest-bps2 2.5mbit -j CONNMARK --set-mark 2 iptables -t mangle -A balance -j CONNMARK --restore-mark realm (specific IPv4) Aceasta corespunde domeniului de direcionare. Domeniile de direcionare sunt utilizate in configuraii de direcionare complexe care implica protocoale de direcionare dinamice precum BGP. [!] --realm valoare[/masca] Potrivete un numar de domeniu dat (i, opional, o masca). Daca nu este un numar, valoarea poate fi un domeniu numit din ,,/etc/iproute2/rt_realms" (masca nu poate fi utilizata in acest caz). Atat valoarea, cat i masca sunt numere intregi fara semn de patru octei i pot fi specificate in zecimal, hexazecimal (prin prefixarea cu "0x") sau octal (daca se indica un zero in faa). recent Va permite sa creai in mod dinamic o lista de adrese IP i apoi sa le comparai cu lista respectiva in mai multe moduri diferite. De exemplu, putei crea o lista de ,,raufacatori" cu persoanele care incearca sa se conecteze la portul 139 din paravanul dvs de protecie i apoi sa ARUNCAI toate pachetele viitoare de la acestea fara a le lua in considerare. --set, --rcheck, --update i --remove se exclud reciproc. --name nume Specifica lista de utilizat pentru comenzi. Daca nu este specificat niciun nume, atunci se va utiliza DEFAULT. [!] --set Aceasta va adauga adresa sursa a pachetului in lista. Daca adresa sursa se afla deja in lista, aceasta va actualiza intrarea existenta. Aceasta va returna intotdeauna un raspuns de succes (sau de eec daca este specificat !). --rsource Potrivete/salveaza adresa sursa a fiecarui pachet din tabelul listei recente. Aceasta este valoarea implicita. --rdest Potrivete/salveaza adresa de destinaie a fiecarui pachet din tabelul listei recente. --mask masca-reea Masca de reea care va fi aplicata acestei liste recente. [!] --rcheck Verifica daca adresa sursa a pachetului se afla in prezent in lista. [!] --update La fel ca --rcheck, cu excepia faptului ca va actualiza marca temporala ,,last seen" (vazut ultima data) daca se potrivete. [!] --remove Verifica daca adresa sursa a pachetului se afla in prezent in lista i, daca da, adresa respectiva va fi eliminata din lista, iar regula va returna ,,true". Daca adresa nu este gasita, se returneaza ,,false". --seconds secunde Aceasta opiune trebuie utilizata impreuna cu una dintre opiunile --rcheck sau --update. Atunci cand este utilizata, aceasta opiune va restrange potrivirea pentru a avea loc numai atunci cand adresa se afla in lista i a fost vazuta in ultimul numar dat de secunde. --reap Aceasta opiune poate fi utilizata numai impreuna cu --seconds. Atunci cand este utilizata, aceasta va determina purjarea intrarilor mai vechi decat ultimul numar de secunde dat. --hitcount hits Aceasta opiune trebuie utilizata impreuna cu una dintre opiunile --rcheck sau --update. Atunci cand este utilizata, aceasta opiune va restrange potrivirea pentru a avea loc numai atunci cand adresa este in lista i au fost primite pachete mai mari sau egale cu valoarea data. Aceasta opiune poate fi utilizata impreuna cu --seconds pentru a crea o potrivire i mai ingusta care necesita un anumit numar de rezultate intr-un anumit interval de timp. Valoarea maxima pentru parametrul hitcount este data de parametrul ,,ip_pkt_list_tot" al modulului nucleului, xt_recent. Depairea acestei valori in linia de comanda va duce la respingerea regulii. --rttl Aceasta opiune poate fi utilizata numai impreuna cu una dintre opiunile --rcheck sau --update. Atunci cand este utilizata, aceasta opiune va restrange potrivirea pentru a avea loc numai atunci cand adresa se afla in lista i TTL-ul pachetului curent corespunde cu cel al pachetului care a corespuns reguii --set. Acest lucru poate fi util daca avei probleme cu persoane care ii falsifica adresa sursa pentru a va face DoS prin intermediul acestui modul, interzicand accesul altora la situl dumneavoastra prin trimiterea de pachete false catre dumneavoastra. Exemple: iptables -A FORWARD -m recent --name badguy --rcheck --seconds 60 -j DROP iptables -A FORWARD -p tcp -i eth0 --dport 139 -m recent --name badguy --set -j DROP /proc/net/xt_recent/* sunt listele actuale de adrese i informaii despre fiecare intrare din fiecare lista. Fiecare fiier din /proc/net/xt_recent/ poate fi citit pentru a vedea lista curenta sau scris folosind urmatoarele comenzi pentru a modifica lista: echo +addr >/proc/net/xt_recent/DEFAULT pentru a adauga adresa la lista DEFAULT echo -addr >/proc/net/xt_recent/DEFAULT pentru a elimina adresa din lista DEFAULT echo / >/proc/net/xt_recent/DEFAULT pentru a goli lista DEFAULT (a elimina toate intrarile). Modulul in sine accepta parametri, cu valorile implicite afiate: ip_list_tot=100 Numarul de adrese memorate per tabel. ip_pkt_list_tot=20 Numarul de pachete per adresa memorat. ip_list_hash_size=0 Marimea tabelului Hash. 0 inseamna calcularea acesteia pe baza ip_list_tot, implicit: 512. ip_list_perms=0644 Permisiuni pentru fiierele ,,/proc/net/xt_recent/*". ip_list_uid=0 UID numeric pentru proprietarul fiierelor ,,/proc/net/xt_recent/*". ip_list_gid=0 GID numeric pentru proprietarul fiierelor ,,/proc/net/xt_recent/*". rpfilter Efectueaza un test de filtrare a rutei inverse pe un pachet. Daca un raspuns la pachet ar fi trimis prin aceeai interfaa pe care a sosit pachetul, pachetul va corespunde. Reinei ca, spre deosebire de rp_filter din nucleu, pachetele protejate prin IPSec nu sunt tratate in mod special. Combinai aceasta potrivire cu potrivirea de politica daca dorii acest lucru. De asemenea, pachetele care sosesc prin interfaa ,,loopback" sunt intotdeauna permise. Aceasta potrivire poate fi utilizata numai in lanul PREROUTING din tabelul ,,raw" sau ,,mangle". --loose Utilizat pentru a specifica faptul ca testul filtrului de cale inversa trebuie sa corespunda chiar daca dispozitivul de ieire selectat nu este cel ateptat. --validmark De asemenea, utilizeaza valoarea ,,nfmark" a pachetelor atunci cand efectueaza cautarea rutei pe calea inversa. --accept-local Acest lucru va permite pachetelor care sosesc din reea cu o adresa sursa care este, de asemenea, atribuita calculatorului local. --invert Aceasta va inversa sensul potrivirii. In loc sa se potriveasca pachetele care au trecut testul filtrului de cale inversa, se potrivesc cele care nu l-au trecut. Exemplu de inregistrare i eliminare a pachetelor care nu trec testul filtrului de cale inversa: iptables -t raw -N RPFILTER iptables -t raw -A RPFILTER -m rpfilter -j RETURN iptables -t raw -A RPFILTER -m limit --limit 10/minute -j NFLOG --nflog-prefix "rpfilter drop" iptables -t raw -A RPFILTER -j DROP iptables -t raw -A PREROUTING -j RPFILTER Exemplu pentru a respinge pachetele euate, fara inregistrare in jurnal: iptables -t raw -A RPFILTER -m rpfilter --invert -j DROP rt (IPv6-specific) Potrivire pe antetul de direcionare IPv6 [!] --rt-type tip Potrivete tipul (numeric). [!] --rt-segsleft numar[:numar] Potrivete campul ,,segmente din stanga" (interval). [!] --rt-len lungime Potrivete lungimea acestui antet. --rt-0-res Potrivete i campul rezervat (type=0) --rt-0-addrs adresa[,adresa...] Potrivete adresele de tip 0 ,,type=0" (lista). --rt-0-not-strict Lista de adrese de tip 0 ,,type=0" nu este o lista stricta. sctp Acest modul se potrivete cu antetele ,,Stream Control Transmission Protocol" (protocol de transmisie cu control al fluxului). [!] --source-port,--sport port[:port] [!] --destination-port,--dport port[:port] [!] --chunk-types {all|any|only} tip-bucata[:fanioane] [...] Literele fanionului in majuscule indica faptul ca fanionul trebuie sa corespunda daca este activat, in minuscule indica faptul ca trebuie sa corespunda daca nu este activat. Tipuri de potrivire: all Se potrivete daca toate tipurile de bucai date sunt prezente i fanioanele corespund. any Se potrivete daca oricare dintre tipurile de bucai date este prezent cu fanioanele date. only Se potrivete daca numai tipurile de bucai date sunt prezente cu fanioanele date i niciunul nu lipsete. Tipuri de bucai: DATA INIT INIT_ACK SACK HEARTBEAT HEARTBEAT_ACK ABORT SHUTDOWN SHUTDOWN_ACK ERROR COOKIE_ECHO COOKIE_ACK ECN_ECNE ECN_CWR SHUTDOWN_COMPLETE I_DATA RE_CONFIG PAD ASCONF ASCONF_ACK FORWARD_TSN I_FORWARD_TSN tip de bucata, fanioane disponibile DATA I U B E i u b e I_DATA I U B E i u b e ABORT T t SHUTDOWN_COMPLETE T t (minuscule inseamna ca steagul trebuie sa fie ,,dezactivat", majuscule inseamna ,,activat") Exemple: iptables -A INPUT -p sctp --dport 80 -j DROP iptables -A INPUT -p sctp --chunk-types any DATA,INIT -j DROP iptables -A INPUT -p sctp --chunk-types any DATA:Be -j ACCEPT set Acest modul corespunde seturilor IP care pot fi definite prin ipset(8). [!] --match-set nume-set fanion[,fanion]... unde fanioanele sunt lista de specificaii src i/sau dst separate prin virgule i nu pot fi mai mult de ase. Prin urmare, comanda iptables -A FORWARD -m set --match-set test src,dst va potrivi pachetele pentru care (daca tipul de set este ipportmap) perechea adresa sursa i port destinaie poate fi gasita in setul specificat. Daca tipul setului specificat este de dimensiune unica (de exemplu, ipmap), atunci comanda va potrivi pachetele pentru care adresa sursa poate fi gasita in setul specificat. --return-nomatch Daca este specificata opiunea --return-nomatch i tipul de set accepta fanionul nomatch, atunci potrivirea este inversata: o potrivire cu un element marcat cu nomatch returneaza true, in timp ce o potrivire cu un element simplu returneaza false. ! --update-counters Daca opiunea --update-counters este negata, atunci contoarele de pachete i de octei ale elementului corespunzator din set nu vor fi actualizate. In mod implicit, contoarele de pachete i de octei sunt actualizate. ! --update-subcounters Daca opiunea --update-subcounters este negata, atunci contoarele de pachete i de octei ale elementului corespunzator din setul membru al unei liste de tip set nu vor fi actualizate. In mod implicit, contoarele de pachete i de octei sunt actualizate. [!] --packets-eq valoare Daca pachetul se potrivete cu un element din set, se potrivete numai daca i contorul de pachete al elementului se potrivete cu valoarea data. --packets-lt valoare Daca pachetul se potrivete cu un element din set, se potrivete numai daca i contorul de pachete al elementului este mai mic decat valoarea data. --packets-gt valoare Daca pachetul se potrivete cu un element din set, se potrivete numai daca contorul de pachete al elementului este mai mare decat valoarea data. [!] --bytes-eq valoare Daca pachetul se potrivete cu un element din set, se potrivete numai daca i contorul de octei al elementului se potrivete cu valoarea data. --bytes-lt valoare Daca pachetul se potrivete cu un element din set, se potrivete numai daca contorul de octei al elementului este mai mic decat valoarea data. --bytes-gt valoare Daca pachetul se potrivete cu un element din set, se potrivete numai daca contorul de octei al elementului este mai mare decat valoarea data. Opiunile i fanioanele aferente contoarelor de pachete i de octei sunt ignorate atunci cand setul a fost definit fara suport pentru contoare. Opiunea --match-set poate fi inlocuita cu --set daca aceasta nu intra in conflict cu o opiune a altor extensii. Utilizarea lui -m set necesita ca suportul pentru nucleu ipset sa fie furnizat, ceea ce, pentru nucleele standard, este cazul incepand cu Linux 2.6.39. soclu Se potrivete daca un soclu TCP/UDP deschis poate fi gasit prin cautarea unui soclu pe pachet. Se potrivete in cazul in care exista un soclu de ascultare stabilit sau conectat in mod diferit de zero (eventual cu o adresa non-locala). Cautarea se efectueaza utilizand tuplele packet ale pachetelor TCP/UDP sau antetul TCP/UDP original embedded dintr-un pachet de eroare ICMP/ICPMv6. --transparent Ignora soclurile netransparente. --nowildcard Nu ignora soclurile legate la adresa ,,oricare". In mod implicit, potrivirea soclurilor nu va accepta ascultatori legai de zero, deoarece astfel serviciile locale ar putea intercepta traficul care altfel ar fi redirecionat. Prin urmare, aceasta opiune are implicaii de securitate atunci cand este utilizata pentru a potrivi traficul redirecionat pentru a redireciona astfel de pachete catre maina locala cu politica de direcionare. Atunci cand se utilizeaza potrivirea soclului pentru a implementa proxy-uri complet transparente legate la adrese non-locale, se recomanda utilizarea opiunii ,,--transparent". Exemplu (presupunand ca pachetele cu marcajul 1 sunt livrate local): -t mangle -A PREROUTING -m socket --transparent -j MARK --set-mark 1 --restore-skmark Stabilete marca pachetului la marca soclului corespunzator. Poate fi combinata cu opiunile --transparent i --nowildcard pentru a restriciona soclurile care trebuie sa corespunda atunci cand se restabilete marca pachetului. Exemplu: O aplicaie deschide 2 socluri transparente (IP_TRANSPARENT) i le marcheaza cu opiunea de soclu SO_MARK. Putem filtra pachetele corespunzatoare: -t mangle -I PREROUTING -m socket --transparent --restore-skmark -j action -t mangle -A action -m mark --mark 10 -j action2 -t mangle -A action -m mark --mark 11 -j action3 state Extensia ,,state" este un subset al modulului ,,conntrack". ,,state" permite accesul la starea de urmarire a conexiunii pentru acest pachet. [!] --state starea Unde ,,state" este o lista separata prin virgule a starilor conexiunii care trebuie sa corespunda. Numai un subset de stari inelese de ,,conntrack" sunt recunoscute: INVALID, ESTABLISHED, NEW, RELATED sau UNTRACKED. Pentru descrierea acestora, consultai rubrica ,,conntrack" din aceasta pagina de manual. statistic Acest modul potrivete pachetele pe baza unor condiii statistice. Accepta doua moduri distincte stabilite cu opiunea --mode. Opiuni acceptate: --mode mod Stabilete modul de potrivire al regulii de potrivire, modurile acceptate sunt random i nth. [!] --probability p Definete probabilitatea ca un pachet sa fie comparat aleatoriu. Funcioneaza numai cu modul random. p trebuie sa fie intre 0,0 i 1,0. Gradul de finee acceptat este in incremente de 1/2147483648. [!] --every n Potrivete un pachet la fiecare al n-lea pachet. Funcioneaza numai cu modul nth (a se vedea i opiunea --packet). --packet p Stabilete valoarea iniiala a contorului (0 <= p <= n-1, implicit 0) pentru modul nth. string Acest modul potrivete un ir dat folosind o strategie de potrivire a modelelor. Necesita un nucleu linux >= 2.6.14. --algo {bm|kmp} Selecteaza strategia de potrivire a modelelor. (bm = Boyer-Moore, kmp = Knuth-Pratt-Morris) --from poziia Stabilete poziia de la care incepe cautarea oricarei potriviri. Daca nu este specificata, valoarea implicita este 0. --to poziia Stabilete poziia pana la care trebuie scanat. Adica, octetul poziia-1 (numarand de la 0) este ultimul care este scanat. Daca nu este specificata, valoarea implicita este dimensiunea pachetului. [!] --string model Potrivete modelul dat. [!] --hex-string model Potrivete modelul dat. --icase Nu face distincie intre majuscule i minuscule atunci cand cauta. Exemple: # Modelul de ir poate fi utilizat pentru caractere simple de text. iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string 'GET /index.html' -j LOG # Modelul de ir hexazecimal poate fi utilizat pentru caractere neimprimabile, precum |0D 0A| sau |0D0A|. iptables -p udp --dport 53 -m string --algo bm --from 40 --to 57 --hex-string '|03|www|09|netfilter|03|org|00|' Nota: Deoarece Boyer-Moore (BM) efectueaza cautari de potrivire de la dreapta la stanga, iar nucleul poate stoca un pachet in mai multe blocuri discontinue, este posibil ca o potrivire sa fie raspandita pe mai multe blocuri, caz in care acest algoritm nu o va gasi. Daca dorii sa va asigurai ca un astfel de lucru nu se va intampla niciodata, utilizai in schimb algoritmul Knuth-Pratt-Morris (KMP). In concluzie, alegei algoritmul adecvat de cautare a irurilor de caractere in funcie de cazul dvs. de utilizare. De exemplu, daca utilizai modulul pentru filtrare, NIDS sau orice alt scop similar axat pe securitate, atunci alegei KMP. Pe de alta parte, daca va pasa cu adevarat de performana - de exemplu, clasificai pachetele pentru a aplica politici de calitate a serviciului (QoS) - i nu va deranjeaza sa pierdei posibile potriviri raspandite pe mai multe fragmente, atunci alegei BM. tcp Aceste extensii pot fi utilizate daca este specificata opiunea ,,--protocol tcp". Acesta ofera urmatoarele opiuni: [!] --source-port,--sport port[:port] Specificarea portului sursa sau a intervalului de porturi. Acesta poate fi fie un nume de serviciu, fie un numar de port. De asemenea, poate fi specificat un interval inclusiv, folosind formatul primul:ultimul. Daca primul port este omis, se presupune ,,0"; daca ultimul este omis, se presupune ,,65535". Opiunea --sport este un alias convenabil pentru aceasta opiune. [!] --destination-port,--dport port[:port] Specificarea portului de destinaie sau a intervalului de porturi. Opiunea --dport este un alias convenabil pentru aceasta opiune. [!] --tcp-flags masca comp Se potrivete atunci cand fanioanele TCP sunt cele specificate. Primul argument masca reprezinta fanioanele pe care trebuie sa le examinam, scrise ca o lista separata prin virgule, iar al doilea argument comp este o lista separata prin virgule de fanioane care trebuie sa fie activate. Fanioanele sunt: SYN ACK FIN RST URG PSH ALL NONE. Prin urmare, comanda iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN se va potrivi numai pachetelor cu fanionul SYN activat, iar fanioanele ACK, FIN i RST dezactivate. [!] --syn Se potrivesc numai pachetele TCP cu bitul SYN activat i biii ACK, RST i FIN dezactivai. Aceste pachete sunt utilizate pentru a solicita iniierea unei conexiuni TCP; de exemplu, blocarea acestor pachete care intra intr-o interfaa va impiedica conexiunile TCP de intrare, dar conexiunile TCP de ieire nu vor fi afectate. Este echivalenta cu --tcp-flags SYN,RST,ACK,FIN SYN. Daca fanionul ,,!" precede ,,--syn", sensul opiunii este inversat. [!] --tcp-option numar Se potrivete daca opiunea TCP este activata. tcpmss Aceasta corespunde campului TCP MSS (dimensiunea maxima a segmentului) din antetul TCP. Putei utiliza acest parametru numai pe pachetele TCP SYN sau SYN/ACK, deoarece MSS este negociat numai in timpul protocolului TCP de negociere ,,handshake" la momentul iniierii conexiunii. [!] --mss valoare[:valoare] Potrivete o valoare sau un interval TCP MSS dat. Daca este dat un interval, a doua valoare trebuie sa fie mai mare sau egala cu prima valoare. time Aceasta opiune se potrivete daca data/ora de sosire a pachetului se incadreaza intr-un interval dat Toate opiunile sunt opionale, dar sunt evaluate cu ,,AND" atunci cand sunt specificate.Toate orele sunt interpretate implicit ca UTC. --datestart AAAA[-LL[-ZZ[Thh[:mm[:ss]]]]] --datestop AAAA[-LL[-ZZ[Thh[:mm[:ss]]]]] Se potrivete numai in timpul dat, care trebuie sa fie in notaia ISO 8601 ,,T". Intervalul de timp posibil este 1970-01-01T00:00:00 pana la 2038-01-19T04:17:07. In cazul in care ,,--datestart" sau ,,--datestop" nu sunt specificate, se va alege in mod implicit 1970-01-01 i, respectiv, 2038-01-19. --timestart hh:mm[:ss] --timestop hh:mm[:ss] Se potrivete numai in timpul zilei date. Intervalul de timp posibil este de la 00:00:00 la 23:59:59. Zerourile iniiale sunt permise (de exemplu, ,,06:03") i sunt interpretate corect ca baza 10. [!] --monthdays ziua[,ziua...] Se potrivete numai in zilele lunii date. Valorile posibile sunt de la 1 la 31. Reinei ca specificarea 31 nu se va potrivi, bineineles, lunilor care nu au ziua 31; acelai lucru este valabil i pentru luna februarie cu 28 sau 29 de zile. [!] --weekdays ziua[,ziua...] Se potrivete numai in zilele saptamanii date. Valorile posibile sunt Mon, Tue, Wed, Thu, Fri, Sat, Sun sau valori de la 1 la 7, respectiv. Se pot utiliza i variante cu doua caractere (Mo, Tu etc.). --contiguous Atunci cand valoarea --timestop este mai mica decat valoarea --timestart, se potrivete ca o singura perioada de timp in loc de intervale distincte. A se vedea EXEMPLE. --kerneltz Utilizeaza fusul orar al nucleului in loc de UTC pentru a determina daca un pachet respecta reglementarile temporale. Despre fusurile orare ale nucleului: Linux pastreaza ora sistemului in UTC, i intotdeauna face acest lucru. La pornire, ora sistemului este iniializata de la o sursa de timp refereniala. In cazul in care aceasta sursa de timp nu are informaii privind fusul orar, cum ar fi RTC-ul CMOS x86, se va presupune UTC. In cazul in care sursa de timp nu este totui in UTC, spaiul utilizatorului ar trebui sa furnizeze nucleului ora corecta a sistemului i fusul orar, odata ce dispune de informaii. Ora locala este o caracteristica a orei de sistem (independenta de fusul orar). Fiecare proces are propria sa idee despre ora locala, specificata prin intermediul variabilei de mediu TZ. Nucleul are, de asemenea, propria sa variabila de decalaj al fusului orar. Variabila de mediu userpace TZ specifica modul in care este afiata ora sistemului bazata pe UTC, de exemplu atunci cand executai date(1) sau ceea ce vedei pe ceasul de pe birou. irul TZ se poate rezolva la diferite decalaje la date diferite, ceea ce permite saltul automat al orei in spaiul utilizatorilor. atunci cand se schimba ora de vara. Variabila de decalare a fusului orar a nucleului este utilizata atunci cand trebuie sa converteasca surse non-UTC, cum ar fi sistemele de fiiere FAT, in UTC (deoarece acesta din urma este cel utilizat de restul sistemului). Problema cu fusul orar al nucleului este ca distribuiile Linux pot ignora configurarea fusului orar al nucleului i, in schimb, pot configura doar ora sistemului. Chiar daca o anumita distribuie configureaza fusul orar la pornire, de obicei nu menine actualizat decalajul fusului orar al nucleului, care este cel care se modifica in funcie de ora de vara. ntpd nu va modifica fusul orar al nucleului, astfel incat rularea sa nu va rezolva problema. Astfel, este posibil sa se intalneasca un fus orar care este intotdeauna +0000 sau unul care este greit jumatate din timpul anului. Ca atare, utilizarea --kerneltz este foarte descurajata. EXEMPLE. Pentru a potrivi in ,,weekend", utilizai: -m time --weekdays Sa,Su Sau, sa se potriveasca (o data) pe un bloc de sarbatoare naionala: -m time --datestart 2007-12-24 --datestop 2007-12-27 Deoarece timpul de oprire este de fapt inclusiv, ar trebui ca urmatorul timp de oprire sa nu coincida cu prima secunda a noii zile: -m time --datestart 2007-01-01T17:00 --datestop 2007-01-01T23:59:59 In timpul pranzului: -m time --timestart 12:30 --timestop 13:30 A patra zi de vineri din luna: -m time --weekdays Fr --monthdays 22,23,24,25,26,27,28 Reinei ca acest lucru exploateaza o anumita proprietate matematica. Nu este posibil sa se spuna ,,a patra zi de joi SAU a patra zi de vineri" intr-o singura regula. Este posibil, totui, cu mai multe reguli. Potrivirea intre zile ar putea sa nu aiba efectul scontat. De exemplu, ,,-m time --weekdays Mo --timestart 23:00 --timestop 01:00" Se va potrivi luni, timp de o ora, de la miezul nopii pana la ora 1 a.m., i apoi din nou timp de inca o ora, de la ora 23:00 incolo. Daca acest lucru nu este dorit, de exemplu, daca dorii ,,sa se potriveasca timp de doua ore incepand de luni de la ora 23:00", trebuie sa specificai i opiunea ,,--contiguous" in exemplul de mai sus. tos Acest modul corespunde campului ,,Type of Service" pe 8 bii din antetul IPv4 (adica inclusiv biii ,,Precedence") sau campului ,,Priority" (tot pe 8 bii) din antetul IPv6. [!] --tos valoare[/masca] Potrivete pachetele cu valoarea indicatorului TOS data. Daca este specificata o masca, aceasta este logic evaluata AND cu marcajul TOS inainte de comparaie. [!] --tos simbol Putei specifica un nume simbolic atunci cand utilizai potrivirea tos pentru IPv4. Lista de nume TOS recunoscute poate fi obinuta apeland iptables cu -m tos -h. Reinei ca acest lucru implica o masca de 0x3F, adica toi biii, cu excepia celor ECN. ttl (specific IPv4) Acest modul se potrivete cu campul ,,time to live" din antetul IP. [!] --ttl-eq ttl Se potrivete cu valoarea TTL data. --ttl-gt ttl Se potrivete daca TTL este mai mare decat valoarea TTL data. --ttl-lt ttl Se potrivete daca TTL este mai mic decat valoarea TTL data. u32 U32 testeaza daca cantitai de pana la 4 octei extrase dintr-un pachet au valorile specificate. Specificarea a ceea ce trebuie extras este suficient de generala pentru a gasi date la anumite distane din antetele sau sarcinile utile tcp. [!] --u32 tests Argumentul reprezinta un program intr-un mic limbaj descris mai jos. tests := location "=" value | tests "&&" location "=" value value := range | value "," range range := number | number ":" number un singur numar, n, este interpretat la fel ca n:n. n:m este interpretat ca intervalul de numere >=n i <=m. location := number | location operator number operator := "&" | "<<" | ">>" | "@" Operatorii &, <<, >> i && au acelai ineles ca in C. = este de fapt un operator de apartenena la un set, iar sintaxa valorii descrie un set. Operatorul @ este cel care permite trecerea la urmatorul antet i este descris mai jos. In prezent, exista unele limite artificiale de implementare privind dimensiunea testelor: * nu mai mult de 10 ,,=" (i 9 ,,&&"s) in argumentul u32 * nu mai mult de 10 intervale (i 9 virgule) pentru fiecare valoare * nu mai mult de 10 numere (i 9 operatori) pe locaie Pentru a descrie semnificaia locaiei, imaginai-va urmatoarea maina care o interpreteaza. Exista trei registre: A este de tip char *, iniial adresa antetului IP B i C sunt numere intregi de 32 de bii fara semn, iniial zero Instruciunile sunt: number B = number; C = (*(A+B)<<24) + (*(A+B+1)<<16) + (*(A+B+2)<<8) + *(A+B+3) &number C = C & number << number C = C << number >> number C = C >> number @number A = A + C; apoi efectueaza instruciunea ,,number" Orice acces la memorie in afara [skb->data,skb->end] face ca potrivirea sa eueze. In caz contrar, rezultatul calculului este valoarea finala a lui C. Spaiul alb este permis, dar nu este obligatoriu in teste. Cu toate acestea, caracterele care apar acolo sunt susceptibile de a necesita citarea folosita in shell, deci este o idee buna sa includei argumentele intre ghilimele. Exemplu: se potrivesc pachetelor IP cu lungimea totala >= 256 Antetul IP conine un camp cu lungimea totala in octei 2-3. --u32 "0 & 0xFFFF = 0x100:0xFFFF" citete octeii 0-3 AND logic cu 0xFFFF (furnizeaza octei 2-3) i verifica daca aceasta valoare se afla in intervalul permis [0x100: 0xffff] Exemplu: (mai realist, aadar mai complicat) potrivete pachetele ICMP cu tipul icmp 0 Mai intai se testeaza daca este un pachet ICMP, adevarat daca octetul 9 (protocol) = 1 --u32 "6 & 0xFF = 1 && ... citete octeii 6-9, folosete & pentru a inlatura octeii 6-8 i compara rezultatul cu 1. Apoi verifica daca nu este un fragment; (daca este, ar putea face parte dintr-un astfel de pachet, dar nu ne putem da seama intotdeauna.) N.B.: Acest test este in general necesar daca dorii sa potrivii ceva dincolo de antetul IP. Ultimii 6 bii din octetul 6 i toi cei din octetul 7 sunt 0 daca acesta este un pachet complet (nu un fragment). Alternativ, putei permite primele fragmente testand doar ultimii 5 bii ai octetului 6. ... 4 & 0x3FFF = 0 && ... Ultimul test: primul octet dupa antetul IP (tipul) este 0. Aici trebuie sa folosim @syntax. Lungimea antetului IP (IHL) in cuvinte de 32 de bii este stocata in jumatatea dreapta a octetului 0 din antetul IP in sine. ... 0 >> 22 & 0x3C @ 0 >> 24 = 0" Primul 0 inseamna citirea octeilor 0-3, >>22 inseamna deplasarea celor 22 de bii la dreapta. Deplasarea a 24 de bii ar da primul octet, deci numai 22 de bii inseamna de patru ori mai mult decat atat plus caiva bii. &3C elimina apoi cei doi bii suplimentari din dreapta i primii patru bii ai primului octet. De exemplu, daca IHL=5, atunci antetul IP are o lungime de 20 (4 x 5) de octei. In acest caz, octeii 0-1 sunt (in binar) xxxx0101 yyzzzzzz, >>22 da valoarea pe 10 bii xxxx0101yy i &3C da 010100. @ inseamna sa se utilizeze acest numar ca un nou decalaj in pachet i sa se citeasca patru octei incepand de acolo. Acetia sunt primii 4 octei din sarcina utila ICMP, din care octetul 0 este tipul ICMP. Prin urmare, pur i simplu deplasam valoarea 24 la dreapta pentru a inlatura tot cu excepia primului octet i comparam rezultatul cu 0. Exemplu: Octeii de sarcina utila TCP 8-12 sunt oricare dintre 1, 2, 5 sau 8 Mai intai testam daca pachetul este un pachet tcp (similar cu ICMP). --u32 "6 & 0xFF = 6 && ... Apoi, se testeaza daca nu este un fragment (la fel ca mai sus). ... 0 >> 22 & 0x3C @ 12 >> 26 & 0x3C @ 8 = 1,2,5,8" 0>>22&3C calculeaza ca mai sus numarul de octei din antetul IP. @ face din acesta noul decalaj in pachet, care este inceputul antetului TCP. Lungimea antetului TCP (din nou in cuvinte de 32 de bii) este jumatatea stanga a octetului 12 din antetul TCP. 12>>26&3C calculeaza aceasta lungime in octei (similar cu antetul IP anterior). ,,@" face ca acesta sa fie noul decalaj, care este inceputul incarcaturii utile TCP. In cele din urma, 8 citete octeii 8-12 din sarcina utila i = verifica daca rezultatul este oricare dintre 1, 2, 5 sau 8. udp Aceste extensii pot fi utilizate daca este specificat ,,---protocol udp". Acesta ofera urmatoarele opiuni: [!] --source-port,--sport port[:port] Specificarea portului sursa sau a intervalului de porturi. Pentru detalii, consultai descrierea opiunii --source-port a extensiei TCP. [!] --destination-port,--dport port[:port] Specificarea portului de destinaie sau a intervalului de porturi. Pentru detalii, consultai descrierea opiunii --destination-port a extensiei TCP. EXTENSII PENTRU INTA iptables poate utiliza module inta extinse: urmatoarele sunt incluse in distribuia standard. AUDIT Aceasta inta creeaza inregistrari de audit pentru pachetele care ating inta. Acesta poate fi utilizat pentru a inregistra pachetele acceptate, abandonate i respinse. Consultai auditd(8) pentru detalii suplimentare. --type {accept|drop|reject} Stabilete tipul inregistrarii de audit. Incepand cu linux-4.12, aceasta opiune nu mai are niciun efect asupra mesajelor de audit generate. Este inca acceptata de iptables din motive de compatibilitate, dar este ignorata. Exemplu: iptables -N AUDIT_DROP iptables -A AUDIT_DROP -j AUDIT iptables -A AUDIT_DROP -j DROP CHECKSUM Aceasta inta funcioneaza selectiv in jurul aplicaiilor vechi/nefuncionale. Poate fi utilizata numai in tabelul de ,,mangle". --checksum-fill Calculeaza i completeaza suma de control intr-un pachet care nu are o suma de control. Acest lucru este deosebit de util in cazul in care trebuie sa lucrai cu aplicaii vechi, cum ar fi clienii dhcp, care nu funcioneaza bine cu descarcarea sumelor de control, dar nu dorii sa dezactivai descarcarea sumelor de control in dispozitivul dumneavoastra. CLASSIFY Acest modul va permite sa stabilii valoarea skb->priority (i astfel sa clasificai pachetul intr-o anumita clasa CBQ). --set-class major:minor Stabilete valoarea clasei majore i minore. Valorile sunt intotdeauna interpretate ca fiind hexazecimale, chiar daca nu este dat prefixul 0x. CLUSTERIP (specific IPv4) Acest modul va permite sa configurai un cluster simplu de noduri care impart o anumita adresa IP i MAC fara a avea in faa lor un distribuitor de sarcina explicit. Conexiunile sunt distribuite static intre nodurile din acest cluster. Va rugam sa reinei ca obiectivul ,,CLUSTERIP" este considerat depreciat in favoarea ,,cluster match", care este mai flexibil i nu este limitat la IPv4. --new Creeaza un nou ClusterIP. Intotdeauna trebuie sa definii acest lucru la prima regula pentru un anumit ClusterIP. --hashmode mod Specifica modul de ,,hashing" (calculare a sumelor de control). Trebuie sa fie unul dintre sourceip, sourceip-sourceport, sourceip-sourceport-destport. --clustermac mac Specifica adresa MAC ClusterIP. Trebuie sa fie o adresa de multicast in stratul de legatura(conexiune) --total-nodes numar Numarul total de noduri din acest cluster. --local-node numar Numarul nodului local din cadrul acestui cluster. --hash-init rnd Specifica samana aleatorie utilizata pentru iniializarea calcularii sumelor de controli. CONNMARK Acest modul stabilete valoarea marcajului netfilter asociat cu o conexiune. Marca are o laime de 32 de bii. --set-xmark valoare[/masca] Anularea biilor indicai de masca i XOR valoare in ctmark. --save-mark [--nfmask nfmask] [--ctmask ctmask] Copiaza marca pachetului (nfmark) in marca conexiunii (ctmark) folosind matile date. Noua valoare nfmark este determinata dupa cum urmeaza: ctmark = (ctmark & ~ctmask) ^ (nfmark & nfmask) adica ctmask definete ce bii trebuie teri i nfmask ce bii din nfmark trebuie XOR in ctmark. ctmask i nfmask au valoarea implicita 0xFFFFFFFF. --restore-mark [--nfmask nfmask] [--ctmask ctmask] Copiaza marca de conexiune (ctmark) in marca de pachet (nfmark) folosind matile date. Noua valoare ctmark este determinata dupa cum urmeaza: nfmark = (nfmark & ~nfmask) ^ (ctmark & ctmask); adica nfmask definete ce bii se terg i ctmask ce bii din ctmark se XOR in nfmark. ctmask i nfmask au valoarea implicita 0xFFFFFFFF. --restore-mark este valabila numai in tabelul mangle. Urmatoarele mnemonice sunt disponibile pentru --set-xmark: --and-mark bii AND logic al ctmark-ului cu bii. Mnemonic pentru --set-xmark 0/invbii, unde invbii este negaia binara a lui bii. --or-mark bii OR logic al ctmark-ului cu bits. Mnemonic pentru --set-xmark bits/bits. --xor-mark bii XOR logic al ctmark-ului cu bits. Mnemonic pentru --set-xmark bits/0. --set-mark valoare[/masca] Definete marcajul conexiunii. Daca este specificata o masca, atunci sunt modificai numai biii definii in masca. --save-mark [--mask masca] Copiaza nfmark in ctmark. Daca este specificata o masca, sunt copiai numai acei bii. --restore-mark [--mask masca] Copiaza marca ct in marca nf. Daca este specificata o masca, se copiaza numai acei bii. Acest lucru este valabil numai in tabelul mangle. CONNSECMARK Acest modul copiaza marcajele de securitate de la pachete la conexiuni (daca nu sunt etichetate) i de la conexiuni inapoi la pachete (tot numai daca nu sunt etichetate). Utilizat de obicei impreuna cu SECMARK, este valabil in tabelul security (pentru compatibilitate cu nucleele mai vechi, este valabil i in tabelul mangle). --save Daca pachetul are un marcaj de securitate, il copiaza in conexiune daca conexiunea nu este marcata. --restore Daca pachetul nu are un marcaj de securitate, iar conexiunea are, copiaza marcajul de securitate de la conexiune la pachet. CT inta CT stabilete parametrii pentru un pachet sau pentru conexiunea asociata acestuia. inta ataeaza pachetului o intrare ,,ablon" de urmarire a conexiunii, care este apoi utilizata de nucleul conntrack la iniializarea unei noi intrari ct. Prin urmare, aceasta inta este valabila numai in tabelul ,,brut". --notrack Dezactiveaza urmarirea conexiunii pentru acest pachet. --helper nume Utilizeaza auxiliarul identificat prin nume pentru conexiune. Acest lucru este mai flexibil decat incarcarea modulelor ,,helper conntrack" cu porturi prestabilite. --ctevents eveniment[,...] Genereaza numai evenimentele conntrack specificate pentru aceasta conexiune. Tipurile de evenimente posibile sunt: new, related, destroy, reply, assured, protoinfo, helper, mark (se refera la ctmark, nu la nfmark), natseqinfo, secmark (ctsecmark). --expevents eveniment[,...] Genereaza numai evenimentele de ateptare specificate pentru aceasta conexiune. Tipurile de evenimente posibile sunt: new. --zone-orig {id|mark} Pentru traficul provenit din direcia ORIGINAL, se atribuie acest pachet zonei id i se efectueaza cautari numai in acea zona. Daca se utilizeaza mark in loc de id, zona este derivata din pachetul nfmark. --zone-reply {id|mark} Pentru traficul provenit din direcia REPLY, se atribuie acest pachet zonei id i se efectueaza cautari numai in acea zona. Daca se utilizeaza mark in loc de id, zona este derivata din pachetul nfmark. --zone {id|mark} Atribuie acest pachet zonei id i efectueaza cautari numai in acea zona. Daca se utilizeaza mark in loc de id, zona este derivata din pachetul nfmark. In mod implicit, pachetele au zona 0. Aceasta opiune se aplica in ambele direcii. --timeout nume Utilizeaza politica de timp de ateptare identificata de nume pentru conexiune. Aceasta ofera o definiie mai flexibila a politicii de timp de ateptare decat valorile globale de timp de ateptare disponibile la /proc/sys/net/netfilter/nf_conntrack_*_timeout_*. DNAT Aceasta inta este valabila numai in tabelul nat, in lanurile PREROUTING i OUTPUT i in lanurile definite de utilizator care sunt apelate numai din aceste lanuri. Aceasta specifica faptul ca adresa de destinaie a pachetului trebuie modificata (i toate pachetele viitoare din aceasta conexiune vor fi, de asemenea, modificate), iar regulile trebuie sa inceteze sa mai fie examinate. Accepta urmatoarele opiuni: --to-destination [adresa-ip[-adresa-ip]][:port[-port[/port-baza]]] care poate specifica o singura adresa IP de destinaie noua, un interval inclusiv de adrese IP. Opional, un interval de porturi, daca regula specifica i unul dintre urmatoarele protocoale: tcp, udp, dccp sau sctp. Daca nu este specificat niciun interval de porturi, atunci portul de destinaie nu va fi niciodata modificat. Daca nu este specificata nicio adresa IP, atunci numai portul de destinaie va fi modificat. Daca se indica port-baza, diferena dintre portul de destinaie iniial i valoarea acestuia este utilizata ca decalaj in intervalul de porturi de alocare. Acest lucru permite crearea de intervale de portmap deplasate i este disponibil incepand cu versiunea 4.18 a nucleului. Pentru un singur port sau port-baza, se poate utiliza un nume de serviciu aa cum este listat in /etc/services. --random Alocarea aleatorie a porturilor sursa (nucleu >= 2.6.22). --persistent Ofera unui client aceeai adresa sursa/destinaie pentru fiecare conexiune. Aceasta inlocuiete inta SAME. Suportul pentru corespondene persistente este disponibil de la versiunea 2.6.29-rc2. Suport IPv6 disponibil de la nucleele Linux >= 3.7. DNPT (specific IPv6) Asigura traducerea prefixelor de reea IPv6 la IPv6 de destinaie fara pastrarea starii ,,stateless" (conform descrierii RFC 6296). Trebuie sa utilizai aceasta inta in tabelul mangle, nu in tabelul nat. Are urmatoarele opiuni: --src-pfx [prefix/lungime] Definete prefixul sursa pe care dorii sa il traducei i lungimea --dst-pfx [prefix/lungime] Definete prefixul destinaie pe care dorii sa il traducei i lungimea Trebuie sa utilizai inta SNPT pentru a anula traducerea. Exemplu: ip6tables -t mangle -I POSTROUTING -s fd00::/64 -o vboxnet0 -j SNPT --src-pfx fd00::/64 --dst-pfx 2001:e20:2000:40f::/64 ip6tables -t mangle -I PREROUTING -i wlan0 -d 2001:e20:2000:40f::/64 -j DNPT --src-pfx 2001:e20:2000:40f::/64 --dst-pfx fd00::/64 Este posibil sa fie necesar sa activai un server proxy IPv6 invecinat: sysctl -w net.ipv6.conf.all.proxy_ndp=1 De asemenea, trebuie sa utilizai inta NOTRACK pentru a dezactiva urmarirea conexiunilor pentru fluxurile traduse. DSCP Aceasta inta modifica valoarea biilor DSCP din antetul TOS al pachetului IPv4. Deoarece aceasta inta manipuleaza un pachet, ea poate fi utilizata numai in tabelul ,,mangle". --set-dscp valoare Definete campul DSCP la o valoare numerica (poate fi zecimala sau hexazecimala) --set-dscp-class clasa Definete campul DSCP la o clasa DiffServ. ECN (specific IPv4) Aceasta inta funcioneaza selectiv in jurul gaurilor negre ECN cunoscute. Aceasta poate fi utilizata numai in tabelul ,,mangle". --ecn-tcp-remove Elimina toi biii ECN din antetul TCP. Desigur, aceasta poate fi utilizata numai impreuna cu -p tcp. HL (specific IPv6) Aceasta este utilizata pentru a modifica campul Hop Limit din antetul IPv6. Campul Hop Limit este similar cu ceea ce este cunoscut sub numele de valoare TTL in IPv4. Stabilirea sau incrementarea campului Hop Limit poate fi foarte periculoasa, astfel incat ar trebui evitata cu orice pre. Aceasta inta este valabila numai in tabelul mangle. Nu stabilii sau nu incrementai niciodata valoarea pe pachetele care parasesc reeaua locala! --hl-set valoare Stabilete limita de salt (Hop Limit) la ,,valoare". --hl-dec valoare Reduce limita de salt de ,,valoare" de ori. --hl-inc valoare Incrementeaza limita de salt de ,,valoare" de ori. HMARK La fel ca MARK, adica stabilete fwmark, dar marca este calculata din selectorul de pachete hashing la alegere. De asemenea, trebuie sa specificai intervalul de marcare i, opional, decalajul de la care sa se inceapa. Mesajele de eroare ICMP sunt inspectate i utilizate pentru a calcula hashing-ul. Existing options are: --hmark-tuple tuple Membrii tuplelor posibile sunt: src inseamna adresa sursa (adresa IPv4, IPv6), dst inseamna adresa destinaie (adresa IPv4, IPv6), sport inseamna portul sursa (TCP, UDP, UDPlite, SCTP, DCCP), dport inseamna portul destinaie (TCP, UDP, UDPlite, SCTP, DCCP), spi inseamna indicele parametrului de securitate (AH, ESP) i ct inseamna utilizarea tuple-ului conntrack in locul selectorilor de pachete. --hmark-mod valoare (trebuie sa fie > 0) Modul pentru calculul hash (pentru a limita gama de marcaje posibile) --hmark-offset valoare Decalaj de la care sa se inceapa marcajele. Pentru utilizare avansata, in loc sa utilizai ,,--hmark-tuple", putei specifica personalizat prefixe i mati: --hmark-src-prefix cidr Masca adresei sursa in notaie CIDR. --hmark-dst-prefix cidr Masca adresei de destinaie in notaie CIDR. --hmark-sport-mask valoare O masca a portului sursa de 16 bii in hexazecimal. --hmark-dport-mask valoare O masca a portului de destinaie de 16 bii in hexazecimal. --hmark-spi-mask valoare Un camp de 32 de bii cu masca spi. --hmark-proto-mask valoare Un camp de 8 bii cu numarul protocolului de nivel(strat) 4. --hmark-rnd valoare O valoare personalizata aleatorie de 32 de bii pentru a alimenta calculul hash. Exemple: iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW -j HMARK --hmark-tuple ct,src,dst,proto --hmark-offset 10000 --hmark-mod 10 --hmark-rnd 0xfeedcafe iptables -t mangle -A PREROUTING -j HMARK --hmark-offset 10000 --hmark-tuple src,dst,proto --hmark-mod 10 --hmark-rnd 0xdeafbeef IDLETIMER Aceasta inta poate fi utilizata pentru a identifica momentul in care interfeele au fost inactive pentru o anumita perioada de timp. Temporizatoarele sunt identificate prin etichete i sunt create atunci cand o regula este definita cu o eticheta noua. Regulile preiau, de asemenea, o valoare de temporizare (in secunde) ca opiune. Daca mai multe reguli utilizeaza aceeai eticheta de temporizator, temporizatorul va fi repornit ori de cate ori oricare dintre reguli primete un rezultat pozitiv. O intrare pentru fiecare cronometru este creata in sysfs. Acest atribut conine timpul ramas pana la expirarea temporizatorului. Atributele sunt localizate sub clasa xt_idletimer: /sys/class/xt_idletimer/timers/