otpuštanje paketnog filtera , koji se razvija kao zamjena za iptables, ip6table, arptables i ebtables objedinjavanjem interfejsa za filtriranje paketa za IPv4, IPv6, ARP i mrežne mostove. Paket nftables uključuje komponente za filtriranje paketa koje rade u korisničkom prostoru, dok funkcionalnost na nivou kernela obezbjeđuje podsistem nf_tables, koji je dio kernela. Linux начиная с выпуска 3.13. Необходимые для работы выпуска nftables 0.9.2 изменения включения в состав ядра Linux 5.3.
Nivo kernela pruža samo generički interfejs nezavisan od protokola koji obezbeđuje osnovne funkcije za izdvajanje podataka iz paketa, izvođenje operacija sa podacima i kontrolu toka. Sama logika filtriranja i rukovaoci specifični za protokol se kompajliraju u bajtkod u korisničkom prostoru, nakon čega se ovaj bajt kod učitava u kernel pomoću Netlink interfejsa i izvršava u posebnoj virtuelnoj mašini koja podseća na BPF (Berkeley Packet Filters). Ovaj pristup vam omogućava da značajno smanjite veličinu koda za filtriranje koji radi na nivou kernela i premestite sve funkcije raščlanjivanja pravila i logike za rad sa protokolima u korisnički prostor.
Glavne inovacije:
- Mogućnost provjere broja porta iz zaglavlja paketa transportnog sloja, bez obzira na tip protokola sloja 4:
dodaj pravilo xy ip protokol { tcp, udp } th dport 53
- Podrška za obnavljanje životnog vijeka skupa elemenata:
dodaj element ip xy { 1.1.1.1 timeout 30s ističe 15s }
- Mogućnost provjere pojedinačnih opcija (lsrr, rr, ssrr i ra) iz IPv4 paketa:
dodaj pravilo xy ip opcija rr postoji drop
Za opcije rutiranja, moguće je provjeriti tip, ptr, dužinu i addr polja:
dodajte pravilo xy ip opciju rr tip 1 drop
- Sada je moguće specificirati mrežne prefikse i raspon adresa u izrazima:
iifname ens3 snat na 10.0.0.0/28
iifname ens3 snat na 10.0.0.1-10.0.0.15 - Podrška za korištenje varijabli u definicijama lanca:
define default_policy = prihvatiti
add chain ip foo bar { type filter hook input priority filter; politika $default_policy } - Prioritet lanca sada se može odrediti i numerički i simbolički:
definiraj prio = filter
definiraj prionum = 10
definiraj prioffset = "filter - 150"dodaj tablicu ip foo
dodaj lanac ip foo bar { tip filter kuka prioritet unosa $prio; }
add chain ip foo ber { tip filter kuka ulazni prioritet $prionum; }
add chain ip foo bor { tip filter kuka ulazni prioritet $prioffset; } - Implementirana je podrška za synproxy modul. Na primjer, da biste stavili TCP port 8888 pod sinproksi zaštitu, možete koristiti sljedeći skup pravila:
tablica ip x {
lanac y {
tip filter kuka prerouting prioritet neobrađen; prihvatiti politiku;
tcp dport 8888 tcp flags syn notrack
}lanac z {
tip filter zakaka prioritetni filter naprijed; prihvatiti politiku;
tcp dport 8888 ct stanje nevažeće, nepraćen sinproksi mss 1460 \\
wscale 7 vremenska oznaka sack-perm ct stanje nevažeće ispuštanje
}
} - Da biste definirali očekivane dodatne veze povezane s trenutnom vezom u conntrack tablici, koje se koriste u protokolima i scenarijima koji zahtijevaju višestruke veze, sada možete definirati politike putem standardnih skupova pravila. Na primjer, da odredite koje se sljedeće veze s portom 8888 očekuju nakon povezivanja na TCP port 5432, možete odrediti sljedeća pravila:
tabela x {
ct očekivanje myexpect {
protokol tcp
dport 5432
timeout 1h
veličina 12
l3proto ip
}lančani ulaz {
tip filter kuka prioritet unosa 0;
ct state novi tcp dport 8888 ct očekivanje postavljeno myexpect
ct stanje uspostavljeno, odgovarajući brojač prihvati
}
}
izvor: opennet.ru
