Κυκλοφόρησε το φίλτρο πακέτων 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). Αυτή η προσέγγιση επιτρέπει σημαντική μείωση του μεγέθους του κώδικα φιλτραρίσματος που εκτελείται σε επίπεδο πυρήνα και μεταφέρει όλη την ανάλυση κανόνων και τη λογική πρωτοκόλλου στον χώρο χρήστη.
Βασικές καινοτομίες:
- Υλοποιήθηκε η δυνατότητα μετακίνησης της επεξεργασίας του flowtable στην πλευρά του προσαρμογέα δικτύου, η οποία ενεργοποιήθηκε χρησιμοποιώντας τη σημαία 'offload'. Ο Flowtable είναι ένας μηχανισμός για τη βελτιστοποίηση της διαδρομής προώθησης πακέτων, στον οποίο εφαρμόζεται πλήρης διέλευση από όλες τις αλυσίδες επεξεργασίας κανόνων μόνο στο πρώτο πακέτο και όλα τα άλλα πακέτα στη ροή προωθούνται απευθείας. table ip global { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward priority filter; policy accept; ip protocol { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; policy accept; oifname "wan" masquerade } }
- Προστέθηκε υποστήριξη για την προσάρτηση μιας σημαίας σε έναν πίνακα για σύνδεση με τον κάτοχο, η οποία επιτρέπει την εξασφάλιση αποκλειστικής χρήσης του πίνακα από μια διεργασία. Όταν η διεργασία τερματιστεί, ο πίνακας που είναι συνδεδεμένος σε αυτήν διαγράφεται αυτόματα. Οι πληροφορίες σχετικά με τη διεργασία εμφανίζονται στο αρχείο κανόνων ως σχόλιο: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; policy accept; counter packets 1 bytes 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.1q/vlan id=2 και περαιτέρω ενθυλάκωση του πακέτου IP: ... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 μετρητής ip τύπου vlan
- Προστέθηκε υποστήριξη για διαχείριση πόρων χρησιμοποιώντας την ενοποιημένη ιεραρχία των cgroups v2. Η βασική διαφορά μεταξύ των cgroups v2 και v1 είναι η χρήση μιας κοινής ιεραρχίας cgroups για όλους τους τύπους πόρων, αντί για ξεχωριστές ιεραρχίες για την κατανομή πόρων της CPU, για τη ρύθμιση της κατανάλωσης μνήμης και για τις εισόδους/εξόδους. Για παράδειγμα, για να ελέγξετε εάν ο πρόγονος μιας υποδοχής στο πρώτο επίπεδο του cgroupv2 ταιριάζει με τη μάσκα "system.slice", μπορείτε να χρησιμοποιήσετε την κατασκευή: ... socket cgroupv2 επίπεδο 1 "system.slice"
- Προστέθηκε η δυνατότητα ελέγχου των στοιχείων των πακέτων SCTP (η λειτουργικότητα που απαιτείται για τη λειτουργία θα εμφανιστεί στον πυρήνα) Linux 5.14). Για παράδειγμα, για να ελέγξετε εάν ένα πακέτο περιέχει ένα κομμάτι με τον τύπο 'δεδομένα' και το πεδίο 'τύπος': … υπάρχουν δεδομένα κομμάτι sctp … τύπος δεδομένων κομμάτι sctp 0
- Η εκτέλεση της λειτουργίας φόρτωσης κανόνα χρησιμοποιώντας τη σημαία "-f" έχει επιταχυνθεί περίπου δύο φορές. Η έξοδος της λίστας κανόνων έχει επίσης επιταχυνθεί.
- Παρέχεται μια συμπαγής μορφή ελέγχου για bits που έχουν οριστεί σε σημαίες. Για παράδειγμα, για να ελέγξετε ότι τα bits κατάστασης snat και dnat δεν έχουν οριστεί, μπορείτε να καθορίσετε: … ct status ! snat,dnat για να ελέγξετε ότι το bit syn έχει οριστεί στη μάσκα bit syn,ack: … tcp flags syn / syn,ack για να ελέγξετε ότι τα bits fin και rst δεν έχουν οριστεί στη μάσκα bit syn,ack,fin,rst: … tcp flags != fin,rst / syn,ack,fin,rst
- Η λέξη-κλειδί "verdict" επιτρέπεται στους ορισμούς typeof για το set/map: add map xm { typeof iifname.ip protocol.th dport:verdict;}
Πηγή: opennet.ru
