Nakon godinu dana razvoja
Razina kernela pruža samo generičko sučelje neovisno o protokolu koje pruža osnovne funkcije za izdvajanje podataka iz paketa, izvođenje podatkovnih operacija i kontrolu toka.
Sama logika filtriranja i rukovatelji specifični za protokol kompajliraju se u bajt kod u korisničkom prostoru, nakon čega se ovaj bajt kod učitava u kernel pomoću Netlink sučelja i izvršava u posebnom virtualnom stroju koji podsjeća na BPF (Berkeley Packet Filters). Ovaj pristup vam omogućuje da značajno smanjite veličinu koda za filtriranje koji se izvodi na razini jezgre i premjestite sve funkcije pravila parsiranja i logike za rad s protokolima u korisnički prostor.
Glavne inovacije:
- Podrška za IPsec, omogućuje podudaranje adresa tunela na temelju paketa, ID-a IPsec zahtjeva i oznake SPI (Indeks sigurnosnih parametara). Na primjer,
... ipsec u ip saddr 192.168.1.0/24
... ipsec u spi 1-65536Također je moguće provjeriti prolazi li ruta kroz IPsec tunel. Na primjer, za blokiranje prometa ne putem IPSec-a:
… izlaz filtera rt ipsec nedostaje pad
- Podrška za IGMP (Internet Group Management Protocol). Na primjer, možete koristiti pravilo za odbacivanje dolaznih zahtjeva za članstvo u IGMP grupi
nft dodaj pravilo netdev foo bar igmp type membership-query counter drop
- Mogućnost korištenja varijabli za definiranje prijelaznih lanaca (jump / goto). Na primjer:
definirati dest = ber
dodaj pravilo ip foo bar jump $dest - Podrška za maske za identifikaciju operativnih sustava (OS Fingerprint) na temelju TTL vrijednosti u zaglavlju. Na primjer, za označavanje paketa na temelju OS-a pošiljatelja, možete koristiti naredbu:
... meta oznaka set osf ttl preskoči mapu naziva { "Linux" : 0x1,
"Windows": 0x2,
"MacOS": 0x3,
"nepoznato": 0x0}
... osf ttl preskoči verziju "Linux:4.20" - Mogućnost podudaranja ARP adrese pošiljatelja i IPv4 adrese ciljnog sustava. Na primjer, za povećanje brojača ARP paketa poslanih s adrese 192.168.2.1, možete koristiti sljedeće pravilo:
tablica arp x {
lanac y {
vrsta filtra kuka filtar ulaznog prioriteta; politika prihvatiti;
arp saddr ip 192.168.2.1 brojač paketa 1 bajtova 46
}
} - Podrška za transparentno prosljeđivanje zahtjeva kroz proxy (tproxy). Na primjer, za preusmjeravanje poziva na priključak 80 na proxy priključak 8080:
tablica ip x {
lanac y {
tip filtera hook prioritet predusmjeravanja -150; politika prihvatiti;
tcp dport 80 tproxy do :8080
}
} - Podrška za označavanje utičnica s mogućnošću daljnjeg dobivanja postavljene oznake putem setsockopt() u načinu rada SO_MARK. Na primjer:
tablica inet x {
lanac y {
tip filtera hook prioritet predusmjeravanja -150; politika prihvatiti;
tcp dport 8080 oznaka postavljena oznaka utičnice
}
} - Podrška za određivanje prioritetnih tekstualnih naziva za lance. Na primjer:
nft add chain ip x raw { type filter hook prerouting priority raw; }
nft dodaj lanac ip x filtar { filtar tipa hook prioritetni filtar preusmjeravanja; }
nft add chain ip x filter_later { type filter hook prerouting priority filter + 10; } - Podrška za SELinux oznake (Secmark). Na primjer, da biste definirali oznaku "sshtag" u SELinux kontekstu, možete pokrenuti:
nft dodaj secmark inet filter sshtag "system_u:object_r:ssh_server_packet_t:s0"
Zatim upotrijebite ovu oznaku u pravilima:
nft dodaj pravilo inet filter input tcp dport 22 meta secmark set “sshtag”
nft add map inet filter secmapping { type inet_service : secmark; }
nft dodaj element inet filter secmapping { 22 : "sshtag" }
nft dodaj pravilo inet filter input meta secmark set tcp dport map @secmapping - Mogućnost specificiranja priključaka dodijeljenih protokolima u tekstualnom obliku, kako su definirani u datoteci /etc/services. Na primjer:
nft dodaj pravilo xy tcp dport "ssh"
skup pravila popisa nft -l
tablica x {
lanac y {
...
tcp dport "ssh"
}
} - Mogućnost provjere vrste mrežnog sučelja. Na primjer:
dodaj pravilo inet raw prerouting meta iifkind "vrf" prihvatiti
- Poboljšana podrška za dinamičko ažuriranje sadržaja skupova izričitim navođenjem oznake "dinamičko". Na primjer, za ažuriranje skupa "s" za dodavanje izvorne adrese i poništavanje unosa ako nema paketa 30 sekundi:
dodati tablicu x
add set xs { type ipv4_addr; veličina 128; vrijeme čekanja 30s; zastave dinamične; }
dodaj lanac xy { tip filter hook prioritet unosa 0; }
dodaj pravilo xy ažuriraj @s { ip saddr } - Mogućnost postavljanja zasebnog uvjeta čekanja. Na primjer, za nadjačavanje zadanog vremenskog ograničenja za pakete koji stižu na priključak 8888, možete odrediti:
tablica IP filtar {
ct timeout aggressive-tcp {
protokol tcp;
l3proto ip;
politika = {uspostavljeno: 100, close_wait: 4, close: 4}
}
lančani izlaz {
...
tcp dport 8888 ct timeout set "aggressive-tcp"
}
} - NAT podrška za inet obitelj:
tablica inet nat {
...
ip6 daddr mrtav::2::1 dnat mrtvom:2::99
} - Poboljšano izvješćivanje o slovnim pogreškama:
nft dodaj test lančanog filtra
Pogreška: Nema takve datoteke ili direktorija; jeste li mislili "filter" tablice u IP obitelji?
dodaj test filtra lanca
^^^^^^ - Mogućnost određivanja naziva sučelja u skupovima:
postavi sc {
upišite inet_service . ifname
elementi = { "ssh" . "eth0" }
} - Ažurirana sintaksa pravila tablice toka:
nft dodaj tablicu x
nft add flowtable x ft { hook ingress priority 0; uređaji = { eth0, wlan0 }; }
...
nft dodaj pravilo x proslijedi ip protokol { tcp, udp } tok dodaj @ft - Poboljšana podrška za JSON.
Izvor: opennet.ru