nftables packet filter 1.0.0 release

Δημοσιεύτηκε η κυκλοφορία του φίλτρου πακέτων nftables 1.0.0, ενοποιώντας τις διεπαφές φιλτραρίσματος πακέτων για IPv4, IPv6, ARP και γέφυρες δικτύου (με στόχο την αντικατάσταση των iptables, ip6table, arptables και ebtables). Οι αλλαγές που απαιτούνται για να λειτουργήσει η κυκλοφορία του nftables 1.0.0 περιλαμβάνονται στον πυρήνα του Linux 5.13. Μια σημαντική αλλαγή στον αριθμό έκδοσης δεν σχετίζεται με θεμελιώδεις αλλαγές, αλλά είναι μόνο συνέπεια της συνεπούς συνέχισης της αρίθμησης με δεκαδικό συμβολισμό (η προηγούμενη έκδοση ήταν 0.9.9).

Το πακέτο nftables περιλαμβάνει στοιχεία φίλτρου πακέτων που εκτελούνται στο χώρο του χρήστη, ενώ η εργασία σε επίπεδο πυρήνα παρέχεται από το υποσύστημα nf_tables, το οποίο αποτελεί μέρος του πυρήνα του Linux από την έκδοση 3.13. Το επίπεδο πυρήνα παρέχει μόνο μια γενική διεπαφή ανεξάρτητη από πρωτόκολλο που παρέχει βασικές λειτουργίες για την εξαγωγή δεδομένων από πακέτα, την εκτέλεση λειτουργιών δεδομένων και τον έλεγχο ροής.

Οι ίδιοι οι κανόνες φιλτραρίσματος και οι ειδικοί χειριστές πρωτοκόλλου μεταγλωττίζονται σε bytecode χώρου χρήστη, μετά τον οποίο αυτός ο bytecode φορτώνεται στον πυρήνα χρησιμοποιώντας τη διεπαφή Netlink και εκτελείται στον πυρήνα σε μια ειδική εικονική μηχανή που μοιάζει με BPF (Berkeley Packet Filters). Αυτή η προσέγγιση καθιστά δυνατή τη σημαντική μείωση του μεγέθους του κώδικα φιλτραρίσματος που εκτελείται σε επίπεδο πυρήνα και τη μεταφορά όλων των λειτουργιών των κανόνων ανάλυσης και της λογικής της εργασίας με πρωτόκολλα στο χώρο του χρήστη.

Βασικές καινοτομίες:

  • Η υποστήριξη για το στοιχείο μάσκας "*" έχει προστεθεί στις λίστες συνόλων, η οποία ενεργοποιείται για τυχόν πακέτα που δεν εμπίπτουν σε άλλα στοιχεία που ορίζονται στο σύνολο. πίνακας x { λίστα αποκλεισμού χάρτη { τύπος ipv4_addr : ετυμηγορία επισημαίνει στοιχεία διαστήματος = { 192.168.0.0/16 : αποδοχή, 10.0.0.0/8 : αποδοχή, * : πτώση } } αλυσίδα y { τύπος φίλτρου άγκιστρου προδρομολόγησης προτεραιότητα 0; πολιτική αποδοχή? ip saddr vmap @blocklist } }
  • Είναι δυνατός ο ορισμός μεταβλητών από τη γραμμή εντολών χρησιμοποιώντας την επιλογή «--define». # cat test.nft πίνακας netdev x { chain y { type filter hook ingress devices = $dev priority 0; πτώση πολιτικής? } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • Στις λίστες χαρτών, επιτρέπεται η χρήση σταθερών (stateful) παραστάσεων: πίνακας inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw; πολιτική αποδοχή? iif vmap { "lo" : jump wan_input } } }
  • Προστέθηκε η εντολή "list hooks" για την εμφάνιση μιας λίστας εργαλείων χειρισμού για μια δεδομένη οικογένεια πακέτων: # nft list hooks ip συσκευής eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf} hookables inputs] { -0000000100 chain ip ab [nf_tables] +0000000300 chain inet mz [nf_tables] } hook forward { -0000000225 selinux_ipv4_forward 0000000000 chain ip ac [0000000225_toktok] _ipv4_output } hook postrouting { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • Τα μπλοκ ουρών επιτρέπουν τις εκφράσεις jhash, symhash και numgen να συνδυαστούν για τη διανομή πακέτων σε ουρές στο χώρο χρήστη. ... ουρά για symhash mod 65536 ... ουρά σημαίες παράκαμψη στο numgen inc mod 65536 ... ουρά για jhash oif . Το meta mark mod 32 "queue" μπορεί επίσης να συνδυαστεί με λίστες χαρτών για να επιλέξετε μια ουρά στο χώρο χρήστη με βάση αυθαίρετα κλειδιά. ... σημαίες ουράς παράκαμψης στον χάρτη oifname { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Είναι δυνατή η επέκταση μεταβλητών που περιλαμβάνουν μια λίστα συνόλων σε πολλούς χάρτες. ορισμός διεπαφών = { eth0, eth1 } πίνακας ip x { chain y { type filter hook input priority 0; πολιτική αποδοχή? iifname vmap { lo : αποδοχή, $interfaces : drop } } } # nft -f x.nft # nft λίστα κανόνων πίνακας ip x { chain y { type filter hook input priority 0; πολιτική αποδοχή? iifname vmap { "lo" : accept, "eth0" : drop, "eth1" : drop } }
  • Επιτρέπεται ο συνδυασμός vmaps (χάρτης ετυμηγορίας) κατά διαστήματα: # nft προσθήκη κανόνα xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2 : αποδοχή }
  • Απλοποιημένη σύνταξη για αντιστοιχίσεις NAT. Επιτρέπεται ο καθορισμός περιοχών διευθύνσεων: ... χάρτης snat σε ip saddr { 10.141.11.4 : 192.168.2.2-192.168.2.4 } ή σαφείς διευθύνσεις IP και θύρες: ... χάρτης dnat σε ip saddr { 10.141.11.4:192.168.2.3. . 80 } ή συνδυασμοί περιοχών IP και θυρών: ... dnat σε ip saddr . tcp dport map { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο