Wara sena ta 'żvilupp
Il-livell tal-qalba jipprovdi biss interface ġeneriku indipendenti mill-protokoll li jipprovdi funzjonijiet bażiċi għall-estrazzjoni tad-dejta minn pakketti, it-twettiq ta 'operazzjonijiet tad-dejta, u l-kontroll tal-fluss.
Il-loġika tal-filtrazzjoni nnifisha u handlers speċifiċi għall-protokoll huma kkompilati f'bytecode fl-ispazju tal-utent, u wara dan il-bytecode jitgħabba fil-qalba bl-użu tal-interface Netlink u eżegwit f'magna virtwali speċjali li tfakkar fil-BPF (Berkeley Packet Filters). Dan l-approċċ jippermettilek tnaqqas b'mod sinifikanti d-daqs tal-kodiċi tal-filtrazzjoni li taħdem fil-livell tal-qalba u tmexxi l-funzjonijiet kollha tal-parsing tar-regoli u l-loġika biex taħdem bi protokolli fl-ispazju tal-utent.
Innovazzjonijiet ewlenin:
- Appoġġ IPsec, li jippermetti t-tqabbil tal-indirizzi tal-mini bbażat fuq pakkett, ID ta 'talba IPsec, u tag SPI (Indiċi tal-Parametru tas-Sigurtà). Pereżempju,
... ipsec fl-ip saddr 192.168.1.0/24
... ipsec in spi 1-65536Huwa wkoll possibbli li tiċċekkja jekk rotta tgħaddix minn mina IPsec. Pereżempju, biex timblokka t-traffiku mhux permezz tal-IPSec:
… filtru output rt ipsec qatra nieqsa
- Appoġġ għall-IGMP (Internet Group Management Protocol). Pereżempju, tista' tuża regola biex tarmi t-talbiet ta' sħubija fil-grupp IGMP li jkunu deħlin
nft żid regola netdev foo bar igmp tip sħubija-query counter drop
- Possibbiltà li jintużaw varjabbli biex jiddefinixxu ktajjen ta 'tranżizzjoni (jump / goto). Pereżempju:
define dest = ber
żid regola ip foo bar jump $dest - Appoġġ għal maskri biex jidentifikaw sistemi operattivi (OS Fingerprint) ibbażati fuq valuri TTL fl-header. Pereżempju, biex timmarka pakketti bbażati fuq l-OS li jibgħat, tista' tuża l-kmand:
... meta mark set osf ttl skip name map { "Linux" : 0x1,
"Windows": 0x2,
"MacOS": 0x3,
"mhux magħruf" : 0x0}
... osf ttl skip version "Linux:4.20" - Kapaċità li tqabbel l-indirizz ARP tal-mittent u l-indirizz IPv4 tas-sistema fil-mira. Pereżempju, biex iżżid il-counter ta 'pakketti ARP mibgħuta mill-indirizz 192.168.2.1, tista' tuża r-regola li ġejja:
tabella arp x {
katina y {
tip filtru ganċ input filtru prijoritarju; politika taċċetta;
arp saddr ip 192.168.2.1 counter packets 1 bytes 46
}
} - Appoġġ għal trażmissjoni trasparenti ta' talbiet permezz ta' prokura (tproxy). Pereżempju, biex terġa 'tidderieġi sejħiet lejn il-port 80 lejn il-port prokura 8080:
tabella ip x {
katina y {
tip filtru ganċ prerouting prijorità -150; politika taċċetta;
tcp dport 80 tproxy għal:8080
}
} - Appoġġ għall-immarkar ta 'sokits bil-kapaċità li tkompli tikseb il-marka stabbilita permezz ta' setsockopt() fil-mod SO_MARK. Pereżempju:
tabella inet x {
katina y {
tip filtru ganċ prerouting prijorità -150; politika taċċetta;
tcp dport 8080 marka sett sokit marka
}
} - Appoġġ għall-ispeċifikazzjoni ta' ismijiet ta' test ta' prijorità għal ktajjen. Pereżempju:
nft add chain ip x raw { tip filtru hook prerouting prijorità prima; }
nft add chain ip x filter { tip filtru hook prerouting filtru prijoritarju; }
nft żid katina ip x filter_later { tip filtru hook prerouting filtru prijoritarju + 10; } - Appoġġ għat-tikketti SELinux (Secmark). Pereżempju, biex tiddefinixxi t-tikketta "sshtag" f'kuntest SELinux, tista' tmexxi:
nft żid secmark inet filter sshtag "system_u:object_r:ssh_server_packet_t:s0"
U mbagħad uża din it-tikketta fir-regoli:
nft żid regola inet filtru input tcp dport 22 meta secmark issettja “sshtag”
nft żid mappa inet filter secmapping { tip inet_service : secmark; }
nft żid element inet filter secmapping { 22 : "sshtag" }
nft żid regola inet filtru input meta secmark issettja tcp dport map @secmapping - Kapaċità li tispeċifika portijiet assenjati għal protokolli f'forma ta 'test, kif huma definiti fil-fajl /etc/services. Pereżempju:
nft żid regola xy tcp dport "ssh"
nft list ruleset -l
tabella x {
katina y {
...
tcp dport "ssh"
}
} - Kapaċità li tivverifika t-tip ta 'interface tan-netwerk. Pereżempju:
żid regola inet raw prerouting meta iifkind "vrf" jaċċetta
- Appoġġ imtejjeb għall-aġġornament dinamiku tal-kontenut tas-settijiet billi tispeċifika b'mod espliċitu l-bandiera "dinamika". Pereżempju, biex taġġorna s-sett "s" biex iżżid l-indirizz tas-sors u reset id-dħul jekk ma jkunx hemm pakketti għal 30 sekonda:
żid it-tabella x
żid sett xs { tip ipv4_addr; daqs 128; timeout 30s; bnadar dinamiċi; }
żid katina xy { tip filtru ganċ input prijorità 0; }
żid ir-regola xy update @s { ip saddr } - Kapaċità li tissettja kundizzjoni ta' timeout separata. Pereżempju, biex tegħleb il-timeout default għall-pakketti li jaslu fuq il-port 8888, tista' tispeċifika:
filtru ip tabella {
ct timeout aggressiv-tcp {
protokoll tcp;
l3proto ip;
policy = {stabbilit: 100, close_wait: 4, close: 4}
}
output tal-katina {
...
tcp dport 8888 ct timeout issettjat "aggressive-tcp"
}
} - Appoġġ NAT għall-familja inet:
tabella inet nat {
...
ip6 daddr mejta::2::1 dnat to dead:2::99
} - Rappurtar imtejjeb tal-iżbalji tat-typo:
nft żid test tal-filtru tal-katina
Żball: L-ebda fajl jew direttorju bħal dan; Ridt tfisser tabella "filtru" fl-ip tal-familja?
żid it-test tal-filtru tal-katina
^^^^^^ - Kapaċità li tispeċifika l-ismijiet tal-interface f'settijiet:
issettja sc {
tip inet_service . ifname
elementi = { "ssh" . "eth0"}
} - Sintassi aġġornata tar-regoli tal-flowtable:
nft żid tabella x
nft żid flowtable x ft { prijorità tad-dħul tal-ganċ 0; apparati = { eth0, wlan0 }; }
...
nft żid regola x forward ip protocol { tcp, udp } flow add @ft - Appoġġ JSON imtejjeb.
Sors: opennet.ru