nftables packet filter 0.9.9 release

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

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

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

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

  • Η δυνατότητα μετακίνησης της επεξεργασίας του πίνακα ροής στην πλευρά του προσαρμογέα δικτύου έχει υλοποιηθεί, ενεργοποιημένη χρησιμοποιώντας τη σημαία «εκτόνωσης». Το Flowtable είναι ένας μηχανισμός για τη βελτιστοποίηση της διαδρομής ανακατεύθυνσης πακέτων, στον οποίο το πλήρες πέρασμα όλων των αλυσίδων επεξεργασίας κανόνων εφαρμόζεται μόνο στο πρώτο πακέτο και όλα τα άλλα πακέτα στη ροή προωθούνται απευθείας. πίνακας ip global { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook hook forward priority filter; πολιτική αποδοχή? ip protocol { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; πολιτική αποδοχή? oifname "wan" μεταμφίεση } }
  • Προστέθηκε υποστήριξη για την προσάρτηση μιας σημαίας κατόχου σε έναν πίνακα για να διασφαλιστεί η αποκλειστική χρήση του πίνακα από μια διαδικασία. Όταν μια διαδικασία τερματίζεται, ο πίνακας που σχετίζεται με αυτήν διαγράφεται αυτόματα. Οι πληροφορίες σχετικά με τη διαδικασία εμφανίζονται στην ένδειξη κανόνων με τη μορφή σχολίου: ip x { # progname nft flags ιδιοκτήτης αλυσίδας y { type filter hook input priority filter; πολιτική αποδοχή? αντίθετα πακέτα 1 byte 309 } }
  • Προστέθηκε υποστήριξη για την προδιαγραφή IEEE 802.1ad (VLAN stacking ή QinQ), η οποία ορίζει ένα μέσο για την αντικατάσταση πολλαπλών ετικετών VLAN σε ένα μόνο πλαίσιο Ethernet. Για παράδειγμα, για να ελέγξετε τον τύπο εξωτερικού πλαισίου Ethernet 8021ad και vlan id=342, μπορείτε να χρησιμοποιήσετε την κατασκευή ... ether type 802.1ad vlan id 342 για να ελέγξετε τον εξωτερικό τύπο πλαισίου Ethernet 8021ad/vlan id=1, ένθετο 802.1 q/vlan id=2 και περαιτέρω ενθυλάκωση πακέτου IP: ... τύπου ether 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
  • Προστέθηκε υποστήριξη για τη διαχείριση πόρων χρησιμοποιώντας τις ενοποιημένες cgroups ιεραρχίας v2. Η βασική διαφορά μεταξύ των cgroups v2 και v1 είναι η χρήση μιας κοινής ιεραρχίας cgroups για όλους τους τύπους πόρων, αντί για ξεχωριστές ιεραρχίες για την κατανομή πόρων CPU, για τη ρύθμιση της κατανάλωσης μνήμης και για το I/O. Για παράδειγμα, για να ελέγξετε αν ο πρόγονος μιας πρίζας στο πρώτο επίπεδο cgroupv2 ταιριάζει με τη μάσκα "system.slice", μπορείτε να χρησιμοποιήσετε την κατασκευή: ... socket cgroupv2 level 1 "system.slice"
  • Προστέθηκε η δυνατότητα ελέγχου στοιχείων των πακέτων SCTP (η λειτουργικότητα που απαιτείται για αυτό θα εμφανιστεί στον πυρήνα του Linux 5.14). Για παράδειγμα, για να ελέγξετε εάν ένα πακέτο περιέχει ένα τεμάχιο με τύπο 'data' και πεδίο 'type': ... sctp chunk data υπάρχουν ... sctp chunk data type 0
  • Η εκτέλεση της λειτουργίας φόρτωσης κανόνων έχει επιταχυνθεί κατά περίπου δύο φορές χρησιμοποιώντας τη σημαία “-f”. Η παραγωγή της λίστας κανόνων έχει επίσης επιταχυνθεί.
  • Παρέχεται μια συμπαγής φόρμα για τον έλεγχο του εάν έχουν οριστεί bits σημαίας. Για παράδειγμα, για να ελέγξετε ότι τα bit κατάστασης snat και dnat δεν έχουν οριστεί, μπορείτε να καθορίσετε: ... ct status ! snat,dnat για να ελέγξετε ότι το bit syn έχει οριστεί στο bitmask syn,ack: ... tcp επισημαίνει syn / syn,ack για να ελέγξει ότι τα bit fin και rst δεν έχουν οριστεί στο bitmask syn,ack,fin,rst: ... tcp flags ! = fin, first / syn, ack,fin, first
  • Επιτρέψτε τη λέξη-κλειδί "ετυμηγορία" σε ορισμούς τύπου συνόλου/χάρτου: προσθήκη χάρτη xm { typeof iifname . πρωτόκολλο ip th dport: ετυμηγορία ;}

Πηγή: opennet.ru

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