iptables poate utiliza module extinse de potrivire a pachetelor cu
opțiunile -m sau --match, urmate de numele modulului de
potrivire; după acestea, devin disponibile diverse opțiuni
suplimentare de linie de comandă, în funcție de modulul
specific. Puteți specifica mai multe module de potrivire
extinsă într-o singură linie și puteți
utiliza opțiunile -h sau --help după ce modulul
a fost specificat pentru a primi ajutor specific acelui modul. Modulele de
potrivire extinsă sunt evaluate în ordinea în care sunt
specificate în regulă.
Dacă -p sau --protocol a fost
specificată și dacă și numai dacă este
întâlnită o opțiune necunoscută, iptables
va încerca să încarce un modul de potrivire cu
același nume ca protocolul, pentru a încerca să
facă opțiunea disponibilă.
Acest modul potrivește pachetele în funcție
de tipul de adresă. Tipurile de adresă sunt utilizate
în cadrul stivei de rețea a nucleului și
clasifică adresele în diverse grupuri. Definiția
exactă a acelui grup depinde de protocolul specific stratului
trei.
Sunt posibile următoarele tipuri de adrese:
- UNSPEC
- o adresă nespecificată (adică 0.0.0.0)
- UNICAST
- o adresă uni-difuzare „unicast”
- LOCAL
- o adresă locală
- BROADCAST
- o adresă de difuzare în toată rețeaua
„broadcast”
- ANYCAST
- un pachet „anycast”
- MULTICAST
- o adresă de difuzare multiplă (către mai multe
mașini) „multicast”
- BLACKHOLE
- o adresă de gaură neagră
„blackhole”
- UNREACHABLE
- o adresă inaccesibilă „unreachable”
- PROHIBIT
- o adresă interzisă „prohibited”
- THROW
- FIXME
- NAT
- FIXME
- XRESOLVE
- [!] --src-type tip
- Se potrivește dacă adresa sursă este de tipul
dat
- [!] --dst-type tip
- Se potrivește dacă adresa de destinație este de tipul
dat
- --limit-iface-in
- Verificarea tipului de adresă poate fi limitată la
interfața de intrare a pachetului. Această opțiune
este valabilă numai în lanțurile PREROUTING,
INPUT și FORWARD. Ea nu poate fi specificată
cu opțiunea --limit-iface-out.
- --limit-iface-out
- Verificarea tipului de adresă poate fi limitată la
interfața pe care pleacă pachetul. Această
opțiune este valabilă numai în lanțurile
POSTROUTING, OUTPUT și FORWARD. Ea nu poate fi
specificată cu opțiunea --limit-iface-in.
ah (specifică IPv6)
Acest modul potrivește parametrii din antetul de
autentificare al pachetelor IPsec.
- [!] --ahspi spi[:spi]
- Se potrivește cu SPI.
- [!] --ahlen lungimea
- Lungimea totală a acestui antet în octeți.
- --ahres
- Se potrivește dacă câmpul rezervat este completat cu
zero.
ah (specifică IPv4)
Acest modul potrivește SPI-urile din antetul de
autentificare al pachetelor IPsec.
- [!] --ahspi spi[:spi]
Potrivire cu ajutorul filtrului de soclu Linux „Linux
Socket Filter”. Așteaptă o rută către un
obiect eBPF sau un program cBPF în format zecimal.
- --object-pinned
ruta
- Transmite o rută către un obiect eBPF fixat.
Aplicațiile încarcă programele eBPF în
nucleu cu apelul de sistem bpf() și comanda BPF_PROG_LOAD și
le pot fixa într-un sistem de fișiere virtual cu BPF_OBJ_PIN.
Pentru a utiliza un obiect fixat în iptables, montați sistemul
de fișiere bpf utilizând
- mount -t bpf bpf ${BPF_MOUNT}
apoi inserați filtrul în iptables după
rută:
- iptables -A OUTPUT -m bpf --object-pinned ${BPF_MOUNT}/{PINNED_PATH} -j
ACCEPT
- --bytecode
cod
- Transmite formatul codului de octeți BPF generat de instrumentul
nfbpf_compile.
Formatul codului este similar cu rezultatul comenzii
«tcpdump -ddd»: o linie care stochează numărul
de instrucțiuni, urmată de o linie pentru fiecare
instrucțiune. Liniile de instrucțiuni urmează modelul
„u16 u8 u8 u32” în notație zecimală.
Câmpurile codifică operația, decalajul de salt
dacă este adevărat, decalajul de salt dacă este fals
și câmpul generic multiutilizare „K”.
Comentariile nu sunt acceptate.
De exemplu, pentru a citi numai pachetele care corespund
„ip proto 6”, introduceți următorul text,
fără comentarii sau spații albe:
- 4 # numărul de instrucțiuni
48 0 0 9 # încarcă octetul ip->proto
21 0 1 6 # salt egal cu IPPROTO_TCP
6 0 0 1 # returnează pasul (diferit de zero)
6 0 0 0 # returnează eroarea (zero)
Puteți trece acest filtru la potrivirea bpf cu
următoarea comandă:
- 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, în schimb, puteți apela instrumentul
nfbpf_compile.
- iptables -A OUTPUT -m bpf --bytecode "`nfbpf_compile RAW 'ip proto
6'`" -j ACCEPT
Sau utilizați «tcpdump -ddd». În acest
caz, generați BPF vizând un dispozitiv cu același tip
de legătură de date ca și potrivirea xtables. Iptables
trece pachetele de la nivelul de rețea în sus,
fără nivelul mac. Selectați un dispozitiv cu tipul de
legătură 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
Consultați «tcpdump -L -i $dev» pentru o
listă a tipurilor de legături/conexiuni de date cunoscute
pentru un anumit dispozitiv.
Este posibil să doriți să aflați mai
multe despre BPF din pagina de manual bpf(4) a FreeBSD.
- [!] --path ruta
- Potrivește apartenența la cgroup2.
Fiecare soclu este asociat cu cgroup-ul v2 al procesului de
creare. Aceasta se potrivește cu pachetele care provin de la sau
se îndreaptă către toate soclurile din subierarhia
rutei specificate. Ruta trebuie să fie relativă la
rădăcina ierarhiei cgroup2.
- [!] --cgroup id-clasă
- Se potrivește cu id-clasă al cgroup net_cls.
id-clasă „classid” este marcajul stabilit
prin controlorul cgroup net_cls. Această opțiune și
opțiunea „--path” nu pot fi utilizate
împreună.
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 când este utilizată
în lanțul INPUT, potrivirea cgroup are în prezent doar
o funcționalitate limitată, ceea ce înseamnă
că se va potrivi doar cu pachetele care sunt procesate pentru
soclurile locale prin demultiplexarea timpurie a soclurilor. Prin urmare,
utilizarea generală pe lanțul INPUT nu este recomandată
decât dacă implicațiile sunt bine
înțelese.
Disponibilă începând cu Linux 3.14.
Vă permite să implementați clustere de
partajare a încărcării porții de acces și
a serverului „back-end” fără a avea nevoie de
echilibratori de încărcare.
Această potrivire necesită ca toate nodurile
să vadă aceleași pachete. Astfel, potrivirea
clusterului decide dacă acest nod trebuie să gestioneze un
pachet având în vedere următoarele opțiuni:
- --cluster-total-nodes număr
- Stabilește numărul total de noduri din cluster.
- [!] --cluster-local-node număr
- Stabilește ID-ul numărului nodului local.
- [!] --cluster-local-nodemask masca
- Stabilește masca ID a numărului nodului local. Puteți
utiliza această opțiune în loc de opțiunea
--cluster-local-node.
- --cluster-hash-seed valoare
- Stabilește valoarea seminței sumei de control (hash) a
funcției 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 următoarele comenzi pentru a face ca toate
nodurile să vadă aceleași 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
NOTAȚIE: comenzile arptables de mai sus
utilizează sintaxa dezvoltatorilor principali. Dacă
utilizați arptables-jf inclus în unele versiuni RedHat, CentOS
și Fedora, vă veți lovi de erori de sintaxă.
Prin urmare, va trebui să le adaptați la sintaxa arptables-jf
pentru a le face să funcționeze.
În cazul conexiunilor TCP, facilitatea de preluare trebuie
să fie dezactivată pentru a evita marcarea ca valide a
pachetelor TCP ACK care vin în direcția de răspuns.
- echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose
Vă permite să adăugați comentarii
(până la 256 de caractere) la orice regulă.
- --comment comentariu
- Exemplu:
- iptables -A INPUT -i eth1 -m comment --comment "my local
LAN"
Potrivește în funcție de numărul de
octeți sau pachete pe care o conexiune (sau unul dintre cele
două fluxuri care constituie conexiunea) le-a transferat
până în prezent sau în funcție de
numărul mediu de octeți pe pachet.
Contoarele sunt pe 64 de biți și, prin urmare, nu
este de așteptat să se debordeze ;)
Principala utilizare este detectarea descărcărilor
de lungă durată și marcarea acestora pentru a fi
programate folosind o bandă de prioritate inferioară în
controlul traficului.
Octeții transferați pe conexiune pot fi
vizualizați și prin «conntrack -L» și
accesați prin «ctnetlink».
OBSERVAȚI că pentru conexiunile care nu au
informații contabile, potrivirea va returna întotdeauna fals.
Fanionul sysctl „net.netfilter.nf_conntrack_acct”
controlează dacă conexiunile new vor fi numărate
în octeți/pachete. Fluxurile de conexiuni existente nu vor
câștiga/pierde o/structura de contabilizare atunci când
fanionul sysctl be este inversat.
- [!] --connbytes from[:to]
- potrivește pachetele de la o conexiune ale cărei
pachete/octeți/mărime medie a pachetelor este mai mare
decât FROM și mai mică decât TO
octeți/pachete. dacă TO este omis, se face doar verificarea
FROM. „!” se utilizează pentru a potrivi pachetele
care nu se încadrează în interval.
- --connbytes-dir {original|reply|both}
- ce pachete trebuie luate în considerare
- --connbytes-mode {packets|bytes|avgpkt}
- dacă se verifică cantitatea de pachete, numărul de
octeți transferați sau dimensiunea medie (în
octeți) a tuturor pachetelor primite până în
prezent. Rețineți că atunci când
„both” este utilizat împreună cu
„avgpkt”, iar datele circulă (în principal)
într-o singură direcție (de exemplu HTTP),
dimensiunea medie a pachetelor va fi aproximativ jumătate din
pachetele de date reale.
- Exemplu:
- iptables .. -m connbytes --connbytes 10000:100000 --connbytes-dir both
--connbytes-mode bytes ...
Modulul potrivește sau adaugă connlabels la o
conexiune. connlabels sunt similare cu connmarks, cu excepția
faptului că etichetele sunt bazate pe biți; adică toate
etichetele pot fi atașate unui flux în același timp.
În prezent sunt acceptate până la 128 de etichete
unice.
- [!] --label nume
- potrivește dacă eticheta numele a fost
definită pe o conexiune. În locul unui nume (care va fi
tradus într-un număr, a se vedea EXEMPLUL de mai jos), poate
fi utilizat un număr. Utilizarea unui număr
prevalează întotdeauna asupra connlabel.conf.
- --set
- dacă eticheta nu a fost definită pe conexiune,
definiți-o. Rețineți că definirea unei
etichete poate eșua. Acest lucru se datorează faptului
că nucleul alocă zona de stocare a etichetei conntrack
atunci când este creată conexiunea și rezervă
doar cantitatea de memorie necesară setului de reguli care
există în momentul creării conexiunii. În
acest caz, potrivirea va eșua (sau va reuși, în cazul
în care opțiunea --label a fost negată).
Această potrivire depinde de libnetfilter_conntrack 1.0.4
sau ulterior. Traducerea etichetelor se face prin intermediul
fișierului de configurare /etc/xtables/connlabel.conf.
Exemplu:
-
0 eth0-in
1 eth0-out
2 ppp-in
3 ppp-out
4 bulk-traffic
5 interactive
Vă permite să restricționați
numărul de conexiuni paralele la un server per adresă IP
client (sau bloc de adrese client).
- --connlimit-upto n
- Se potrivește dacă numărul de conexiuni existente
este mai mic sau egal cu n.
- --connlimit-above n
- Se potrivește dacă numărul de conexiuni existente
este mai mare decât n.
- --connlimit-mask lungime-prefix
- Grupează gazdele folosind lungimea prefixului. Pentru IPv4, acesta
trebuie să fie un număr cuprins între (inclusiv) 0
și 32. Pentru IPv6, între 0 și 128. Dacă nu
este specificată, se utilizează lungimea maximă a
prefixului pentru protocolul aplicabil.
- --connlimit-saddr
- Aplică limita asupra grupului sursă. Aceasta este valoarea
implicită dacă nu este specificată opțiunea
„--connlimit-daddr”.
- --connlimit-daddr
- Aplică limita pe grupul de destinație.
Exemple:
- permite 2 conexiuni telnet pentru fiecare gazdă 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
- limitează numărul de cereri HTTP paralele la 16 per
rețea sursă de clasă C (mască de rețea
de 24 de biți)
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16
--connlimit-mask 24 -j REJECT
- limitează numărul de cereri HTTP paralele la 16 pentru
conexiunea la rețeaua locală
ip6tables -p tcp --syn --dport 80 -s fe80::/64 -m connlimit
--connlimit-above 16 --connlimit-mask 64 -j REJECT
- Limitează numărul de conexiuni la o anumită
gazdă:
ip6tables -p tcp --syn --dport 49152:65535 -d 2001:db8::1 -m connlimit
--connlimit-above 100 -j REJECT
Acest modul se potrivește cu câmpul de marcaj
netfilter asociat unei conexiuni (care poate fi definit utilizând
ținta CONNMARK de mai jos).
- [!] --mark valoare[/masca]
- Potrivește pachetele din conexiuni cu valoarea de marcare
dată (dacă este specificată o mască, aceasta
este logic AND cu marca înainte de comparație).
Acest modul, atunci când este combinat cu urmărirea
conexiunii, permite accesul la starea de urmărire a conexiunii pentru
acest pachet/conexiune.
- [!] --ctstate listă-stare
- listă-stare este o listă separată prin virgule
a stărilor conexiunii care trebuie să corespundă.
Stările posibile sunt enumerate mai jos.
- [!] --ctproto l4proto
- Protocolul Layer-4 care trebuie să corespundă (după
număr sau nume)
- [!] --ctorigsrc adresa[/masca]
- [!] --ctorigdst adresa[/masca]
- [!] --ctreplsrc adresa[/masca]
- [!] --ctrepldst adresa[/masca]
- Potrivire cu adresa sursă/destinație
originală/replică
- [!] --ctorigsrcport port[:port]
- [!] --ctorigdstport port[:port]
- [!] --ctreplsrcport port[:port]
- [!] --ctrepldstport port[:port]
- Potrivire în funcție de portul
sursă/destinație original/răspuns (TCP/UDP/etc.) sau
de cheia GRE. Potrivirea în funcție de intervalele de
porturi este acceptată numai în versiunile de nucleu mai
mari de 2.6.38.
- [!] --ctstatus listă-stare
- listă-stare este o listă separată prin virgule
a stărilor conexiunii care trebuie să corespundă.
Stările posibile sunt enumerate mai jos.
- [!] --ctexpire timp[:timp]
- Potrivește durata de viață rămasă
în secunde cu o valoare dată sau un interval de valori
(inclusiv)
- --ctdir
{ORIGINAL|REPLY}
- Potrivește pachetele care circulă în direcția
specificată. Dacă acest fanion nu este specificat deloc, se
potrivesc pachetele în ambele direcții.
Stări pentru --ctstate:
- INVALID
- Pachetul nu este asociat cu nicio conexiune cunoscută.
- NEW
- Pachetul a inițiat o conexiune nouă sau a fost asociat cu o
conexiune care nu a primit pachete în ambele direcții.
- ESTABLISHED
- Pachetul este asociat cu o conexiune care a văzut pachete în
ambele direcții.
- RELATED
- Pachetul începe o conexiune nouă, dar este asociat cu o
conexiune existentă, cum ar fi un transfer de date FTP sau o eroare
ICMP.
- UNTRACKED
- Pachetul nu este urmărit deloc, ceea ce se
întâmplă dacă îl anulați
în mod explicit folosind „-j CT --notrack” în
tabelul brut.
- SNAT
- O stare virtuală, care se potrivește dacă adresa
sursă inițială diferă de destinația
răspunsului.
- DNAT
- O stare virtuală, care se potrivește dacă
destinația inițială diferă de sursa
răspunsului.
Stări pentru --ctstatus:
- NONE
- Niciuna dintre cele de mai jos.
- EXPECTED
- Aceasta este o conexiune așteptată (adică un asistent
conntrack a configurat-o).
- SEEN_REPLY
- Conntrack a văzut pachete în ambele direcții.
- ASSURED
- Intrarea conntrack nu trebuie să fie niciodată
expirată înainte de termen.
- CONFIRMED
- Conexiunea este confirmată: pachetul de origine a
părăsit locația.
- [!] --cpu număr
- Potrivește cpu-ul care gestionează acest pachet. cpu-urile
sunt numerotate de la 0 la NR_CPU-1 Poate fi utilizat în
combinație cu RPS (Remote Packet Steering) sau cu NIC-uri cu
multiple cozi pentru a repartiza traficul de rețea 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
Disponibilă începând cu Linux 2.6.36.
- [!] --source-port,--sport
port[:port]
- [!] --destination-port,--dport
port[:port]
- [!] --dccp-types masca
- Potrivește atunci când tipul de pachet DCCP este unul dintre
„mask”. „mask” este o listă de tipuri
de pachete separate prin virgule. Tipurile de pachete sunt: REQUEST
RESPONSE DATA ACK DATAACK CLOSEREQ CLOSE RESET SYNC SYNCACK
INVALID.
- [!] --dccp-option număr
- Se potrivește dacă este definită opțiunea
DCCP.
Potrivește grupul de dispozitive al interfeței de
intrare/ieșire a unui pachet.
- [!] --src-group nume
- Potrivește grupul de dispozitive al dispozitivului de intrare
- [!] --dst-group nume
- Potrivește grupul de dispozitive al dispozitivului de
ieșire
Acest modul corespunde câmpului DSCP de 6 biți din
câmpul TOS din antetul IP. DSCP a înlocuit TOS în
cadrul IETF.
- [!] --dscp valoare
- Potrivire cu o valoare numerică (zecimală sau
hexazecimală) 0-63.
- [!] --dscp-class clasa
- Potrivește clasa DiffServ. Această valoare poate fi oricare
dintre clasele BE, EF, AFxx sau CSx. Aceasta va fi apoi convertită
în valoarea sa numerică corespunzătoare.
Acest modul corespunde parametrilor din antetul opțiunilor
de destinație
- [!] --dst-len lungime
- Lungimea totală a acestui antet în octeți.
- --dst-opts
tip[:lungime][,tip[:lungime]...]
- tipul numeric al opțiunii și lungimea datelor
opțiunii în octeți.
Acest lucru vă permite să potriviți
biții ECN din antetul IPv4/IPv6 și TCP. ECN este mecanismul de
notificare explicită a congestiei, astfel cum este specificat
în RFC3168
- [!] --ecn-tcp-cwr
- Aceasta se potrivește dacă bitul TCP ECN CWR (Congestion
Window Received) este activat.
- [!] --ecn-tcp-ece
- Aceasta se potrivește dacă bitul TCP ECN ECE (ECN Echo) este
activat.
- [!] --ecn-ip-ect număr
- Aceasta se potrivește cu un anumit IPv4/IPv6 ECT (ECN-Capable
Transport). Trebuie să specificați un număr
între „0” și „3”.
Acest modul potrivește SPI-urile din antetul ESP al
pachetelor IPsec.
- [!] --espspi spi[:spi]
Acest modul potrivește partea EUI-64 a unei adrese IPv6
autoconfigurate stateless. Acesta compară EUI-64 derivat din adresa
MAC sursă din cadrul Ethernet cu cei 64 de biți inferiori ai
adresei sursă IPv6. Dar bitul „Universal/Local” nu este
comparat. Acest modul nu se potrivește cu alte cadre de strat de
legătură și este valabil numai în
lanțurile PREROUTING, INPUT și
FORWARD.
Acest modul potrivește parametrii din antetul Fragment.
- [!] --fragid id[:id]
- Potrivește identificarea dată sau un interval al
acesteia.
- [!] --fraglen lungime
- Această opțiune nu poate fi utilizată cu versiunea de
nucleu 2.6.10 sau ulterioară. Lungimea antetului Fragment este
statică și această opțiune nu are sens.
- --fragres
- Se potrivește dacă câmpurile rezervate sunt
completate cu zero.
- --fragfirst
- Se potrivește cu primul fragment.
- --fragmore
- Se potrivește dacă există mai multe fragmente.
- --fraglast
- Se potrivește dacă acesta este ultimul fragment.
hashlimit utilizează
„găleți” hash pentru a exprima o potrivire de
limitare a ratei (precum potrivirea limitei) pentru un grup de
conexiuni utilizând o singură regulă iptables.
Gruparea se poate face pe grup de gazde (adresă sursă
și/sau destinație) și/sau pe port. Aceasta vă
oferă posibilitatea de a exprima „N pachete per
măsură-timp per grup” sau „N
octeți per secundă” (a se vedea mai jos pentru
câteva exemple).
Sunt necesare opțiunile de limită hash
(--hashlimit-upto, --hashlimit-above) și
--hashlimit-name.
- --hashlimit-upto
cantitate[/second|/minute|/hour|/day]
- Se potrivește dacă rata este mai mică sau
egală cu cantitatea/măsură-timp. Aceasta este
specificată fie ca număr, cu un sufix opțional de
măsură-timp de timp (valoarea implicită este
3/oră), fie ca amountb/secundă (număr de
octeți pe secundă).
- --hashlimit-above
cantitate[/second|/minute|/hour|/day]
- Se potrivește dacă rata este mai mare de
cantitate/măsură-timp.
- --hashlimit-burst cantitate
- Numărul inițial maxim de pachete pentru potrivire: acest
număr se reîncarcă cu unu de fiecare dată
când limita specificată mai sus nu este atinsă,
până la acest număr; valoarea implicită este
5. Atunci când se solicită potrivirea ratei pe bază
de octeți, această opțiune specifică
cantitatea de octeți care poate depăși rata
dată. Această opțiune trebuie utilizată cu
prudență - dacă intrarea expiră, valoarea
burst este și ea reinițializată.
- --hashlimit-mode
{srcip|srcport|dstip|dstport},...
- O listă separată prin virgule de obiecte care trebuie luate
în considerare. Dacă nu este furnizată
opțiunea „--hashlimit-mode”, hashlimit
acționează ca limită, dar la prețul de a face
curățenie în hash.
- --hashlimit-srcmask prefix
- Atunci când se utilizează „--hashlimit-mode
srcip”, toate adresele sursă întâlnite vor fi
grupate în funcție de lungimea prefixului dat, iar
subrețeaua astfel creată va fi supusă hashlimit.
prefix trebuie să fie între (inclusiv) 0 și
32. Rețineți că „--hashlimit-srcmask 0”
face practic același lucru ca și nespecificarea
«srcip» pentru „--hashlimit-mode”, dar este
tehnic mai costisitor.
- --hashlimit-dstmask prefix
- Ca „--hashlimit-srcmask”, dar pentru adresele de
destinație.
- --hashlimit-name foo
- Numele pentru intrarea /proc/net/ipt_hashlimit/foo.
- --hashlimit-htable-size găleți
- Numărul de găleți ale tabelului hash
- --hashlimit-htable-max intrări
- Numărul maxim de intrări în tabelul hash.
- --hashlimit-htable-expire msec
- După câte milisecunde expiră intrările
hash.
- --hashlimit-htable-gcinterval msec
- Câte milisecunde sunt între intervalele de colectare a
gunoiului.
- --hashlimit-rate-match
- Clasificarea fluxului în loc de limitarea ratei acestuia. Aceasta
acționează ca o potrivire adevărat/fals dacă
rata este mai mare/mai mică decât un anumit
număr
- --hashlimit-rate-interval sec
- Poate fi utilizată cu „--hashlimit-rate-match” pentru
a specifica intervalul la care rata ar trebui să fie
eșantionată
Exemple:
- potrivire pe gazda
sursă
- „1000 de pachete pe secundă pentru fiecare gazdă din
192.168.0.0/16” => -s 192.168.0.0/16 --hashlimit-mode srcip
--hashlimit-upto 1000/sec
- potrivire pe
portul sursă
- „100 de pachete pe secundă pentru fiecare serviciu de la
192.168.1.1” => -s 192.168.1.1 --hashlimit-mode srcport
--hashlimit-upto 100/sec
- potrivire pe
subrețea
- „10000 de pachete pe minut pentru fiecare subrețea /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
octeți pe secundă
- „fluxuri care depășesc 512kocteți/s"
=> --hashlimit-mode srcip,dstip,srcport,dstport --hashlimit-above
512kb/s
- potrivire de
octeți pe secundă
- „gazde care depășesc 512kocteți/s, dar permit
până la 1Megaocteți fără
potrivire” --hashlimit-mode dstip --hashlimit-above 512kb/s
--hashlimit-burst 1mb
Acest modul corespunde parametrilor din antetul de opțiuni
Hop-by-Hop
- [!] --hbh-len lungime
- Lungimea totală a acestui antet în octeți.
- --hbh-opts
tip[:lungime][,tip[:lungime]...]
- tipul numeric al opțiunii și lungimea datelor
opțiunii în octeți.
Acest modul potrivește pachetele legate de un anumit
asistent conntrack.
- [!] --helper șir
- Potrivește pachetele referitoare la asistentul conntrack
specificat.
șirul poate fi „ftp” pentru pachetele
referitoare la o sesiune ftp pe portul implicit. Pentru alte porturi,
adăugați „--portnr” la valoare, adică
„ftp-2121”.
Aceleași reguli se aplică și pentru
ceilalți asistenți conntrack.
Acest modul corespunde câmpului Hop Limit din antetul
IPv6.
- [!] --hl-eq valoare
- Se potrivește dacă limita Hop este egală cu
valoare.
- --hl-lt
valoare
- Se potrivește dacă limita Hop este mai mică
decât valoare.
- --hl-gt
valoare
- Se potrivește dacă limita Hop este mai mare decât
valoare.
Această extensie poate fi utilizată dacă este
specificat „--protocol icmp”. Aceasta oferă
următoarea opțiune:
- [!] --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
afișate de comanda
iptables -p icmp -h
Această extensie poate fi utilizată dacă se
specifică „---protocol ipv6-icmp” sau
„---protocol icmpv6”. Aceasta oferă următoarea
opțiune:
- [!] --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 afișate de comanda
ip6tables -p ipv6-icmp -h
Aceasta se potrivește cu un anumit interval arbitrar de
adrese IP.
- [!] --src-range de-la[-la]
- Potrivește IP-ul sursă în intervalul specificat.
- [!] --dst-range de-la[-la]
- Potrivește IP-ul destinației în intervalul
specificat.
Acest modul corespunde antetelor de extensie IPv6 și/sau
antetelor de nivel(strat) superior.
- --soft
- Potrivește dacă pachetul include any din antetele
specificate cu --header.
- [!] --header antet[,antet...]
- Potrivește pachetul care include EXACT toate antetele specificate.
Antetele încapsulate cu antetul ESP sunt excluse din domeniu.
Tipurile posibile de antet pot fi:
- hop|hop-by-hop
- Antetul de opțiuni Hop-by-Hop
- dst
- Antetul de opțiuni destinație
- route
- Antetul de direcționare
- frag
- Antetul fragmentelor
- auth
- Antetul de autentificare
- esp
- Antetul încapsulării sarcinii de securitate (Encapsulating
Security Payload)
- none
- Niciun antet Next(următor) care să corespundă cu 59
din câmpul antetul următor „Next Header field”
al antetului IPv6 sau orice antet de extensie IPv6
- prot
- care se potrivește cu orice antet de protocol de nivel(strat)
superior. De asemenea, sunt permise un nume de protocol din
„/etc/protocols” și o valoare numerică.
Numărul 255 este echivalent cu prot.
Potrivește proprietățile conexiunii IPVS.
- [!] --ipvs
- pachetul aparține unei conexiuni IPVS
- Oricare dintre
următoarele opțiuni implică opțiunea
„--ipvs” (chiar și negată)
- [!] --vproto protocol
- Protocolul VIP care urmează să se potrivească; prin
număr sau nume, de exemplu „tcp”
- [!] --vaddr adresa[/masca]
- Adresa VIP pentru potrivire
- [!] --vport port
- Portul VIP care trebuie să corespundă; prin număr sau
nume, de exemplu „http”
- --vdir
{ORIGINAL|REPLY}
- direcția fluxului pachetului
- [!] --vmethod {GATE|IPIP|MASQ}
- Metoda de redirecționare IPVS utilizată
- [!] --vportctl port
- Portul VIP al conexiunii de control care trebuie să
corespundă, de exemplu 21 pentru FTP
Acest modul potrivește lungimea
încărcăturii utile de nivel 3 (de exemplu, pachetul de
nivel 4) a unui pachet cu o anumită valoare sau gamă de
valori.
- [!] --length lungimea[:lungimea]
Acest modul se potrivește la o rată limitată
utilizând un filtru de tip „token bucket”. O
regulă care utilizează această extensie se va potrivi
până când această limită este
atinsă. Poate fi utilizat în combinație cu ținta
LOG pentru a oferi o jurnalizare limitată, de exemplu.
xt_limit nu acceptă negarea - va trebui să
utilizați „-m hashlimit ! --hashlimit rate”
în acest caz, omițând în același timp
„--hashlimit-mode”.
- --limit
rata[/second|/minute|/hour|/day]
- Rata medie maximă de potrivire: specificată ca număr,
cu un sufix opțional „/second”,
„/minute”, „/hour” sau „/day”;
valoarea implicită este 3/hour.
- --limit-burst număr
- Numărul inițial maxim de pachete care se potrivesc: acest
număr se reîncarcă cu unu de fiecare dată
când limita specificată mai sus nu este atinsă,
până la acest număr; valoarea implicită este
5.
- [!] --mac-source adresa
- Potrivește adresa MAC sursă. Aceasta trebuie să fie
de forma XX:XX:XX:XX:XX:XX:XX. Rețineți că acest
lucru are sens numai pentru pachetele care provin de la un dispozitiv
Ethernet și intră în lanțurile
PREROUTING, FORWARD sau INPUT.
Acest modul corespunde câmpului de marcaj netfilter asociat
unui pachet (care poate fi definit utilizând ținta MARK
de mai jos).
- [!] --mark valoare[/masca]
- Potrivește pachetele cu valoarea marcajului fără semn
dată (dacă este specificată o mască,
aceasta este logic AND corelată cu masca înainte de
comparație).
Această extensie este încărcată
dacă se specifică „---protocol ipv6-mh” sau
„---protocol mh”. Aceasta oferă următoarea
opțiune:
- [!] --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 afișate de comanda
ip6tables -p mh -h
Acest modul se potrivește cu un set de porturi sursă
sau destinație. Pot fi specificate până la 15 porturi.
Un interval de porturi (port:port) contează ca două porturi.
Poate fi utilizat numai împreună cu unul dintre
următoarele protocoale: tcp, udp, udplite,
dccp și sctp.
- [!] --source-ports,--sports
port[,port|,port:port]...
- Se potrivește dacă portul sursă este unul dintre
porturile date. Indicatorul --sports este un alias convenabil
pentru această opțiune. Mai multe porturi sau intervale de
porturi sunt separate prin virgulă, iar un interval de porturi este
specificat prin două 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 potrivește dacă portul de destinație este unul
dintre porturile date. Indicatorul --dports este un alias
convenabil pentru această opțiune.
- [!] --ports
port[,port|,port:port]...
- Se potrivește dacă porturile sursă sau
destinație sunt egale cu unul dintre porturile date.
Potrivirea nfacct furnizează infrastructura de
contabilizare extinsă pentru iptables. Trebuie să
utilizați această potrivire împreună cu
utilitatea autonomă din spațiul utilizatorului
nfacct(8)
Singura opțiune disponibilă pentru această
potrivire este următoarea:
- --nfacct-name nume
- Aceasta vă permite să specificați numele obiectului
existent care va fi utilizat pentru contabilizarea traficului care
corespunde acestui set de reguli.
Pentru a utiliza această extensie, trebuie să
creați un obiect contabil:
- nfacct add http-traffic
Apoi, trebuie să îl atașați 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, puteți verifica cantitatea de trafic care corespunde
regulilor:
- nfacct get http-traffic
- { pkts = 00000000000000000156, bytes = 00000000000000151786 } =
http-traffic;
Puteți obține nfacct(8) de la
https://www.netfilter.org sau, alternativ, din depozitul
git.netfilter.org.
Modulul osf realizează amprentarea pasivă a
sistemului de operare. Acest modul compară anumite date (dimensiunea
ferestrei, MSS, opțiunile și ordinea lor, TTL, DF și
altele) din pachetele cu bitul SYN activat.
- [!] --genre șir
- Potrivește un gen de sistem de operare folosind o amprentă
pasivă.
- --ttl
nivel
- Efectuează verificări TTL suplimentare asupra pachetului
pentru a determina sistemul de operare. nivel poate fi una dintre
următoarele valori:
- 0
- Comparație TTL reală între adresa IP și
amprenta digitală. Aceasta funcționează în
general pentru LAN-uri.
- 1
- Verifică dacă TTL-ul antetului IP este mai mic decât
cel al amprentei. Funcționează pentru adresele ce pot fi
direcționate la nivel global.
- 2
- Nu compară deloc TTL--ul.
- --log
nivel
- Înregistrează genurile determinate în dmesg chiar
dacă acestea nu corespund cu cel dorit. nivel poate fi una
dintre următoarele valori:
- 0
- Înregistrează toate semnăturile care corespund sau
necunoscute
- 1
- Înregistrează numai prima
- 2
- Înregistrează toate semnăturile cunoscute care
corespund
Este posibil să găsiți așa ceva
în 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 încărcate cu ajutorul
programului nfnl_osf. Pentru a încărca amprente
digitale dintr-un fișier, utilizați:
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
descărcată de la
http://www.openbsd.org/cgi-bin/cvsweb/src/etc/pf.os .
Acest modul încearcă să corespundă
diferitelor caracteristici ale creatorului pachetului, pentru pachetele
generate local. Această potrivire este valabilă numai
în lanțurile OUTPUT și POSTROUTING. Pachetele transmise
nu au niciun soclu asociat cu ele. Pachetele provenite de la firele de
execuție ale nucleului au un soclu, dar de obicei nu au
proprietar.
- [!] --uid-owner nume-utilizator
- [!] --uid-owner
id-utilizator[-id-utilizator]
- Verifică dacă structura de fișiere a soclului de
pachete (dacă are una) este deținută de utilizatorul
dat. De asemenea, puteți specifica un UID numeric sau un interval
UID.
- [!] --gid-owner nume-grup
- [!] --gid-owner id-grup[-id-gru]
- Verifică dacă structura de fișiere a soclului de
pachete este deținută de grupul dat. De asemenea,
puteți specifica un GID numeric sau un interval GID.
- --suppl-groups
- Face ca grupul sau grupurile specificate cu --gid-owner să
fie verificate și în grupurile suplimentare ale unui
proces.
- [!] --socket-exists
- Verifică dacă pachetul este asociat cu un soclu.
Acest modul se potrivește cu dispozitivele de intrare
și ieșire ale portului de punte aservite unui dispozitiv de
punte. Acest modul face parte din infrastructura care permite un paravan de
protecție IP cu punte transparentă ș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 intră în lanțurile INPUT,
FORWARD și PREROUTING). Dacă numele
interfeței se termină cu un „+”, atunci se va
potrivi orice interfață care începe cu acest nume.
Dacă pachetul nu a ajuns printr-un dispozitiv punte, acest pachet
nu va corespunde acestei opțiuni, cu excepția cazului
în care se utilizează „!”.
- [!] --physdev-out nume
- Numele unui port de punte prin care va fi trimis un pachet (pentru
pachetele de punte care intră în lanțurile
FORWARD și POSTROUTING). Dacă numele
interfeței se termină cu un „+”, atunci se va
potrivi orice interfață care începe cu acest
nume.
- [!] --physdev-is-in
- Se potrivește dacă pachetul a intrat printr-o
interfață punte.
- [!] --physdev-is-out
- Se potrivește dacă pachetul va pleca printr-o
interfață punte.
- [!] --physdev-is-bridged
- Verifică dacă pachetul este conectat prin punte și,
prin urmare, nu este direcționat. Acest lucru este util numai
în lanțurile FORWARD și POSTROUTING.
Acest modul corespunde tipului de pachet din stratul de
legătură(conexiune).
- [!] --pkt-type
{unicast|broadcast|multicast}
Acest modul se potrivește cu politica utilizată de
IPsec pentru gestionarea unui pachet.
- --dir
{in|out}
- Utilizat pentru a selecta dacă să se potrivească
politica utilizată pentru decapsulare sau politica care va fi
utilizată pentru încapsulare. in este valabil
în lanțurile PREROUTING, INPUT și FORWARD,
out este valabil în lanțurile POSTROUTING, OUTPUT
și FORWARD.
- --pol
{none|ipsec}
- Verifică dacă pachetul este supus procesării IPsec.
--pol none nu poate fi combinată cu --strict.
- --strict
- Selectează dacă să se potrivească cu politica
exactă sau să se potrivească dacă orice
regulă a politicii se potrivește cu politica
dată.
Pentru fiecare element de politică care urmează
să fie descris, se pot utiliza una sau mai multe dintre
următoarele opțiuni. Atunci când --strict este
în vigoare, trebuie utilizată cel puțin una pentru
fiecare element.
- [!] --reqid id
- Se potrivește cu reqid-ul regulii de politică. Reqid poate
fi specificat cu setkey(8) folosind unique:id ca nivel.
- [!] --spi spi
- Se potrivește cu SPI al SA.
- [!] --proto {ah|esp|ipcomp}
- Potrivește protocolul de încapsulare.
- [!] --mode {tunnel|transport}
- Potrivește modul de încapsulare.
- [!] --tunnel-src adresa[/masca]
- Se potrivește cu adresa punctului final sursă al unui SA
în mod tunel. Valabilă numai cu --mode tunnel.
- [!] --tunnel-dst adresa[/masca]
- Se potrivește cu adresa punctului final de destinație al
unui SA în mod tunel. Valabilă numai cu --mode
tunnel.
- --next
- Începe următorul element din specificația politicii.
Poate fi utilizată numai cu --strict.
Implementează cotele de rețea prin decrementarea
unui contor de octeți cu fiecare pachet. Condiția se
potrivește până când contorul de octeți
ajunge la zero. Comportamentul este inversat în cazul negației
(de exemplu, condiția nu corespunde până când
contorul de octeți ajunge la zero).
- [!] --quota octeți
- Cota exprimată în octeți.
Estimatorul de rată se poate potrivi cu ratele estimate
colectate de obiectivul RATEEST. Acesta acceptă potrivirea pe baza
valorilor absolute bps/pps, compararea a două estimatoare de
rată și potrivirea pe baza diferenței dintre
două estimatoare de rată.
Pentru o mai bună înțelegere a
opțiunilor disponibile, acestea sunt toate combinațiile
posibile:
- Absolută
- rateest operator rateest-bps
- rateest operator rateest-pps
- Absolută +
Delta:
- (rateest minus rateest-bps1) operator
rateest-bps2
- (rateest minus rateest-pps1) operator
rateest-pps2
- Relativă:
- rateest1 operator rateest2
rateest-bps(fără rată!)
- rateest1 operator rateest2
rateest-pps(fără rată!)
- Relativă +
Delta:
- (rateest1 minus rateest-bps1) operator
(rateest2 minus rateest-bps2)
- (rateest1 minus rateest-pps1) operator
(rateest2 minus rateest-pps2)
- --rateest-delta
- Pentru fiecare estimator (în mod absolut sau relativ), se
calculează diferența dintre debitul determinat de estimator
și valoarea statică aleasă cu opțiunile
BPS/PPS. Dacă debitul este mai mare decât BPS/PPS
specificat, se va utiliza 0 în loc de o valoare negativă. Cu
alte cuvinte, se utilizează „max(0, rateest#_rate -
rateest#_bps)”.
- [!] --rateest-lt
- Se potrivește dacă rata este mai mică decât
rata/estimatorul dat.
- [!] --rateest-gt
- Se potrivește dacă rata este mai mare decât
rata/estimatorul dat.
- [!] --rateest-eq
- Se potrivește dacă rata este egală cu
rata/estimatorul dat.
În așa-numitul „mod absolut”, se
utilizează un singur estimator de rată și se
compară cu o valoare statică, în timp ce în
„modul relativ”, doi estimatori de rată sunt
comparați unul cu celălalt.
- --rateest nume
- Numele estimatorului cu o rată pentru modul absolut.
- --rateest1
nume
- --rateest2
nume
- Numele celor doi estimatori de rată pentru modul relativ.
- --rateest-bps [valoare]
- --rateest-pps [valoare]
- --rateest-bps1 [valoare]
- --rateest-bps2 [valoare]
- --rateest-pps1 [valoare]
- --rateest-pps2 [valoare]
- Compară estimatorul (estimatorii) pe octeți sau pachete pe
secundă și compară cu valoarea aleasă.
Consultați lista de puncte de mai sus pentru a afla care
opțiune trebuie utilizată în 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 în care pot fi
direcționate conexiunile de date de ieșire de la un server FTP
pe două linii, în funcție de lățimea de
bandă disponibilă în momentul în care a fost
inițiată conexiunea de date:
# Estimarea ratelor de ieșire
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 bazată pe lățimea de bandă
disponibilă
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
Aceasta corespunde domeniului de direcționare. Domeniile de
direcționare sunt utilizate în configurații de
direcționare complexe care implică protocoale de
direcționare dinamice precum BGP.
- [!] --realm valoare[/masca]
- Potrivește un număr de domeniu dat (și,
opțional, o mască). Dacă nu este un număr,
valoarea poate fi un domeniu numit din
„/etc/iproute2/rt_realms” (masca nu poate fi
utilizată în acest caz). Atât valoarea, cât
și masca sunt numere întregi fără semn de
patru octeți și pot fi specificate în zecimal,
hexazecimal (prin prefixarea cu "0x") sau octal (dacă se
indică un zero în față).
Vă permite să creați în mod dinamic o
listă de adrese IP și apoi să le comparați cu
lista respectivă în mai multe moduri diferite.
De exemplu, puteți crea o listă de
„răufăcători” cu persoanele care
încearcă să se conecteze la portul 139 din paravanul
dvs de protecție și apoi să ARUNCAȚI toate
pachetele viitoare de la acestea fără a le lua în
considerare.
--set, --rcheck, --update și
--remove se exclud reciproc.
- --name
nume
- Specifică lista de utilizat pentru comenzi. Dacă nu este
specificat niciun nume, atunci se va utiliza DEFAULT.
- [!] --set
- Aceasta va adăuga adresa sursă a pachetului în
listă. Dacă adresa sursă se află deja
în listă, aceasta va actualiza intrarea existentă.
Aceasta va returna întotdeauna un răspuns de succes (sau de
eșec dacă este specificat !).
- --rsource
- Potrivește/salvează adresa sursă a fiecărui
pachet din tabelul listei recente. Aceasta este valoarea
implicită.
- --rdest
- Potrivește/salvează adresa de destinație a
fiecărui pachet din tabelul listei recente.
- --mask
mască-rețea
- Masca de rețea care va fi aplicată acestei liste
recente.
- [!] --rcheck
- Verifică dacă adresa sursă a pachetului se
află în prezent în listă.
- [!] --update
- La fel ca --rcheck, cu excepția faptului că va
actualiza marca temporală „last seen” (văzut
ultima dată) dacă se potrivește.
- [!] --remove
- Verifică dacă adresa sursă a pachetului se
află în prezent în listă și,
dacă da, adresa respectivă va fi eliminată din
listă, iar regula va returna „true”. Dacă
adresa nu este găsită, se returnează
„false”.
- --seconds
secunde
- Această opțiune trebuie utilizată
împreună cu una dintre opțiunile --rcheck sau
--update. Atunci când este utilizată, această
opțiune va restrânge potrivirea pentru a avea loc numai
atunci când adresa se află în listă și
a fost văzută în ultimul număr dat de
secunde.
- --reap
- Această opțiune poate fi utilizată numai
împreună cu --seconds. Atunci când este
utilizată, aceasta va determina purjarea intrărilor mai
vechi decât ultimul număr de secunde dat.
- --hitcount
hits
- Această opțiune trebuie utilizată
împreună cu una dintre opțiunile --rcheck sau
--update. Atunci când este utilizată, această
opțiune va restrânge potrivirea pentru a avea loc numai
atunci când adresa este în listă și au fost
primite pachete mai mari sau egale cu valoarea dată. Această
opțiune poate fi utilizată împreună cu
--seconds pentru a crea o potrivire și mai
îngustă care necesită un anumit număr de
rezultate într-un anumit interval de timp.
- --rttl
- Această opțiune poate fi utilizată numai
împreună cu una dintre opțiunile --rcheck sau
--update. Atunci când este utilizată, această
opțiune va restrânge potrivirea pentru a avea loc numai
atunci când adresa se află în listă și
TTL-ul pachetului curent corespunde cu cel al pachetului care a corespuns
reguii --set. Acest lucru poate fi util dacă aveți
probleme cu persoane care își falsifică adresa
sursă pentru a vă face DoS prin intermediul acestui modul,
interzicând accesul altora la situl dumneavoastră prin
trimiterea de pachete false către dumneavoastră.
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 informații despre fiecare intrare din fiecare
listă.
Fiecare fișier din /proc/net/xt_recent/ poate fi
citit pentru a vedea lista curentă sau scris folosind
următoarele comenzi pentru a modifica lista:
- echo +addr
>/proc/net/xt_recent/DEFAULT
- pentru a adăuga 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 intrările).
Modulul în sine acceptă parametri, cu valorile
implicite afișate:
- ip_list_tot=100
- Numărul de adrese memorate per tabel.
- ip_pkt_list_tot=0
- Numărul de pachete pe adresă memorată. Acest
parametru este obsolet de la versiunea 3.19 a nucleului, care a
început să calculeze dimensiunea tabelului pe baza
parametrului --hitcount dat.
- ip_list_hash_size=0
- Dimensiunea tabelului de sume de control (hash). 0 înseamnă
calcularea acesteia pe baza ip_list_tot prin rotunjire la
următoarea putere a lui doi (cu ip_list_tot implicit la
100, ip_list_hash_size va calcula implicit la
128).
- ip_list_perms=0644
- Permisiuni pentru fișierele
„/proc/net/xt_recent/*”.
- ip_list_uid=0
- UID numeric pentru proprietarul fișierelor
„/proc/net/xt_recent/*”.
- ip_list_gid=0
- GID numeric pentru proprietarul fișierelor
„/proc/net/xt_recent/*”.
Efectuează un test de filtrare a rutei inverse pe un
pachet. Dacă un răspuns la pachet ar fi trimis prin
aceeași interfață pe care a sosit pachetul, pachetul va
corespunde. Rețineți că, spre deosebire de rp_filter
din nucleu, pachetele protejate prin IPSec nu sunt tratate în mod
special. Combinați această potrivire cu potrivirea de
politică dacă doriți acest lucru. De asemenea,
pachetele care sosesc prin interfața „loopback” sunt
întotdeauna permise. Această potrivire poate fi
utilizată numai în lanțul PREROUTING din tabelul
„raw” sau „mangle”.
- --loose
- Utilizat pentru a specifica faptul că testul filtrului de cale
inversă trebuie să corespundă chiar dacă
dispozitivul de ieșire selectat nu este cel așteptat.
- --validmark
- De asemenea, utilizează valoarea „nfmark” a
pachetelor atunci când efectuează căutarea rutei pe
calea inversă.
- --accept-local
- Acest lucru va permite pachetelor care sosesc din rețea cu o
adresă sursă care este, de asemenea, atribuită
calculatorului local.
- --invert
- Aceasta va inversa sensul potrivirii. În loc să se
potrivească pachetele care au trecut testul filtrului de cale
inversă, se potrivesc cele care nu l-au trecut.
Exemplu de înregistrare și eliminare a pachetelor
care nu trec testul filtrului de cale inversă:
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 eșuate,
fără înregistrare în jurnal:
iptables -t raw -A RPFILTER -m rpfilter --invert -j DROP
Potrivire pe antetul de direcționare IPv6
- [!] --rt-type tip
- Potrivește tipul (numeric).
- [!] --rt-segsleft
număr[:număr]
- Potrivește câmpul „segmente din stânga”
(interval).
- [!] --rt-len lungime
- Potrivește lungimea acestui antet.
- --rt-0-res
- Potrivește și câmpul rezervat (type=0)
- --rt-0-addrs
adresa[,adresa...]
- Potrivește adresele de tip 0 „type=0”
(listă).
- --rt-0-not-strict
- Lista de adrese de tip 0 „type=0” nu este o listă
strictă.
Acest modul se potrivește 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-bucată[:fanioane] [...]
- Literele fanionului în majuscule indică faptul că
fanionul trebuie să corespundă dacă este activat,
în minuscule indică faptul că trebuie să
corespundă dacă nu este activat.
Tipuri de potrivire:
- all
- Se potrivește dacă toate tipurile de bucăți
date sunt prezente și fanioanele corespund.
- any
- Se potrivește dacă oricare dintre tipurile de
bucăți date este prezent cu fanioanele date.
- only
- Se potrivește dacă numai tipurile de bucăți
date sunt prezente cu fanioanele date și niciunul nu
lipsește.
Tipuri de bucăți: 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 bucată, 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 înseamnă că steagul trebuie
să fie „dezactivat”, majuscule
înseamnă „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
Acest modul corespunde seturilor IP care pot fi definite prin
ipset(8).
- [!] --match-set nume-set
fanion[,fanion]...
- unde fanioanele sunt lista de specificații 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 (dacă tipul de set este ipportmap)
perechea adresă sursă și port destinație poate
fi găsită în setul specificat. Dacă tipul
setului specificat este de dimensiune unică (de exemplu, ipmap),
atunci comanda va potrivi pachetele pentru care adresa sursă poate
fi găsită în setul specificat.
- --return-nomatch
- Dacă este specificată opțiunea
--return-nomatch și tipul de set acceptă fanionul
nomatch, atunci potrivirea este inversată: o potrivire cu un
element marcat cu nomatch returnează true, în
timp ce o potrivire cu un element simplu returnează
false.
- ! --update-counters
- Dacă opțiunea --update-counters este negată,
atunci contoarele de pachete și de octeți ale elementului
corespunzător din set nu vor fi actualizate. În mod
implicit, contoarele de pachete și de octeți sunt
actualizate.
- ! --update-subcounters
- Dacă opțiunea --update-subcounters este
negată, atunci contoarele de pachete și de octeți ale
elementului corespunzător din setul membru al unei liste de tip set
nu vor fi actualizate. În mod implicit, contoarele de pachete
și de octeți sunt actualizate.
- [!] --packets-eq valoare
- Dacă pachetul se potrivește cu un element din set, se
potrivește numai dacă și contorul de pachete al
elementului se potrivește cu valoarea dată.
- --packets-lt
valoare
- Dacă pachetul se potrivește cu un element din set, se
potrivește numai dacă și contorul de pachete al
elementului este mai mic decât valoarea dată.
- --packets-gt
valoare
- Dacă pachetul se potrivește cu un element din set, se
potrivește numai dacă contorul de pachete al elementului
este mai mare decât valoarea dată.
- [!] --bytes-eq valoare
- Dacă pachetul se potrivește cu un element din set, se
potrivește numai dacă și contorul de octeți al
elementului se potrivește cu valoarea dată.
- --bytes-lt
valoare
- Dacă pachetul se potrivește cu un element din set, se
potrivește numai dacă contorul de octeți al
elementului este mai mic decât valoarea dată.
- --bytes-gt
valoare
- Dacă pachetul se potrivește cu un element din set, se
potrivește numai dacă contorul de octeți al
elementului este mai mare decât valoarea dată.
Opțiunile și fanioanele aferente contoarelor de
pachete și de octeți sunt ignorate atunci când setul a
fost definit fără suport pentru contoare.
Opțiunea --match-set poate fi
înlocuită cu --set dacă aceasta nu intră
în conflict cu o opțiune a altor extensii.
Utilizarea lui -m set necesită ca suportul pentru nucleu
ipset să fie furnizat, ceea ce, pentru nucleele standard, este cazul
începând cu Linux 2.6.39.
Se potrivește dacă un soclu TCP/UDP deschis poate fi
găsit prin căutarea unui soclu pe pachet. Se potrivește
în cazul în care există un soclu de ascultare stabilit
sau conectat în mod diferit de zero (eventual cu o adresă
non-locală). Căutarea se efectuează utilizând
tuplele packet ale pachetelor TCP/UDP sau antetul TCP/UDP original
embedded dintr-un pachet de eroare ICMP/ICPMv6.
- --transparent
- Ignoră soclurile netransparente.
- --nowildcard
- Nu ignoră soclurile legate la adresa „oricare”.
În mod implicit, potrivirea soclurilor nu va accepta
ascultători legați de zero, deoarece astfel serviciile
locale ar putea intercepta traficul care altfel ar fi
redirecționat. Prin urmare, această opțiune are
implicații de securitate atunci când este utilizată
pentru a potrivi traficul redirecționat pentru a
redirecționa astfel de pachete către mașina
locală cu politica de direcționare. Atunci când se
utilizează potrivirea soclului pentru a implementa proxy-uri
complet transparente legate la adrese non-locale, se recomandă
utilizarea opțiunii „--transparent”.
Exemplu (presupunând că pachetele cu marcajul 1 sunt
livrate local):
- -t mangle -A PREROUTING -m socket --transparent -j MARK --set-mark 1
- --restore-skmark
- Stabilește marca pachetului la marca soclului corespunzător.
Poate fi combinată cu opțiunile --transparent
și --nowildcard pentru a restricționa soclurile care
trebuie să corespundă atunci când se
restabilește marca pachetului.
Exemplu: O aplicație deschide 2 socluri transparente
(IP_TRANSPARENT) și le marchează cu opțiunea de
soclu SO_MARK. Putem filtra pachetele corespunzătoare:
- -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
Extensia „state” este un subset al modulului
„conntrack”. „state” permite accesul la starea
de urmărire a conexiunii pentru acest pachet.
- [!] --state starea
- Unde „state” este o listă separată prin
virgule a stărilor conexiunii care trebuie să
corespundă. Numai un subset de stări înțelese
de „conntrack” sunt recunoscute: INVALID,
ESTABLISHED, NEW, RELATED sau UNTRACKED.
Pentru descrierea acestora, consultați rubrica
„conntrack” din această pagină de manual.
Acest modul potrivește pachetele pe baza unor
condiții statistice. Acceptă două moduri distincte
stabilite cu opțiunea --mode.
Opțiuni acceptate:
- --mode
mod
- Stabilește modul de potrivire al regulii de potrivire, modurile
acceptate sunt random și nth.
- [!] --probability p
- Definește probabilitatea ca un pachet să fie comparat
aleatoriu. Funcționează numai cu modul random.
p trebuie să fie între 0,0 și 1,0. Gradul de
finețe acceptat este în incremente de 1/2147483648.
- [!] --every n
- Potrivește un pachet la fiecare al n-lea pachet.
Funcționează numai cu modul nth (a se vedea și
opțiunea --packet).
- --packet
p
- Stabilește valoarea inițială a contorului (0 <= p
<= n-1, implicit 0) pentru modul nth.
Acest modul potrivește un șir dat folosind o
strategie de potrivire a modelelor. Necesită un nucleu linux >=
2.6.14.
- --algo
{bm|kmp}
- Selectează strategia de potrivire a modelelor. (bm = Boyer-Moore,
kmp = Knuth-Pratt-Morris)
- --from
poziția
- Stabilește poziția de la care începe căutarea
oricărei potriviri. Dacă nu este specificată,
valoarea implicită este 0.
- --to
poziția
- Stabilește poziția până la care trebuie
scanat. Adică, octetul poziția-1
(numărând de la 0) este ultimul care este scanat și
poziția maximă a ultimului caracter al modelului.
Dacă nu este specificată, valoarea implicită este
dimensiunea pachetului.
- [!] --string model
- Potrivește modelul dat.
- [!] --hex-string model
- Potrivește modelul dat.
- --icase
- Nu face distincție între majuscule și minuscule
atunci când caută.
- 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|'
Notă: Deoarece Boyer-Moore (BM) efectuează
căutări de potrivire de la dreapta la stânga, iar
nucleul poate stoca un pachet în mai multe blocuri discontinue, este
posibil ca o potrivire să fie răspândită pe mai
multe blocuri, caz în care acest algoritm nu o va găsi.
Dacă doriți să vă asigurați
că un astfel de lucru nu se va întâmpla
niciodată, utilizați în schimb algoritmul
Knuth-Pratt-Morris (KMP). În concluzie, alegeți algoritmul
adecvat de căutare a șirurilor de caractere în
funcție de cazul dvs. de utilizare.
De exemplu, dacă utilizați modulul pentru filtrare,
NIDS sau orice alt scop similar axat pe securitate, atunci alegeți
KMP. Pe de altă parte, dacă vă pasă cu
adevărat de performanță - de exemplu,
clasificați pachetele pentru a aplica politici de calitate a
serviciului (QoS) - și nu vă deranjează să
pierdeți posibile potriviri răspândite pe mai multe
fragmente, atunci alegeți BM.
Aceste extensii pot fi utilizate dacă este
specificată opțiunea „--protocol tcp”. Acesta
oferă următoarele opțiuni:
- [!] --source-port,--sport
port[:port]
- Specificarea portului sursă sau a intervalului de porturi. Acesta
poate fi fie un nume de serviciu, fie un număr de port. De
asemenea, poate fi specificat un interval inclusiv, folosind formatul
primul:ultimul. Dacă primul port este omis, se
presupune „0”; dacă ultimul este omis, se presupune
„65535”. Opțiunea --sport este un alias
convenabil pentru această opțiune.
- [!] --destination-port,--dport
port[:port]
- Specificarea portului de destinație sau a intervalului de porturi.
Opțiunea --dport este un alias convenabil pentru
această opțiune.
- [!] --tcp-flags masca comp
- Se potrivește atunci când fanioanele TCP sunt cele
specificate. Primul argument masca reprezintă fanioanele pe
care trebuie să le examinăm, scrise ca o listă
separată prin virgule, iar al doilea argument comp este o
listă separată prin virgule de fanioane care trebuie
să 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
biții ACK, RST și FIN dezactivați. Aceste pachete
sunt utilizate pentru a solicita inițierea unei conexiuni TCP; de
exemplu, blocarea acestor pachete care intră într-o
interfață va împiedica conexiunile TCP de intrare,
dar conexiunile TCP de ieșire nu vor fi afectate. Este
echivalentă cu --tcp-flags SYN,RST,ACK,FIN SYN. Dacă
fanionul „!” precede „--syn”, sensul
opțiunii este inversat.
- [!] --tcp-option număr
- Se potrivește dacă opțiunea TCP este
activată.
Aceasta corespunde câmpului TCP MSS (dimensiunea
maximă a segmentului) din antetul TCP. Puteți utiliza acest
parametru numai pe pachetele TCP SYN sau SYN/ACK, deoarece MSS este negociat
numai în timpul protocolului TCP de negociere
„handshake” la momentul inițierii conexiunii.
- [!] --mss valoare[:valoare]
- Potrivește o valoare sau un interval TCP MSS dat. Dacă este
dat un interval, a doua valoare trebuie să fie mai mare sau
egală cu prima valoare.
Această opțiune se potrivește dacă
data/ora de sosire a pachetului se încadrează într-un
interval dat Toate opțiunile sunt opționale, dar sunt evaluate
cu „AND” atunci când sunt specificate.Toate orele sunt
interpretate implicit ca UTC.
- --datestart
AAAA[-LL[-ZZ[Thh[:mm[:ss]]]]]
- --datestop
AAAA[-LL[-ZZ[Thh[:mm[:ss]]]]]
- Se potrivește numai în timpul dat, care trebuie să
fie în notația ISO 8601 „T”. Intervalul de
timp posibil este 1970-01-01T00:00:00 până la
2038-01-19T04:17:07.
- În cazul în care „--datestart” sau
„--datestop” nu sunt specificate, se va alege în mod
implicit 1970-01-01 și, respectiv, 2038-01-19.
- --timestart
hh:mm[:ss]
- --timestop
hh:mm[:ss]
- Se potrivește numai în timpul zilei date. Intervalul de timp
posibil este de la 00:00:00 la 23:59:59. Zerourile inițiale sunt
permise (de exemplu, „06:03”) și sunt interpretate
corect ca bază 10.
- [!] --monthdays ziua[,ziua...]
- Se potrivește numai în zilele lunii date. Valorile posibile
sunt de la 1 la 31. Rețineți că
specificarea 31 nu se va potrivi, bineînțeles,
lunilor care nu au ziua 31; același lucru este valabil și
pentru luna februarie cu 28 sau 29 de zile.
- [!] --weekdays ziua[,ziua...]
- Se potrivește numai în zilele
săptămânii 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 două caractere (Mo, Tu etc.).
- --contiguous
- Atunci când valoarea --timestop este mai mică
decât valoarea --timestart, se potrivește ca o
singură perioadă de timp în loc de intervale
distincte. A se vedea EXEMPLE.
- --kerneltz
- Utilizează fusul orar al nucleului în loc de UTC pentru a
determina dacă un pachet respectă reglementările
temporale.
Despre fusurile orare ale nucleului: Linux păstrează
ora sistemului în UTC, și întotdeauna face acest lucru.
La pornire, ora sistemului este inițializată de la o
sursă de timp referențială. În cazul în
care această sursă de timp nu are informații privind
fusul orar, cum ar fi RTC-ul CMOS x86, se va presupune UTC. În cazul
în care sursa de timp nu este totuși în UTC,
spațiul utilizatorului ar trebui să furnizeze nucleului ora
corectă a sistemului și fusul orar, odată ce dispune de
informații.
Ora locală este o caracteristică a orei de sistem
(independentă de fusul orar). Fiecare proces are propria sa idee
despre ora locală, specificată prin intermediul variabilei de
mediu TZ. Nucleul are, de asemenea, propria sa variabilă de decalaj
al fusului orar. Variabila de mediu userpace TZ specifică modul
în care este afișată ora sistemului bazată pe
UTC, de exemplu atunci când executați date(1) sau ceea ce
vedeți pe ceasul de pe birou. Șirul TZ se poate rezolva la
diferite decalaje la date diferite, ceea ce permite saltul automat al orei
în spațiul utilizatorilor. atunci când se
schimbă ora de vară. Variabila de decalare a fusului orar a
nucleului este utilizată atunci când trebuie să
convertească surse non-UTC, cum ar fi sistemele de fișiere
FAT, în UTC (deoarece acesta din urmă este cel utilizat de
restul sistemului).
Problema cu fusul orar al nucleului este că
distribuțiile Linux pot ignora configurarea fusului orar al nucleului
și, în schimb, pot configura doar ora sistemului. Chiar
dacă o anumită distribuție configurează fusul
orar la pornire, de obicei nu menține actualizat decalajul fusului
orar al nucleului, care este cel care se modifică în
funcție de ora de vară. ntpd nu va modifica fusul orar al
nucleului, astfel încât rularea sa nu va rezolva problema.
Astfel, este posibil să se întâlnească un fus
orar care este întotdeauna +0000 sau unul care este greșit
jumătate din timpul anului. Ca atare, utilizarea
„--kerneltz” este foarte descurajată.
EXEMPLE. Pentru a potrivi în „weekend”,
utilizați:
- -m time --weekdays Sa,Su
Sau, să se potrivească (o dată) pe un bloc de
sărbătoare națională:
- -m time --datestart 2007-12-24 --datestop 2007-12-27
Deoarece timpul de oprire este de fapt inclusiv, ar trebui ca
următorul timp de oprire să nu coincidă cu prima
secundă a noii zile:
- -m time --datestart 2007-01-01T17:00 --datestop 2007-01-01T23:59:59
În timpul prânzului:
- -m time --timestart 12:30 --timestop 13:30
A patra zi de vineri din lună:
- -m time --weekdays Fr --monthdays 22,23,24,25,26,27,28
Rețineți că acest lucru exploatează o
anumită proprietate matematică. Nu este posibil să se
spună „a patra zi de joi SAU a patra zi de vineri”
într-o singură regulă. Este posibil, totuși, cu
mai multe reguli.
Potrivirea între zile ar putea să nu aibă
efectul scontat. De exemplu,
- „-m time --weekdays Mo --timestart 23:00 --timestop 01:00”
Se va potrivi luni, timp de o oră, de la miezul nopții
până la ora 1 a.m., și apoi din nou timp de
încă o oră, de la ora 23:00 încolo.
Dacă acest lucru nu este dorit, de exemplu, dacă
doriți „să se potrivească timp de două
ore începând de luni de la ora 23:00”, trebuie
să specificați și opțiunea
„--contiguous” în exemplul de mai sus.
Acest modul corespunde câmpului „Type of
Service” pe 8 biți din antetul IPv4 (adică inclusiv
biții „Precedence”) sau câmpului
„Priority” (tot pe 8 biți) din antetul IPv6.
- [!] --tos valoare[/masca]
- Potrivește pachetele cu valoarea indicatorului TOS dată.
Dacă este specificată o mască, aceasta este logic
evaluată AND cu marcajul TOS înainte de
comparație.
- [!] --tos simbol
- Puteți specifica un nume simbolic atunci când
utilizați potrivirea tos pentru IPv4. Lista de nume TOS recunoscute
poate fi obținută apelând iptables cu -m tos
-h. Rețineți că acest lucru implică o
mască de 0x3F, adică toți biții, cu
excepția celor ECN.
Acest modul se potrivește cu câmpul „time to
live” din antetul IP.
- [!] --ttl-eq ttl
- Se potrivește cu valoarea TTL dată.
- --ttl-gt
ttl
- Se potrivește dacă TTL este mai mare decât valoarea
TTL dată.
- --ttl-lt
ttl
- Se potrivește dacă TTL este mai mic decât valoarea
TTL dată.
U32 testează dacă cantități de
până la 4 octeți extrase dintr-un pachet au valorile
specificate. Specificarea a ceea ce trebuie extras este suficient de
generală pentru a găsi date la anumite distanțe din
antetele sau sarcinile utile tcp.
- [!] --u32 tests
- Argumentul reprezintă un program într-un mic limbaj descris
mai jos.
- tests := location "=" value | tests "&&"
location "=" value
- value := range | value "," range
- range := number | number ":" number
un singur număr, 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 același înțeles ca
în C. = este de fapt un operator de apartenență
la un set, iar sintaxa valorii descrie un set. Operatorul @ este cel
care permite trecerea la următorul antet și este descris mai
jos.
În prezent, există unele limite artificiale de
implementare privind dimensiunea testelor:
- *
- nu mai mult de 10 „=” (și 9
„&&”s) în argumentul u32
- *
- nu mai mult de 10 intervale (și 9 virgule) pentru fiecare
valoare
- *
- nu mai mult de 10 numere (și 9 operatori) pe locație
Pentru a descrie semnificația locației,
imaginați-vă următoarea mașină care o
interpretează. Există trei registre:
- A este de tip char *, inițial adresa antetului IP
- B și C sunt numere întregi de 32 de biți
fără semn, inițial zero
Instrucțiunile 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 efectuează instrucțiunea
„number”
Orice acces la memorie în afara [skb->data,skb->end]
face ca potrivirea să eșueze. În caz contrar,
rezultatul calculului este valoarea finală a lui C.
Spațiul alb este permis, dar nu este obligatoriu în
teste. Cu toate acestea, caracterele care apar acolo sunt susceptibile de a
necesita citarea folosită în shell, deci este o idee
bună să includeți argumentele între
ghilimele.
Exemplu:
- se potrivesc pachetelor IP cu lungimea totală >= 256
- Antetul IP conține un câmp cu lungimea totală
în octeți 2-3.
- --u32 "0 & 0xFFFF = 0x100:0xFFFF"
- citește octeții 0-3
- AND logic cu 0xFFFF (furnizează octeți 2-3) și
verifică dacă această valoare se află
în intervalul permis [0x100: 0xffff]
Exemplu: (mai realist, așadar mai complicat)
- potrivește pachetele ICMP cu tipul icmp 0
- Mai întâi se testează dacă este un pachet
ICMP, adevărat dacă octetul 9 (protocol) = 1
- --u32 "6 & 0xFF = 1 && ...
- citește octeții 6-9, folosește & pentru a
înlătura octeții 6-8 și compară
rezultatul cu 1. Apoi verifică dacă nu este un fragment;
(dacă este, ar putea face parte dintr-un astfel de pachet, dar nu
ne putem da seama întotdeauna.) N.B.: Acest test este în
general necesar dacă doriți să potriviți ceva
dincolo de antetul IP. Ultimii 6 biți din octetul 6 și
toți cei din octetul 7 sunt 0 dacă acesta este un pachet
complet (nu un fragment). Alternativ, puteți permite primele
fragmente testând doar ultimii 5 biți ai octetului 6.
- ... 4 & 0x3FFF = 0 && ...
- Ultimul test: primul octet după antetul IP (tipul) este 0. Aici
trebuie să folosim @syntax. Lungimea antetului IP (IHL) în
cuvinte de 32 de biți este stocată în
jumătatea dreaptă a octetului 0 din antetul IP în
sine.
- ... 0 >> 22 & 0x3C @ 0 >> 24 = 0"
- Primul 0 înseamnă citirea octeților 0-3,
>>22 înseamnă deplasarea celor 22 de
biți la dreapta. Deplasarea a 24 de biți ar da primul octet,
deci numai 22 de biți înseamnă de patru ori mai mult
decât atât plus câțiva biți.
&3C elimină apoi cei doi biți suplimentari din
dreapta și primii patru biți ai primului octet. De exemplu,
dacă IHL=5, atunci antetul IP are o lungime de 20 (4 x 5) de
octeți. În acest caz, octeții 0-1 sunt (în
binar) xxxx0101 yyzzzzzz, >>22 dă valoarea pe 10
biți xxxx0101yy și &3C dă 010100. @
înseamnă să se utilizeze acest număr ca un nou
decalaj în pachet și să se citească patru
octeți începând de acolo. Aceștia sunt primii
4 octeți din sarcina utilă ICMP, din care octetul 0 este
tipul ICMP. Prin urmare, pur și simplu deplasăm valoarea 24
la dreapta pentru a înlătura tot cu excepția primului
octet și comparăm rezultatul cu 0.
Exemplu:
- Octeții de sarcină utilă TCP 8-12 sunt oricare dintre
1, 2, 5 sau 8
- Mai întâi testăm dacă pachetul este un pachet
tcp (similar cu ICMP).
- --u32 "6 & 0xFF = 6 && ...
- Apoi, se testează dacă nu este un fragment (la fel ca mai
sus).
- ... 0 >> 22 & 0x3C @ 12 >> 26 & 0x3C @ 8 =
1,2,5,8"
- 0>>22&3C calculează ca mai sus numărul de
octeți din antetul IP. @ face din acesta noul decalaj
în pachet, care este începutul antetului TCP. Lungimea
antetului TCP (din nou în cuvinte de 32 de biți) este
jumătatea stângă a octetului 12 din antetul TCP.
12>>26&3C calculează această lungime
în octeți (similar cu antetul IP anterior).
„@” face ca acesta să fie noul decalaj, care este
începutul încărcăturii utile TCP. În
cele din urmă, 8 citește octeții 8-12 din sarcina
utilă și = verifică dacă rezultatul
este oricare dintre 1, 2, 5 sau 8.
Aceste extensii pot fi utilizate dacă este specificat
„---protocol udp”. Acesta oferă următoarele
opțiuni:
- [!] --source-port,--sport
port[:port]
- Specificarea portului sursă sau a intervalului de porturi. Pentru
detalii, consultați descrierea opțiunii --source-port
a extensiei TCP.
- [!] --destination-port,--dport
port[:port]
- Specificarea portului de destinație sau a intervalului de porturi.
Pentru detalii, consultați descrierea opțiunii
--destination-port a extensiei TCP.
iptables poate utiliza module țintă extinse:
următoarele sunt incluse în distribuția standard.
Această țintă creează
înregistrări de audit pentru pachetele care ating
ținta. Acesta poate fi utilizat pentru a înregistra pachetele
acceptate, abandonate și respinse. Consultați auditd(8) pentru
detalii suplimentare.
- --type
{accept|drop|reject}
- Stabilește tipul înregistrării de audit.
Începând cu linux-4.12, această opțiune nu mai
are niciun efect asupra mesajelor de audit generate. Este
încă acceptată de iptables din motive de
compatibilitate, dar este ignorată.
Exemplu:
- iptables -N AUDIT_DROP
- iptables -A AUDIT_DROP -j AUDIT
- iptables -A AUDIT_DROP -j DROP
Această țintă funcționează
selectiv în jurul aplicațiilor vechi/nefuncționale.
Poate fi utilizată numai în tabelul de
„mangle”.
- --checksum-fill
- Calculează și completează suma de control
într-un pachet care nu are o sumă de control. Acest lucru
este deosebit de util în cazul în care trebuie să
lucrați cu aplicații vechi, cum ar fi clienții dhcp,
care nu funcționează bine cu descărcarea sumelor de
control, dar nu doriți să dezactivați
descărcarea sumelor de control în dispozitivul
dumneavoastră.
Acest modul vă permite să stabiliți valoarea
skb->priority (și astfel să clasificați pachetul
într-o anumită clasă CBQ).
- --set-class major:minor
- Stabilește valoarea clasei majore și minore. Valorile sunt
întotdeauna interpretate ca fiind hexazecimale, chiar dacă
nu este dat prefixul 0x.
Acest modul vă permite să configurați un
cluster simplu de noduri care împart o anumită adresă
IP și MAC fără a avea în fața lor un
distribuitor de sarcină explicit. Conexiunile sunt distribuite static
între nodurile din acest cluster.
Vă rugăm să rețineți că
obiectivul „CLUSTERIP” este considerat depreciat în
favoarea „cluster match”, care este mai flexibil și nu
este limitat la IPv4.
- --new
- Creează un nou ClusterIP. Întotdeauna trebuie să
definiți acest lucru la prima regulă pentru un anumit
ClusterIP.
- --hashmode
mod
- Specifică modul de „hashing” (calculare a sumelor de
control). Trebuie să fie unul dintre sourceip,
sourceip-sourceport, sourceip-sourceport-destport.
- --clustermac
mac
- Specifică adresa MAC ClusterIP. Trebuie să fie o
adresă de multicast în stratul de
legătură(conexiune)
- --total-nodes
număr
- Numărul total de noduri din acest cluster.
- --local-node
număr
- Numărul nodului local din cadrul acestui cluster.
- --hash-init
rnd
- Specifică sămânța aleatorie utilizată
pentru inițializarea calculării sumelor de controli.
Acest modul stabilește valoarea marcajului netfilter
asociat cu o conexiune. Marca are o lățime de 32 de
biți.
- --set-xmark valoare[/masca]
- Anularea biților indicați de mască și
XOR valoare în ctmark.
- --save-mark
[--nfmask nfmask] [--ctmask ctmask]
- Copiază marca pachetului (nfmark) în marca conexiunii
(ctmark) folosind măștile date. Noua valoare nfmark este
determinată după cum urmează:
- ctmark = (ctmark & ~ctmask) ^ (nfmark & nfmask)
- adică ctmask definește ce biți trebuie
șterși și nfmask ce biți din nfmark
trebuie XOR în ctmark. ctmask și nfmask au
valoarea implicită 0xFFFFFFFF.
- --restore-mark
[--nfmask nfmask] [--ctmask ctmask]
- Copiază marca de conexiune (ctmark) în marca de pachet
(nfmark) folosind măștile date. Noua valoare ctmark este
determinată după cum urmează:
- nfmark = (nfmark & ~nfmask) ^ (ctmark &
ctmask);
- adică nfmask definește ce biți se șterg
și ctmask ce biți din ctmark se XOR în nfmark.
ctmask și nfmask au valoarea implicită
0xFFFFFFFF.
- --restore-mark este valabilă numai în tabelul
mangle.
Următoarele mnemonice sunt disponibile pentru
--set-xmark:
- --and-mark
biți
- AND logic al ctmark-ului cu biți. Mnemonic pentru
--set-xmark 0/invbiți, unde invbiți
este negația binară a lui biți.
- --or-mark
biți
- OR logic al ctmark-ului cu bits. Mnemonic pentru --set-xmark
bits/bits.
- --xor-mark
biți
- XOR logic al ctmark-ului cu bits. Mnemonic pentru
--set-xmark bits/0.
- --set-mark valoare[/masca]
- Definește marcajul conexiunii. Dacă este specificată
o mască, atunci sunt modificați numai biții
definiți în mască.
- --save-mark
[--mask masca]
- Copiază nfmark în ctmark. Dacă este
specificată o mască, sunt copiați numai acei
biți.
- --restore-mark
[--mask masca]
- Copiază marca ct în marca nf. Dacă este
specificată o mască, se copiază numai acei
biți. Acest lucru este valabil numai în tabelul
mangle.
Acest modul copiază marcajele de securitate de la pachete
la conexiuni (dacă nu sunt etichetate) și de la conexiuni
înapoi la pachete (tot numai dacă nu sunt etichetate).
Utilizat de obicei împreună cu SECMARK, este valabil în
tabelul security (pentru compatibilitate cu nucleele mai vechi, este
valabil și în tabelul mangle).
- --save
- Dacă pachetul are un marcaj de securitate, îl copiază
în conexiune dacă conexiunea nu este marcată.
- --restore
- Dacă pachetul nu are un marcaj de securitate, iar conexiunea are,
copiază marcajul de securitate de la conexiune la pachet.
Ținta CT stabilește parametrii pentru un pachet sau
pentru conexiunea asociată acestuia. Ținta
atașează pachetului o intrare „șablon” de
urmărire a conexiunii, care este apoi utilizată de nucleul
conntrack la inițializarea unei noi intrări ct. Prin urmare,
această țintă este valabilă numai în
tabelul „brut”.
- --notrack
- Dezactivează urmărirea conexiunii pentru acest pachet.
- --helper nume
- Utilizează auxiliarul identificat prin nume pentru
conexiune. Acest lucru este mai flexibil decât
încărcarea modulelor „helper conntrack” cu
porturi prestabilite.
- --ctevents
eveniment[,...]
- Generează numai evenimentele conntrack specificate pentru
această conexiune. Tipurile de evenimente posibile sunt:
new, related, destroy, reply, assured,
protoinfo, helper, mark (se referă la ctmark,
nu la nfmark), natseqinfo, secmark (ctsecmark).
- --expevents
eveniment[,...]
- Generează numai evenimentele de așteptare specificate pentru
această conexiune. Tipurile de evenimente posibile sunt:
new.
- --zone-orig
{id|mark}
- Pentru traficul provenit din direcția ORIGINAL, se atribuie acest
pachet zonei id și se efectuează
căutări numai în acea zonă. Dacă se
utilizează mark în loc de id, zona este
derivată din pachetul nfmark.
- --zone-reply
{id|mark}
- Pentru traficul provenit din direcția REPLY, se atribuie acest
pachet zonei id și se efectuează
căutări numai în acea zonă. Dacă se
utilizează mark în loc de id, zona este
derivată din pachetul nfmark.
- --zone
{id|mark}
- Atribuie acest pachet zonei id și efectuează
căutări numai în acea zonă. Dacă se
utilizează mark în loc de id, zona este
derivată din pachetul nfmark. În mod implicit, pachetele au
zona 0. Această opțiune se aplică în ambele
direcții.
- --timeout
nume
- Utilizează politica de timp de așteptare identificată
de nume pentru conexiune. Aceasta oferă o definiție
mai flexibilă a politicii de timp de așteptare decât
valorile globale de timp de așteptare disponibile la
/proc/sys/net/netfilter/nf_conntrack_*_timeout_*.
Această țintă este valabilă numai
în tabelul nat, în lanțurile PREROUTING
și OUTPUT și în lanțurile definite de
utilizator care sunt apelate numai din aceste lanțuri. Aceasta
specifică faptul că adresa de destinație a pachetului
trebuie modificată (și toate pachetele viitoare din
această conexiune vor fi, de asemenea, modificate), iar regulile
trebuie să înceteze să mai fie examinate.
Acceptă următoarele opțiuni:
- --to-destination
[adresa-ip[-adresa-ip]][:port[-port[/port-bază]]]
- care poate specifica o singură adresă IP de
destinație nouă, un interval inclusiv de adrese IP.
Opțional, un interval de porturi, dacă regula
specifică și unul dintre următoarele protocoale:
tcp, udp, dccp sau sctp. Dacă nu este
specificat niciun interval de porturi, atunci portul de destinație
nu va fi niciodată modificat. Dacă nu este
specificată nicio adresă IP, atunci numai portul de
destinație va fi modificat. Dacă se indică
port-bază, diferența dintre portul de
destinație inițial și valoarea acestuia este
utilizată ca decalaj în intervalul de porturi de alocare.
Acest lucru permite crearea de intervale de portmap deplasate și
este disponibil începând cu versiunea 4.18 a nucleului.
Pentru un singur port sau port-bază, se poate utiliza un
nume de serviciu așa cum este listat în
/etc/services.
- --random
- Alocarea aleatorie a porturilor sursă (nucleu >= 2.6.22).
- --persistent
- Oferă unui client aceeași adresă
sursă/destinație pentru fiecare conexiune. Aceasta
înlocuiește ținta SAME. Suportul pentru
corespondențe persistente este disponibil de la versiunea
2.6.29-rc2.
- Suport IPv6 disponibil de
la nucleele Linux >= 3.7.
Asigură traducerea prefixelor de rețea IPv6 la IPv6
de destinație fără păstrarea stării
„stateless” (conform descrierii RFC 6296).
Trebuie să utilizați această
țintă în tabelul mangle, nu în tabelul
nat. Are următoarele opțiuni:
- --src-pfx
[prefix/lungime]
- Definește prefixul sursă pe care doriți să
îl traduceți și lungimea
- --dst-pfx
[prefix/lungime]
- Definește prefixul destinație pe care doriți
să îl traduceți și lungimea
Trebuie să utilizați ț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 să fie necesar să activați un
server proxy IPv6 învecinat:
- sysctl -w net.ipv6.conf.all.proxy_ndp=1
De asemenea, trebuie să utilizați ținta
NOTRACK pentru a dezactiva urmărirea conexiunilor pentru
fluxurile traduse.
Această țintă modifică valoarea
biților DSCP din antetul TOS al pachetului IPv4. Deoarece
această țintă manipulează un pachet, ea poate fi
utilizată numai în tabelul „mangle”.
- --set-dscp valoare
- Definește câmpul DSCP la o valoare numerică (poate fi
zecimală sau hexazecimală)
- --set-dscp-class clasa
- Definește câmpul DSCP la o clasă DiffServ.
Această țintă funcționează
selectiv în jurul găurilor negre ECN cunoscute. Aceasta poate
fi utilizată numai în tabelul „mangle”.
- --ecn-tcp-remove
- Elimină toți biții ECN din antetul TCP. Desigur,
aceasta poate fi utilizată numai împreună cu -p
tcp.
Aceasta este utilizată pentru a modifica câmpul Hop
Limit din antetul IPv6. Câmpul Hop Limit este similar cu ceea ce este
cunoscut sub numele de valoare TTL în IPv4. Stabilirea sau
incrementarea câmpului Hop Limit poate fi foarte periculoasă,
astfel încât ar trebui evitată cu orice preț.
Această țintă este valabilă numai în
tabelul mangle.
Nu stabiliți sau nu incrementați niciodată
valoarea pe pachetele care părăsesc rețeaua
locală!
- --hl-set
valoare
- Stabilește limita de salt (Hop Limit) la
„valoare”.
- --hl-dec
valoare
- Reduce limita de salt de „valoare” de ori.
- --hl-inc
valoare
- Incrementează limita de salt de „valoare” de
ori.
La fel ca MARK, adică stabilește fwmark, dar marca
este calculată din selectorul de pachete hashing la alegere. De
asemenea, trebuie să specificați intervalul de marcare
și, opțional, decalajul de la care să se
înceapă. Mesajele de eroare ICMP sunt inspectate și
utilizate pentru a calcula hashing-ul.
Existing options are:
- --hmark-tuple
tuple
- Membrii tuplelor posibile sunt: src înseamnă adresa
sursă (adresă IPv4, IPv6), dst înseamnă
adresa destinație (adresă IPv4, IPv6), sport
înseamnă portul sursă (TCP, UDP, UDPlite, SCTP,
DCCP), dport înseamnă portul destinație (TCP,
UDP, UDPlite, SCTP, DCCP), spi înseamnă indicele
parametrului de securitate (AH, ESP) și ct
înseamnă utilizarea tuple-ului conntrack în locul
selectorilor de pachete.
- --hmark-mod
valoare (trebuie să fie > 0)
- Modul pentru calculul hash (pentru a limita gama de marcaje posibile)
- --hmark-offset
valoare
- Decalaj de la care să se înceapă marcajele.
- Pentru utilizare
avansată, în loc să utilizați
„--hmark-tuple”, puteți specifica personalizat
- prefixe și măști:
- --hmark-src-prefix
cidr
- Masca adresei sursă în notație CIDR.
- --hmark-dst-prefix
cidr
- Masca adresei de destinație în notație CIDR.
- --hmark-sport-mask
valoare
- O mască a portului sursă de 16 biți în
hexazecimal.
- --hmark-dport-mask
valoare
- O mască a portului de destinație de 16 biți în
hexazecimal.
- --hmark-spi-mask
valoare
- Un câmp de 32 de biți cu mască spi.
- --hmark-proto-mask
valoare
- Un câmp de 8 biți cu numărul protocolului de
nivel(strat) 4.
- --hmark-rnd
valoare
- O valoare personalizată aleatorie de 32 de biți 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
Această țintă poate fi utilizată
pentru a identifica momentul în care interfețele au fost
inactive pentru o anumită perioadă de timp. Temporizatoarele
sunt identificate prin etichete și sunt create atunci când o
regulă este definită cu o etichetă nouă.
Regulile preiau, de asemenea, o valoare de temporizare (în secunde)
ca opțiune. Dacă mai multe reguli utilizează
aceeași etichetă de temporizator, temporizatorul va fi
repornit ori de câte ori oricare dintre reguli primește un
rezultat pozitiv. O intrare pentru fiecare cronometru este creată
în sysfs. Acest atribut conține timpul rămas
până la expirarea temporizatorului. Atributele sunt localizate
sub clasa xt_idletimer:
/sys/class/xt_idletimer/timers/<label>
Când cronometrul expiră, modulul țintă
trimite o notificare sysfs către spațiul utilizatorului, care
poate decide apoi ce să facă (de exemplu, deconectarea pentru
a economisi energie).
- --timeout
timp
- Acesta este timpul în secunde care va declanșa
notificarea.
- --label
șir
- Acesta este un identificator unic pentru temporizator. Lungimea
maximă pentru șirul de etichete este de 27 de
caractere.
Acest lucru creează un declanșator LED care poate fi
atașat apoi la indicatoarele luminoase ale sistemului, pentru a clipi
sau a le aprinde atunci când anumite pachete trec prin sistem. Un
exemplu ar putea fi aprinderea unui LED timp de câteva minute de
fiecare dată când se realizează o conexiune SSH la
mașina locală. Următoarele opțiuni
controlează comportamentul declanșatorului:
- --led-trigger-id
nume
- Acesta este numele dat declanșatorului LED. Numele real al
declanșatorului va fi prefixat cu „netfilter-”.
- --led-delay
ms
- Aceasta indică cât timp (în milisecunde) ar trebui
lăsat LED-ul aprins atunci când sosește un pachet
înainte de a fi stins din nou. Valoarea implicită este 0
(clipește cât mai repede posibil.) Valoarea specială
inf poate fi dată pentru a lăsa LED-ul aprins
permanent odată activat; (în acest caz, declanșatorul
va trebui să fie manual detașat și reatașat de
dispozitivul LED pentru a-l opri din nou).
- --led-always-blink
- Face ca întotdeauna LED-ul să clipească la sosirea
pachetului, chiar dacă LED-ul este deja aprins. Acest lucru permite
notificarea pachetelor noi chiar și cu valori de
întârziere mari (care altfel ar duce la o prelungire
silențioasă a timpului de întârziere).
- Exemplu:
- Creați un
declanșator LED pentru traficul SSH de intrare:
- iptables -A INPUT -p tcp --dport 22 -j LED --led-trigger-id ssh
- Apoi atașați
noul declanșator la un LED:
- echo netfilter-ssh >/sys/class/leds/ledname/trigger
Activează înregistrarea în nucleu a
pachetelor corespunzătoare. Atunci când această
opțiune este definită pentru o regulă, nucleul Linux va
afișa anumite informații despre toate pachetele
corespunzătoare (cum ar fi majoritatea câmpurilor antetului
IP/IPv6) prin intermediul jurnalului nucleului (unde pot fi citite cu
dmesg(1) sau citite în syslog).
Aceasta este o „țintă
non-terminantă”, adică parcurgerea regulii
continuă la următoarea regulă. Prin urmare, dacă
doriți să înregistrați pachetele pe care le
refuzați, utilizați două reguli separate cu
aceleași criterii de potrivire, folosind mai întâi
obiectivul LOG, apoi DROP (sau REJECT).
- --log-level
nivel
- Nivelul de jurnalizare, care poate fi (specific sistemului) numeric sau
mnemonic. Valorile posibile sunt (în ordinea descrescătoare
a priorității): emerg, alert, crit,
error, warning, notice, info sau
debug.
- --log-prefix
prefix
- Prefixează mesajele din jurnal cu prefixul specificat; are o
lungime de până la 29 de litere și este util pentru a
distinge mesajele din jurnale.
- --log-tcp-sequence
- Înregistează numerele de secvență TCP. Acesta
este un risc de securitate dacă jurnalul poate fi citit de
utilizatori.
- --log-tcp-options
- Înregistrează opțiunile din antetul pachetului
TCP.
- --log-ip-options
- Înregistrează opțiunile din antetul pachetului
IP/IPv6.
- --log-uid
- Înregistrează ID-ul de utilizator al procesului care a
generat pachetul.
- --log-macdecode
- Înregistrează adresele MAC și protocolul.
Această țintă este utilizată pentru a
stabili valoarea marcajului Netfilter asociat pachetului. Aceasta poate fi
utilizată, de exemplu, împreună cu direcționarea
bazată pe fwmark (necesită iproute2). Dacă
intenționați să faceți acest lucru,
rețineți că marca trebuie să fie definită
fie în lanțul PREROUTING, fie în lanțul OUTPUT
al tabelului „mangle” pentru a afecta direcționarea.
Câmpul mărcii „mark” are o lățime
de 32 de biți.
- --set-xmark valoare[/masca]
- Reduce la zero biții indicați de mască
și XOR valoare în marcajul pachetului
(„nfmark”). Dacă masca este omisă, se
presupune 0xFFFFFFFF.
- --set-mark valoare[/masca]
- Reduce la zero biții indicați de mască
și face OR cu valoare în marcajul pachetului.
Dacă masca este omis, se presupune 0xFFFFFFFF.
Sunt disponibile următoarele mnemonice:
- --and-mark
biți
- Evaluează AND logic al nfmark-ului cu biți; (mnemonic
pentru --set-xmark 0/invbiți, unde
invbiți este negația binară a lui
biți).
- --or-mark
biți
- Evaluează OR logic al nfmark-ului cu biți; (mnemonic
pentru --set-xmark
biți/biți.)
- --xor-mark
biți
- Evaluează XOR logic al nfmark-ului cu biți; (mnemonic
pentru --set-xmark biți/0.)
Această țintă este valabilă numai
în tabelul nat, în lanțul POSTROUTING.
Aceasta trebuie utilizată numai în cazul conexiunilor IP
alocate dinamic (dialup): dacă aveți o adresă IP
statică, trebuie să utilizați ținta SNAT.
Mascarea este echivalentă cu specificarea unei corespondențe
cu adresa IP a interfeței pe care pleacă pachetul, dar are, de
asemenea, efectul că conexiunile sunt uitate atunci
când interfața cade. Acesta este comportamentul corect atunci
când este puțin probabil ca următorul dialup să
aibă aceeași adresă de interfață
(și, prin urmare, orice conexiune stabilită este oricum
pierdută).
- --to-ports
port[-port]
- Aceasta specifică un interval de porturi sursă care
urmează să fie utilizate, înlocuind euristica
implicită de selectare a porturilor sursă SNAT (a se
vedea mai sus). Acest lucru este valabil numai dacă regula
specifică de asemenea unul dintre următoarele protocoale:
tcp, udp, dccp sau sctp.
- --random
- Face aleatorie cartografierea porturilor sursă (nucleu >=
2.6.21). Începând cu nucleul 5.0, --random este
identică cu --random-fully.
- --random-fully
- Face complet aleatorie cartografierea porturilor sursă (nucleu
>= 3.13).
- Suport IPv6 disponibil
de la nucleele Linux >= 3.7.
Această țintă vă permite
cartografierea statică a unei întregi rețele de adrese
pe o altă rețea de adrese. Aceasta poate fi utilizată
numai din regulile din tabelul nat.
- --to
adresa[/masca]
- Adresa de rețea la care se face cartografierea. Adresa
rezultată va fi construită în felul următor:
Toți biții „unu” din mască sunt
introduși din noua „adresă”. Toți
biții zero din mască sunt introduși din adresa
originală.
- Suport IPv6 disponibil
de la nucleele Linux >= 3.7.
Această țintă asigură
înregistrarea în jurnal a pachetelor corespunzătoare.
Atunci când această țintă este definită
pentru o regulă, nucleul Linux va transmite pachetul către
sistemul de jurnalizare încărcat pentru a înregistra
pachetul. Aceasta este de obicei utilizată în
combinație cu nfnetlink_log ca sistem de jurnalizare, care va
multidifuza pachetul printr-un soclu netlink către grupul de
multidifuzare specificat. Unul sau mai multe procese din spațiul
utilizatorilor se pot abona la grup pentru a primi pachetele. La fel ca LOG,
acesta este un obiectiv non-terminant, adică parcurgerea regulii
continuă la următoarea regulă.
- --nflog-group
nlgroup
- Grupul netlink (0 - 2^16-1) către care sunt direcționate
pachetele (aplicabil numai pentru nfnetlink_log). Valoarea
implicită este 0.
- --nflog-prefix
prefix
- Un șir de prefixe de inclus în mesajul jurnal, cu o lungime
de până la 64 de caractere, util pentru a distinge mesajele
din jurnale.
- --nflog-range
dimensiune
- Această opțiune nu a funcționat niciodată,
folosiți în schimb „--nflog-size”
- --nflog-size
dimensiune
- Numărul de octeți care urmează să fie
copiați în spațiul utilizatorului (aplicabil numai
pentru nfnetlink_log). Instanțele nfnetlink_log își
pot specifica propriul interval, această opțiune îl
înlocuiește.
- --nflog-threshold
dimensiune
- Numărul de pachete care trebuie puse la coadă în
interiorul nucleului înainte de a fi trimise către
spațiul utilizatorilor (aplicabil numai pentru nfnetlink_log).
Valorile mai mari au ca rezultat mai puțină
încărcare per pachet, dar cresc întârzierea
până când pachetele ajung în spațiul
utilizatorilor. Valoarea implicită este 1.
Această țintă transmite pachetul către
spațiul utilizatorilor utilizând gestionarul
nfnetlink_queue. Pachetul este pus în coada
identificată prin numărul său de coadă pe 16
biți. Spațiul utilizatorilor poate inspecta și modifica
pachetul, dacă se dorește. Spațiul utilizatorilor
trebuie apoi să elimine sau să reinjecteze pachetul în
nucleu. Vă rugăm să consultați
libnetfilter_queue pentru detalii. nfnetlink_queue a fost
adăugat în Linux 2.6.14. Opțiunea queue-balance
a fost adăugată în Linux 2.6.31, queue-bypass
în 2.6.39.
- --queue-num
valoare
- Specifică numărul de coadă care urmează
să fie utilizat. Numerele de coadă valabile sunt de la 0 la
65535. Valoarea implicită este 0.
- --queue-balance
valoare:valoare
- Aceasta specifică o serie de cozi de așteptare care
urmează să fie utilizate. Pachetele sunt apoi echilibrate
între cozile date. Acest lucru este util pentru sistemele
multi-nucleu: pornește mai multe instanțe ale programului
din spațiul utilizatorului pe cozile x, x+1, .. x+n și
utilizați „--queue-balance
x:x+n”. Pachetele care aparțin
aceleiași conexiuni sunt plasate în aceeași nfqueue.
Datorită detaliilor de implementare, o valoare inferioară a
intervalului de 0 limitează valoarea superioară a
intervalului la 65534, adică nu se poate echilibra decât
între cel mult 65535 de cozi.
- --queue-bypass
- În mod implicit, dacă niciun program din spațiul
utilizatorului nu ascultă un NFQUEUE, atunci toate pachetele care
urmează să fie puse în coadă sunt abandonate.
Atunci când se utilizează această opțiune,
regula NFQUEUE se comportă în schimb ca ACCEPT, iar pachetul
va trece la următorul tabel.
- --queue-cpu-fanout
- Disponibilă începând cu nucleul Linux 3.10. Atunci
când este utilizată împreună cu
--queue-balance, aceasta va utiliza ID-ul CPU ca index pentru
alocarea pachetelor la cozi. Ideea este că vă puteți
îmbunătăți performanța dacă
există o coadă pentru fiecare CPU. Pentru aceasta este
necesar ca --queue-balance să fie specificată.
Această extensie dezactivează urmărirea
conexiunilor pentru toate pachetele care corespund regulii respective. Este
echivalentă cu „-j CT --notrack”. Ca și CT,
NOTRACK poate fi utilizată numai în tabelul raw.
Ținta RATEEST colectează statistici,
efectuează calculul de estimare a ratei și salvează
rezultatele pentru o evaluare ulterioară utilizând
corespondența rateest.
- --rateest-name nume
- Numără pachetele potrivite în grupul menționat
de nume, care poate fi ales liber.
- --rateest-interval
cantitatea-de-timp{s|ms|us}
- Intervalul de măsurare a ratei, în secunde, milisecunde sau
microsecunde.
- --rateest-ewmalog valoare
- Constanta de timp a mediei de măsurare a ratei.
Această țintă este valabilă numai
în tabelul nat, în lanțurile PREROUTING
și OUTPUT și în lanțurile definite de
utilizator care sunt apelate numai din aceste lanțuri. Aceasta
redirecționează pachetul către mașina în
sine prin schimbarea IP-ului de destinație cu adresa primară a
interfeței de intrare (pachetele generate local sunt mapate la adresa
localhost, 127.0.0.1 pentru IPv4 și ::1 pentru IPv6, iar pachetele
care sosesc pe interfețe care nu au o adresă IP
configurată sunt abandonate).
- --to-ports
port[-port]
- Specifică un port de destinație sau un interval de porturi
de utilizat: fără această indicație, portul de
destinație nu este modificat niciodată. Acest lucru este
valabil numai dacă regula specifică, de asemenea, unul
dintre următoarele protocoale: tcp, udp, dccp
sau sctp. Pentru un singur port, se poate utiliza un nume de
serviciu așa cum este listat în /etc/services.
- --random
- Alocarea aleatorie a porturilor sursă (nucleu >= 2.6.22).
- Suport IPv6 disponibil
începând cu nucleele Linux >= 3.7.
Aceasta este utilizată pentru a trimite înapoi un
pachet de eroare ca răspuns la pachetul corespunzător:
în caz contrar, este echivalentă cu DROP, deci este o
ȚINTĂ terminală, care încheie parcurgerea
regulilor. Această țintă este valabilă numai
în lanțurile INPUT, FORWARD și
OUTPUT și în lanțurile definite de utilizator
care sunt apelate numai din aceste lanțuri. Următoarea
opțiune controlează natura pachetului de erori returnat:
- --reject-with
tip
- Tipul dat poate fi icmp6-no-route, no-route,
icmp6-adm-prohibited, adm-prohibited,
icmp6-addr-unreachable, addr-unreach, sau
icmp6-port-unreachable, care returnează mesajul de eroare
ICMPv6 corespunzător (icmp6-port-unreachable este implicit).
În cele din urmă, opțiunea tcp-reset poate fi
utilizată pentru regulile care corespund doar protocolului TCP:
aceasta determină trimiterea înapoi a unui pachet TCP RST.
Această opțiune este utilă în principal pentru
blocarea sondajelor ident (113/tcp) care apar frecvent la
trimiterea de e-mail către gazde de e-mail defecte (care altfel nu
vă vor accepta e-mailul). tcp-reset poate fi utilizat numai
cu versiunile de nucleu 2.6.14 sau mai recente.
Avertisment: Nu trebuie să aplicați în
mod nediscriminatoriu ținta REJECT pachetelor a căror stare de
conexiune este clasificată ca INVALID; în schimb, trebuie
să le înlăturați „DROP” numai pe
acestea.
Să luăm în considerare o gazdă
sursă care transmite un pachet P, P înregistrând o
întârziere atât de mare de-a lungul traseului
său încât gazda sursă emite o retransmisie, P_2,
P_2 reușind să ajungă la destinație și
avansând în mod normal în starea conexiunii. Se poate
concepe ca P care ajunge cu întârziere să fie
considerat ca nefiind asociat cu nicio intrare de urmărire a
conexiunii. Generarea unui răspuns de respingere pentru un pachet
astfel clasificat ar pune capăt conexiunii
„sănătoase”.
Așadar, în loc de:
-A INPUT ... -j REJECT
luați în considerare utilizarea:
-A INPUT ... -m conntrack --ctstate INVALID -j DROP
-A INPUT ... -j REJECT
Aceasta este utilizată pentru a trimite înapoi un
pachet de eroare ca răspuns la pachetul corespunzător:
în caz contrar, este echivalentă cu DROP, deci este o
ȚINTĂ terminală, care încheie parcurgerea
regulilor. Această țintă este valabilă numai
în lanțurile INPUT, FORWARD și
OUTPUT și în lanțurile definite de utilizator
care sunt apelate numai din aceste lanțuri. Următoarea
opțiune controlează natura pachetului de erori returnat:
- --reject-with
tip
- Tipul dat poate fi icmp-net-unreachable,
icmp-host-unreachable, icmp-port-unreachable,
icmp-proto-unreachable, icmp-net-prohibited,
icmp-host-prohibited, sau icmp-admin-prohibited (*), care
returnează mesajul de eroare ICMP corespunzător
(icmp-port-unreachable este implicit). Opțiunea
tcp-reset poate fi utilizată pentru regulile care corespund
numai protocolului TCP: aceasta determină trimiterea înapoi
a unui pachet TCP RST. Această opțiune este utilă
în principal pentru blocarea sondajelor ident (113/tcp) care
apar frecvent la trimiterea de e-mail către gazde de e-mail defecte
(care altfel nu vă acceptă e-mailul).
- (*) Utilizarea icmp-admin-prohibited cu nuclee care nu oferă suport
pentru aceasta va duce la un simplu DROP în loc de REJECT
Avertisment: Nu trebuie să aplicați în
mod nediscriminatoriu ținta REJECT pachetelor a căror stare de
conexiune este clasificată ca INVALID; în schimb, trebuie
să le înlăturați „DROP” numai pe
acestea.
Să luăm în considerare o gazdă
sursă care transmite un pachet P, P înregistrând o
întârziere atât de mare de-a lungul traseului
său încât gazda sursă emite o retransmisie, P_2,
P_2 reușind să ajungă la destinație și
avansând în mod normal în starea conexiunii. Se poate
concepe ca P care ajunge cu întârziere să fie
considerat ca nefiind asociat cu nicio intrare de urmărire a
conexiunii. Generarea unui răspuns de respingere pentru un pachet
astfel clasificat ar pune capăt conexiunii
„sănătoase”.
Așadar, în loc de:
-A INPUT ... -j REJECT
luați în considerare utilizarea:
-A INPUT ... -m conntrack --ctstate INVALID -j DROP
-A INPUT ... -j REJECT
Se utilizează pentru a stabili valoarea marcajului de
securitate asociat pachetului pentru a fi utilizat de subsistemele de
securitate, cum ar fi SELinux. Este valabilă în tabelul
security (pentru compatibilitatea cu nucleele mai vechi, este
valabilă și în tabelul mangle). Marca are o
lățime de 32 de biți.
- --selctx
context-securitate
Acest modul adaugă și/sau șterge
intrări din seturile IP care pot fi definite prin ipset(8).
- --add-set nume-set
fanion[,fanion...]
- adaugă adresa(adresele)/portul(porturile) pachetului la set
- --del-set nume-set
fanion[,fanion...]
- șterge adresa(adresele)/portul(porturile) pachetului din set
- --map-set nume-set
fanion[,fanion...]
- [--map-mark] [--map-prio] [--map-queue] proprietățile
pachetului de hartă (marca paravanului de protecție,
prioritatea tc, coada hardware)
- unde fanioane sunt specificații src și/sau
dst și nu pot fi mai mult de șase.
- --timeout
valoare
- atunci când se adaugă o intrare, valoarea timpului de
așteptare care trebuie utilizată în locul celei
implicite din definiția setului
- --exist
- atunci când se adaugă o intrare, valoarea timpului de
așteptare care trebuie utilizată în locul celei
implicite din definiția setului
- --map-setnume-set
- nume-set trebuie creat cu opțiunea
„--skbinfo”, opțiunea --map-mark
cartografiază marcajul paravanului de protecție la pachet
prin căutarea valorii în set, opțiunea
--map-prio cartografiază prioritatea controlului traficului
la pachet prin căutarea valorii în set, opțiunea
--map-queue cartografiază coada hardware NIC la pachet prin
căutarea valorii în set
- Opțiunea --map-set poate fi utilizată numai din
tabelul mangle. Fanioanele --map-prio și --map-queue
pot fi utilizate în lanțurile OUTPUT, FORWARD și
POSTROUTING.
Utilizarea opțiunii „-j SET” necesită
existența suportului ipset oferit de nucleu, ceea ce, pentru nucleele
standard, este cazul începând cu Linux 2.6.39.
Această țintă este valabilă numai
în tabelul nat, în lanțurile POSTROUTING
și INPUT și în lanțurile definite de
utilizator care sunt apelate numai din aceste lanțuri. Aceasta
specifică faptul că adresa sursă a pachetului trebuie
modificată (și toate pachetele viitoare din această
conexiune vor fi, de asemenea, modificate), iar regulile trebuie să
înceteze să mai fie examinate. Acceptă
următoarele opțiuni:
- --to-source
[adresa-ip[-adresa-ip]][:port[-port]]
- care poate specifica o singură adresă IP sursă
nouă, un interval inclusiv de adrese IP. Opțional, un
interval de porturi, dacă regula specifică și unul
dintre următoarele protocoale: tcp, udp, dccp
sau sctp. Dacă nu este specificat niciun interval de
porturi, atunci porturile sursă sub 512 vor fi asociate cu alte
porturi sub 512: cele între 512 și 1023 inclusiv vor fi
asociate cu porturi sub 1024, iar alte porturi vor fi asociate cu porturi
1024 sau mai mari. Atunci când este posibil, nu va avea loc nicio
modificare a porturilor.
- --random
- Asociază aleatoriu porturile sursă prin intermediul unui
algoritm bazat pe hash (nucleu >= 2.6.21).
- --random-fully
- Asociază complet aleatoriu porturile sursă prin intermediul
unui PRNG (nucleu >= 3.14).
- --persistent
- Oferă unui client aceeași adresă
sursă/destinație pentru fiecare conexiune. Aceasta
înlocuiește ținta SAME. Suportul pentru
corespondențe persistente este disponibil de la versiunea
2.6.29-rc2.
Nucleele anterioare versiunii 2.6.36-rc1 nu au capacitatea de a
SNAT în lanțul INPUT.
- Suport IPv6 disponibil
de la nucleele Linux >= 3.7.
Furnizează traducerea prefixelor de rețea de la
sursă IPv6 la IPv6 fără stare (conform descrierii RFC
6296).
Trebuie să utilizați această
țintă în tabelul mangle, nu în tabelul
nat. Are următoarele opțiuni:
- --src-pfx
[prefix/lungime]
- Definește prefixul sursă pe care doriți să
îl traduceți și lungimea
- --dst-pfx
[prefix/lungime]
- Definește prefixul destinație pe care doriți
să îl traduceți și lungimea
Trebuie să utilizați ținta DNPT 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 să fie necesar să activați un
server proxy IPv6 învecinat:
- sysctl -w net.ipv6.conf.all.proxy_ndp=1
De asemenea, trebuie să utilizați ținta
NOTRACK pentru a dezactiva urmărirea conexiunilor pentru
fluxurile traduse.
Această țintă va procesa negocierea TCP pe
trei direcții (TCP three-way-handshake) în paralel în
contextul netfilter pentru a proteja sistemul local sau sistemul serverului.
Această țintă necesită urmărirea
conexiunii deoarece numerele de secvență trebuie traduse.
Capacitatea nucleelor de a absorbi SYNFLOOD a fost mult
îmbunătățită începând cu
Linux 4.4, astfel încât această țintă nu
ar trebui să mai fie necesară pentru a proteja serverele
Linux.
- --mss
dimensiunea-maximă-a-segmentului
- Dimensiunea maximă a segmentului anunțată
clienților. Aceasta trebuie să corespundă cu
interfața internă.
- --wscale
scala-ferestrei
- Scala ferestrei anunțată clienților. Aceasta trebuie
să corespundă cu interfața internă.
- --sack-perm
- Transmite opțiunea de confirmare selectivă a clientului
către interfața internă (va fi dezactivată
dacă nu este prezentă).
- --timestamps
- Transmite opțiunea de marcă temporală
„timestamp” a clientului către interfața
internă (va fi dezactivată dacă nu este
prezentă, necesară și pentru confirmarea
selectivă și scalarea ferestrei).
Exemplu:
Determină opțiunile tcp utilizate de
interfața internă, de la un sistem extern
- tcpdump -pni eth0 -c 1 'tcp[tcpflags] == (tcp-syn|tcp-ack)'
port 80 &
telnet 192.0.2.42 80
18:57:24.693307 IP 192.0.2.42.80 > 192.0.2.43.48757:
Flags [S.], seq 360414582, ack 788841994, win 14480,
options [mss 1460,sackOK,
TS val 1409056151 ecr 9690221,
nop,wscale 9],
length 0
Dezactivează modul tcp_loose, astfel încât
conntrack să marcheze pachetele în afara fluxului ca fiind
în starea INVALID.
- echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose
Face pachetele SYN să nu fie urmărite
- iptables -t raw -A PREROUTING -i eth0 -p tcp --dport 80
--syn -j CT --notrack
Captează stările UNTRACKED (pachete SYN) și
INVALID (pachete 3WHS ACK) și le trimite la SYNPROXY. Această
regulă va răspunde la pachetele SYN cu syncookies SYN+ACK, va
crea ESTABLISHED pentru răspunsul valid al clientului (pachete 3WHS
ACK) și va elimina cookie-urile incorecte. Combinațiile de
fanioane care nu sunt așteptate în timpul 3WHS nu se vor
potrivi și vor continua (de exemplu SYN+FIN, SYN+ACK).
- iptables -A INPUT -i eth0 -p tcp --dport 80
-m state --state UNTRACKED,INVALID -j SYNPROXY
--sack-perm --timestamp --mss 1460 --wscale 9
Înlătură pachetele nevalide, acestea vor fi
pachete în afara fluxului care nu au fost potrivite de SYNPROXY.
- iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state INVALID -j
DROP
Această țintă modifică valoarea MSS a
pachetelor TCP SYN, pentru a controla dimensiunea maximă a conexiunii
respective (limitând-o de obicei la MTU-ul interfeței de
ieșire minus 40 pentru IPv4 sau 60 pentru IPv6, respectiv). Desigur,
aceasta poate fi utilizată numai în combinație cu -p
tcp.
Această țintă este utilizată pentru a
depăși ISP-urile sau serverele criminale care blochează
pachetele „ICMP Fragmentation Needed” sau „ICMPv6
Packet Too Big”. Simptomele acestei probleme sunt că totul
funcționează bine din paravanul de protecție/router-ul
Linux, dar mașinile din spatele acestuia nu pot schimba
niciodată pachete mari:
- 1.
- Navigatoarele web se conectează, apoi se blochează
fără a primi date.
- 2.
- E-mailurile mici funcționează bine, dar e-mailurile mari se
blochează.
- 3.
- ssh funcționează bine, dar scp se blochează
după negocierea inițială.
Soluție: activați această opțiune
și adăugați o regulă la configurația
paravanului de protecție, cum ar fi:
-
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN
-j TCPMSS --clamp-mss-to-pmtu
- --set-mss valoare
- Stabilește explicit opțiunea MSS la valoarea
specificată. Dacă MSS al pachetului este deja mai mic
decât valoarea, aceasta nu va fi mărită
(începând cu Linux 2.6.25) pentru a evita mai multe probleme
cu gazdele care se bazează pe un MSS adecvat.
- --clamp-mss-to-pmtu
- Fixează automat valoarea MSS la (path_MTU - 40 pentru IPv4; -60
pentru IPv6). Este posibil ca această opțiune să nu
funcționeze așa cum se dorește în cazul
în care există rute asimetrice cu MTU de rute diferite -
nucleul utilizează MTU de rute pe care l-ar utiliza pentru a
trimite pachete de la sine la adresele IP sursă și
destinație. Înainte de Linux 2.6.25, această
opțiune lua în considerare numai MTU-ul rutei către
adresa IP de destinație; nucleele ulterioare iau în
considerare și MTU-ul rutei către adresa IP
sursă.
Aceste opțiuni se exclud reciproc.
Această țintă va elimina opțiunile TCP
dintr-un pachet TCP; (de fapt, le va înlocui cu NO-OPs). Ca atare, va
trebui să adăugați parametrii -p tcp.
- --strip-options
opțiune[,opțiune...]
- Elimină opțiunea (opțiunile) dată (date).
Opțiunile pot fi specificate prin numărul opțiunii
TCP sau prin nume simbolic. Lista opțiunilor recunoscute poate fi
obținută apelând iptables cu -j TCPOPTSTRIP
-h.
Ținta TEE va clona un pachet și va
redirecționa această clonă către o altă
mașină de pe segmentul de rețea local. Cu alte
cuvinte, nexthop-ul (saltul următor) trebuie să fie
ținta, sau va trebui să configurați nexthop-ul pentru
a-l redirecționa mai departe, dacă doriți.
- --gateway
adresa-ip
- Trimite pachetul clonat către gazda care poate fi atinsă la
adresa IP dată. Utilizarea 0.0.0.0 (pentru pachetele IPv4) sau ::
(IPv6) nu este valabilă.
Pentru a redirecționa tot traficul de intrare de pe eth0
către un sistem de jurnalizare la nivel de rețea:
-t mangle -A PREROUTING -i eth0 -j TEE --gateway 2001:db8::1
Acest modul stabilește câmpul Type of Service (tipul
de serviciu) din antetul IPv4 (inclusiv biții
„precedence”) sau câmpul Priority din antetul IPv6.
Rețineți că TOS împarte aceiași
biți ca DSCP și ECN. Ținta TOS este valabilă
numai în tabelul mangle.
- --set-tos valoare[/masca]
- Reduce la zero biții indicați de masca (a se vedea
NOTA de mai jos) și EVALUEAZĂ CU XOR LOGIC valoarea
în câmpul TOS/Priority. Dacă masCA este
omisă, se presupune 0xFF.
- --set-tos simbol
- Puteți specifica un nume simbolic atunci când
utilizați ținta TOS pentru IPv4. Aceasta implică o
mască de 0xFF (a se vedea NOTA de mai jos). Lista de nume TOS
recunoscute poate fi obținută apelând iptables cu
-j TOS -h.
Sunt disponibile următoarele mnemonice:
- --and-tos
biți
- Evaluează AND logic al valorii TOS cu biți; (mnemonic
pentru --set-tos 0/invbiți, unde
invbiți este negația binară a lui
biți. A se vedea NOTA de mai jos).
- --or-tos
biți
- Evaluează OR logic al valorii TOS cu biți; (mnemonic
pentru --set-tos biți/biți. A se
vedea NOTA de mai jos).
- --xor-tos
biți
- Evaluează XOR logic al valorii TOS cu biți; (mnemonic
pentru --set-tos biți/0. A se vedea NOTA de
mai jos).
NOTĂ: În nucleele Linux până la
și inclusiv 2.6.38, cu excepția versiunilor pe termen lung
2.6.32 (>=.42), 2.6.33 (>=.15) și 2.6.35 (>=.14),
există o eroare prin care manipularea TOS IPv6 nu se comportă
conform documentației și diferă de versiunea IPv4.
Masca TOS indică biții care trebuie eliminați, deci
trebuie inversată înainte de a fi aplicată
câmpului TOS original. Cu toate acestea, nucleele menționate
anterior renunță la inversare, ceea ce rupe
„--set-tos” și mnemonicele sale.
Această țintă este valabilă numai
în tabelul mangle, în lanțul PREROUTING
și în lanțurile definite de utilizator care sunt
apelate numai din acest lanț. Aceasta redirecționează
pachetul către un soclu local fără a modifica în
niciun fel antetul pachetului. De asemenea, poate modifica valoarea
mărcii care poate fi apoi utilizată în reguli avansate
de direcționare. Acceptă trei opțiuni:
- --on-port
port
- Specifică un port de destinație care urmează
să fie utilizat. Este o opțiune obligatorie, 0
înseamnă că noul port de destinație este
același cu cel original. Aceasta este valabilă numai
dacă regula specifică și -p tcp sau -p
udp.
- --on-ip
adresa
- Aceasta specifică o adresă de destinație de utilizat.
În mod implicit, adresa este adresa IP a interfeței de
intrare. Aceasta este valabilă numai dacă regula
specifică și -p tcp sau -p udp.
- --tproxy-mark
valoare[/masca]
- Marchează pachetele cu valoarea/masca dată. Valoarea fwmark
definită aici poate fi utilizată de direcționarea
avansată; (necesar pentru ca proxy-ul transparent să
funcționeze: în caz contrar, aceste pachete vor fi
redirecționate, ceea ce probabil nu este ceea ce
doriți).
Această țintă marchează pachetele
astfel încât nucleul va înregistra fiecare
regulă care se potrivește pachetelor pe măsură
ce acestea parcurg tabelele, lanțurile, regulile. Aceasta poate fi
utilizată numai în tabelul raw.
Cu iptables-legacy, trebuie încărcat un sistem de
jurnalizare, cum ar fi ip(6)t_LOG sau nfnetlink_log, pentru ca acest lucru
să fie vizibil. Pachetele sunt înregistrate cu prefixul:
„TRACE: tablename:chainname:type:rulenum” unde tipul poate fi
«rule» pentru regula simplă, «return»
pentru regula implicită de la sfârșitul unui
lanț definit de utilizator și «policy» pentru
politica lanțurilor integrate.
Cu iptables-nft, ținta este tradusă în
expresia meta nftrace a nftables. Prin urmare, nucleul trimite
evenimente de urmărire prin netlink către spațiul
utilizatorului, unde acestea pot fi afișate cu ajutorul comenzii
xtables-monitor --trace. Pentru detalii, consultați
xtables-monitor(8).
Aceasta este utilizată pentru a modifica câmpul TTL
al antetului IPv4. Câmpul TTL determină câte salturi
(routere) poate traversa un pachet până când timpul
său de viață este depășit.
Stabilirea sau incrementarea câmpului TTL poate fi foarte
periculoasă, astfel încât ar trebui evitată cu
orice preț. Această țintă este valabilă
numai în tabelul mangle.
Nu stabiliți sau nu incrementați niciodată
valoarea pe pachetele care părăsesc rețeaua
locală!
- --ttl-set
valoare
- Stabilește valoarea TTL la „valoare”.
- --ttl-dec
valoare
- Reduce valoarea TTL de „valoare” ori.
- --ttl-inc
valoare
- Crește valoarea TTL de „valoare” ori.
Acesta este predecesorul depreciat ipv4-only al țintei
NFLOG. Acesta asigură înregistrarea în spațiul
utilizatorului a pachetelor corespunzătoare. Atunci când
această țintă este definită pentru o
regulă, nucleul Linux va multidifuza acest pachet prin intermediul
unui soclu netlink. Unul sau mai multe procese din spațiul
utilizatorilor se pot abona apoi la diverse grupuri de multidifuzare
și pot primi pachetele. Ca și LOG, aceasta este o
„țintă non-terminantă”, adică
parcurgerea regulii continuă la următoarea regulă.
- --ulog-nlgroup
nlgroup
- Specifică grupul netlink (1-32) către care este trimis
pachetul. Valoarea implicită este 1.
- --ulog-prefix
prefix
- Prefixează mesajele din jurnal cu prefixul specificat; are o
lungime de până la 32 de caractere și este util
pentru a distinge mesajele din jurnale.
- --ulog-cprange
dimensiune
- Numărul de octeți care urmează să fie
copiați în spațiul utilizatorului. O valoare de 0
copiază întotdeauna întregul pachet, indiferent de
dimensiunea acestuia. Valoarea implicită este 0.
- --ulog-qthreshold
dimensiune
- Numărul de pachete de pus în coadă în
interiorul nucleului. Stabilirea acestei valori la, de exemplu, 10
acumulează zece pachete în interiorul nucleului și le
transmite ca un mesaj multiparte netlink către spațiul
utilizatorilor. Valoarea implicită este 1 (pentru compatibilitate
retroactivă).