Po roku vývoja
Úroveň jadra poskytuje iba všeobecné rozhranie nezávislé od protokolu, ktoré poskytuje základné funkcie na extrahovanie údajov z paketov, vykonávanie operácií s údajmi a riadenie toku.
Samotná logika filtrovania a obslužné programy špecifické pre protokol sú v užívateľskom priestore skompilované do bajtkódu, po čom sa tento bajtový kód nahrá do jadra pomocou rozhrania Netlink a spustí sa v špeciálnom virtuálnom stroji, ktorý pripomína BPF (Berkeley Packet Filters). Tento prístup umožňuje výrazne znížiť veľkosť filtrovacieho kódu spusteného na úrovni jadra a presunúť všetky funkcie pravidiel parsovania a logiky pre prácu s protokolmi do užívateľského priestoru.
Hlavné inovácie:
- Podpora IPsec, ktorá umožňuje porovnávanie adries tunelov na základe paketu, ID požiadavky IPsec a tagu SPI (Security Parameter Index). Napríklad,
... ipsec v ip saddr 192.168.1.0/24
... ipsec v spi 1-65536Je tiež možné skontrolovať, či trasa prechádza cez tunel IPsec. Ak chcete napríklad blokovať prenos mimo protokolu IPSec:
… výstup filtra rt ipsec chýba kvapka
- Podpora protokolu IGMP (Internet Group Management Protocol). Môžete napríklad použiť pravidlo na zrušenie prichádzajúcich žiadostí o členstvo v skupine IGMP
nft pridať pravidlo netdev foo bar igmp typ členstvo-dotaz counter drop
- Možnosť použitia premenných na definovanie prechodových reťazcov (skok / goto). Napríklad:
definovať dest = ber
pridať pravidlo ip foo bar skok $dest - Podpora masiek na identifikáciu operačných systémov (OS Fingerprint) na základe hodnôt TTL v hlavičke. Napríklad na označenie paketov na základe operačného systému odosielateľa môžete použiť príkaz:
... meta mark set osf ttl skip name map { "Linux" : 0x1,
"Windows": 0x2,
"MacOS": 0x3,
"neznámy" : 0x0 }
... osf ttl preskočiť verziu "Linux:4.20" - Schopnosť zladiť ARP adresu odosielateľa a IPv4 adresu cieľového systému. Ak chcete napríklad zvýšiť počítadlo paketov ARP odoslaných z adresy 192.168.2.1, môžete použiť pravidlo:
tabuľka arp x {
reťaz y {
typ filter háčik vstupný prioritný filter; prijať politiku;
arp saddr ip 192.168.2.1 počítadlo paketov 1 bajtov 46
}
} - Podpora transparentného preposielania požiadaviek cez proxy (tproxy). Ak chcete napríklad presmerovať hovory na port 80 na port proxy 8080:
tabuľka ip x {
reťaz y {
priorita predbežného smerovania háku filtra -150; prijať politiku;
tcp dport 80 tproxy na: 8080
}
} - Podpora označovania zásuviek s možnosťou ďalšieho získania značky nastavenia cez setsockopt() v režime SO_MARK. Napríklad:
tabuľka inet x {
reťaz y {
priorita predbežného smerovania háku filtra -150; prijať politiku;
tcp dport 8080 mark nastaviť značku zásuvky
}
} - Podpora pre špecifikovanie prioritných textových názvov pre reťazce. Napríklad:
nft add chain ip x raw { type filter hook prerouting priority raw; }
nft add chain ip x filter { type filter hook prerouting priority filter; }
nft add chain ip x filter_later { type filter hook prerouting priority filter + 10; } - Podpora pre značky SELinux (Secmark). Ak chcete napríklad definovať značku "sshtag" v kontexte SELinux, môžete spustiť:
nft pridať secmark inet filter sshtag "system_u:object_r:ssh_server_packet_t:s0"
A potom použite toto označenie v pravidlách:
nft pridať pravidlo inet filter input tcp dport 22 meta secmark set „sshtag“
nft add map inet filter secmapping { type inet_service : secmark; }
nft add element inet filter secmapping { 22 : "sshtag" }
nft pridať pravidlo inet filter input meta secmark set tcp dport map @secmapping - Schopnosť špecifikovať porty priradené protokolom v textovej forme, ako sú definované v súbore /etc/services. Napríklad:
nft pridať pravidlo xy tcp dport "ssh"
nft zoznam pravidiel -l
tabuľka x {
reťaz y {
...
tcp dport "ssh"
}
} - Schopnosť skontrolovať typ sieťového rozhrania. Napríklad:
pridať pravidlo inet surové predbežné smerovanie meta iifkind "vrf" prijať
- Vylepšená podpora dynamickej aktualizácie obsahu sád explicitným špecifikovaním príznaku „dynamický“. Ak chcete napríklad aktualizovať sadu „s“, aby ste pridali zdrojovú adresu a resetovali položku, ak počas 30 sekúnd neexistujú žiadne pakety:
pridať tabuľku x
add set xs { type ipv4_addr; veľkosť 128; časový limit 30 s; dynamické príznaky; }
add chain xy { type filter hook input priority 0; }
pridať pravidlo xy aktualizovať @s { ip saddr } - Možnosť nastaviť samostatnú podmienku časového limitu. Ak chcete napríklad prepísať predvolený časový limit pre pakety prichádzajúce na port 8888, môžete zadať:
filter ip tabuľky {
ct timeout agresivní-tcp {
protokol tcp;
l3proto ip;
politika = {established: 100, close_wait: 4, close: 4}
}
reťazový výstup {
...
tcp dport 8888 ct timeout nastavený na "aggressive-tcp"
}
} - Podpora NAT pre inet rodinu:
tabuľka inet nat {
...
ip6 daddr dead::2::1 dnat to dead:2::99
} - Vylepšené hlásenie chýb preklepov:
nft pridať test reťazového filtra
Chyba: Žiadny takýto súbor alebo adresár; mali ste na mysli slovo "filter" v rodine ip?
pridať test reťazového filtra
^^^^^^ - Schopnosť špecifikovať názvy rozhraní v sadách:
set sc {
zadajte inet_service . ifname
elementy = { "ssh" . "eth0" }
} - Aktualizovaná syntax pravidiel toku:
nft pridať tabuľku x
nft add flowtable x ft { hook ingress priority 0; zariadenia = { eth0, wlan0 }; }
...
nft add rule x forward ip protocol { tcp, udp } flow add @ft - Vylepšená podpora JSON.
Zdroj: opennet.ru