Pentru un set de reguli generice, se poate întreba nftables pentru a efectua o căutare a rutei în avans utilizând fib
expresie în loc să așteptați ca stiva de rutare să o facă. Aceasta permite implicarea (viitorul) ieșire interfața deși nu există încă (decizia de rutare nu a avut loc), cu prețul unei căutări suplimentare. Apoi, dacă rezultatele indică că pachetul va fi direcționat, împiedicați urmărirea folosind a fără urmă
afirmație.
EXPRESII FIB
fib {saddr | daddr | marca | iif | oif} [. ...] {oif | oifname | tip}
A fib expresia interoghează fib (bază de informații de redirecționare) către
obține informații precum indexul interfeței de ieșire un anumit
adresa ar folosi. Intrarea este un tuplu de elemente care este folosit ca
intrare la fib funcții de căutare.
NOTRACK DECLARAȚIE
Declarația notrack permite dezactivarea urmăririi conexiunii pentru
anumite pachete.
fără urmă
Rețineți că pentru ca această declarație să fie eficientă, trebuie aplicată la
pachete înainte de a contratrack se întâmplă căutarea. Prin urmare, trebuie să stea
într-un lanţ cu oricare prerutare sau ieșire cârlig și o prioritate cârlig
de -300 sau mai puțin.
Deci, ar trebui să faceți o verificare „simplu” a rutei de la prerutare, folosind doar adresa de destinație ca selector și verificați existența unei interfețe de ieșire (pachetele non-rutabile sau pachetele destinate gazdei nu vor rezolva niciunul). Există o excepție pentru uite (loopback) interfață pentru a o menține urmărită: în timp ce reprezintă trafic local, un pachet trimis (prin ieșire cale) de la gazdă la sine se întoarce prin prerutare cale și are o interfață de ieșire de uite de asemenea. Deoarece pachetul de ieșire a creat deja un contratrack intrare, mai bine păstrați acest lucru consistent.
nft adaugă tabel ip fără stat
nft add chain ip stateless prerouting '{ tip filter hook prerouting priority -310; acceptarea politicii; }'
nft add rule ip prerouting fără stat iif != lo fib daddr oif există notrack
Înlocuirea ip
familia cu inet
Familia combo ar trebui să extindă același comportament generic la IPv4+IPv6.
Pentru a fi mai specific, s-ar putea specifica viitoarea interfață de ieșire cu fib daddr oif eth1
de exemplu, care este mai mult sau mai puțin echivalentul oif eth1
, dar disponibil și în prerutare.
Desigur, dacă topologia este cunoscută dinainte, este posibil să se evite o căutare FIB folosind una sau câteva reguli bazate pe teste de adrese, deoarece rutele sunt apoi cunoscute în avans de către administrator. Ar putea fi necesară evaluarea comparativă a rezultatelor pentru a ști dacă acest lucru este mai interesant decât păstrarea unei metode generice.
De exemplu, cu informațiile furnizate de OP, înlocuind regula anterioară cu:
nft add rule ip apatrid prerouting 'ip daddr != { 192.168.1.1, 192.168.2.1, 127.0.0.0/8 } notrack'
ar trebui să aibă un efect aproape echivalent. 127.0.0.0/8 este prezent din aceleași motive ca mai sus cu uite interfata.
Gestionarea difuzării (cum ar fi 192.168.1.255 primite pe eth0) și multicast (cum ar fi link-local 224.0.0.1 primit pe o interfață) ar putea să nu funcționeze la fel în ambele metode și nici așa cum era de așteptat și ar necesita eventual reguli suplimentare pentru nevoi specifice, în special cu a doua metodă. Deoarece urmărirea difuzării și multicastului este rar utilă, deoarece o sursă de răspuns nu va fi (și nu poate) fi destinația originală a adresei de difuzare sau multicast, astfel încât intrarea conntrack nu va „vedea” niciodată traficul bidirecțional, de obicei nu contează prea mult pentru reguli de stat.
Note
Acest lucru nu va fi de obicei compatibil cu NAT cu stare.
Înțeleg că DNAT către o gazdă de la distanță își va primi traficul de răspuns nu de-NAT și va eșua, iar acel SNAT redirecționat nu se va declanșa deoarece nu a existat contratrack intrare creată. SNAT folosit rar în calea de intrare ar trebui să fie bine, iar o combinație de DNAT + SNAT (folosind o sursă de adresă locală) ar putea funcționa, de asemenea, de atunci, atât în direcția originală, cât și în direcția de răspuns, este implicată o destinație locală, deci un contratrack intrarea ar trebui să fie întotdeauna creată sau căutată corect.
set de reguli standard
Folosind reguli reale iptables sau nftables (în propriul său tabel diferit) poate fi apoi făcut ca de obicei, inclusiv regulile stateful pentru gazda în sine. Deoarece traficul direcționat nu va crea contratrack intrările, regulile care implică un astfel de trafic ar trebui să fie doar apatride și să nu folosească niciunul CT
expresie pentru că nu s-ar potrivi niciodată.
verificarea comportamentului
Se poate verifica comportamentul general chiar și fără reguli adecvate pentru firewall prin:
folosind un manechin CT
regula pentru a fi sigur ca contratrack facilitate este înregistrată în spațiul de nume actual al rețelei.
nft adăugați tabel ip mytable
nft add chain ip mytable mychain '{ tip filter hook prioritate prerouting -150; acceptarea politicii; }'
nft add rule ip mytable mychain ct state nou
folosește contratrack
instrument de urmărire a evenimentelor:
conttrack -E
genera trafic de la distanță
NOU contratrack apoi vor fi create intrări pentru traficul care urmează să fie primit de router, dar nu pentru traficul direcționat.