Atunci când se utilizează netfilter
, trebuie să înțelegeți cum circulă un pachet prin nucleu, adică care lanţuri (similar cu un „punct de control rutier”) pe care îl vizitează și ce fel de prelucrare intră în fiecare lanț (la care se face referire cu termenul masa). Procesarea și lanțurile sunt afișate în această ilustrație, fiecare cutie are lantul in partea inferioara si tipul de prelucrare in cea superioara. (Trebuie să vă concentrați pe stratul de rețea.) În funcție de calea pachetului, este implicat doar un subset de lanțuri: pachetele care curg prin zmeura dvs. vor trece doar prin PRERUUTARE
, REDIRECŢIONA
și POSTOUTARE
.
Având REDIRECŢIONA
lanț, nu implică că direcționează pachetele. Trebuie să-l activați folosind comanda sysctl -w net.ipv4.ip_forward=1
(nepersistent).
Mai mult, așa cum se arată în figură, nu există nat
prelucrare în REDIRECŢIONA
numai lanț calandru
și filtru
, deci comanda
iptables -t nat -d <lista de IP-uri> -A FORWARD -j NFQUEUE --queue-num 1
este incorect.
Procesarea pachetelor pentru fiecare tabelă/lanț este de fapt condusă de o listă ordonată de reguli, tabelul, pe care o definiți cu iptables
comanda. Fiecare regulă este alcătuită din criterii de potrivire și o acțiune care depinde de tipul tabelului (nfqueue
este permis doar să intre filtru
Mese, mascaradă
în nat
mese etc.)
Acum, venind la nfqueue
. Folosim o astfel de acțiune atunci când procesarea ulterioară a unor pachete urmează să fie făcută în afara nucleului, printr-un program pe care îl creați singur (vezi un exemplu python aici, de exemplu, în sistemele de detectare a intruziunilor.Pachetele sunt puse într-o coadă (identificate cu un număr de 16 biți), procesate apoi returnate la nucleu pentru a-și relua fluxul la următorul tabel/lanț. (De asemenea, pot fi aruncate în spațiul utilizatorului).
Într-un scenariu comun, de obicei veți dori să trimiteți numai pachete acceptate în spațiul utilizator (cele filtrate sunt ignorate la nivel de kernel).
Trebuie să fii atent la nevoile tale exacte, care nu sunt încă clare. Voi încerca să dau un exemplu pentru a explica cum funcționează folosind scenariul dvs.:
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t nat -A POSTROUTING -o $eth -j MASQUERADE
sudo iptables -A FORWARD -i $eth -o $wlan -m stare --state RELATED,ESTABLISHED -j NFQUEUE --queue-num 1
sudo iptables -A FORWARD -i $wlan -o $eth -j NFQUEUE --queue-num 1
Aceasta înseamnă că pachetele care circulă între $eth
și $wlan
va fi pus în aceeași coadă. Trebuie să vă asigurați că un program se ocupă de coada nr. 1 și gata de procesare a pachetelor.