nftables packet filter 1.0.6 release

Δημοσιεύτηκε η έκδοση φίλτρου πακέτων nftables 1.0.6, ενοποιώντας τις διεπαφές φιλτραρίσματος πακέτων για IPv4, IPv6, ARP και γέφυρες δικτύου (με στόχο την αντικατάσταση των iptables, ip6table, arptables και ebtables). Το πακέτο nftables περιλαμβάνει στοιχεία φίλτρου πακέτων που εκτελούνται στο χώρο του χρήστη, ενώ το επίπεδο του πυρήνα παρέχεται από το υποσύστημα nf_tables, το οποίο αποτελεί μέρος του πυρήνα του Linux από την έκδοση 3.13. Σε επίπεδο πυρήνα, παρέχεται μόνο μια γενική διεπαφή ανεξάρτητη από πρωτόκολλο που παρέχει βασικές λειτουργίες για την εξαγωγή δεδομένων από πακέτα, την εκτέλεση λειτουργιών σε δεδομένα και τον έλεγχο της ροής.

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

Βασικές αλλαγές:

  • Το πρόγραμμα βελτιστοποίησης κανόνων, που καλείται όταν έχει καθοριστεί η επιλογή «-o/—βελτιστοποίηση», έχει αυτόματη συσκευασία κανόνων συνδυάζοντάς τους και μετατρέποντάς τους σε λίστες χαρτών και συνόλων. Για παράδειγμα, κανόνες # cat ruleset.nft πίνακας ip x { chain y { type filter hook input priority filter; πτώση πολιτικής? meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 αποδοχή meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 αποδοχή meta iifname eth1 ip saddr 1.1.1.2 ip saddr. ip saddr 2.2.3.0 .24 ip daddr 1-1.1.1.2 αποδοχή meta iifname eth2.2.4.0 ip saddr 2.2.4.10 ip daddr 2 αποδοχή } } μετά την εκτέλεση του "nft -o -c -f ruleset.nft" θα μετατραπεί ως εξής: nft:1.1.1.3:2.2.2.5-4: meta iifname eth17 ip saddr 74 ip daddr 1 αποδοχή κανόνες.nft:1.1.1.1:2.2.2.3-5: meta iifname eth17 ip saddr 74 ip daddr.1. : 1.1.1.2:2.2.2.4-6: meta iifname eth17 ip saddr 77 ip daddr 1/1.1.1.2 αποδοχή ruleset.nft:2.2.3.0:24-7: meta iifname eth17 ip saddr 83 ip daddr 1/1.1.1.2 αποδοχή ruleset.nft:2.2.4.0:2.2.4.10-8: meta iifname eth17 ip saddr 74 ip daddr 2. αποδοχή ruleset.nft:1.1.1.3:2.2.2.5-1: meta iifname eth1.1.1.1 ip saddr 2.2.2.3 ip daddr 1 αποδοχή σε: iifname . ip saddr. ip daddr { eth1.1.1.2 . 2.2.2.4. 1, eth1.1.1.2. 2.2.3.0. 24, eth1. 1.1.1.2. 2.2.4.0/2.2.4.10, eth2. 1.1.1.3. 2.2.2.5-XNUMX, ethXNUMX. XNUMX. XNUMX } αποδοχή
  • Το εργαλείο βελτιστοποίησης μπορεί επίσης να μετατρέψει κανόνες που χρησιμοποιούν ήδη απλές λίστες συνόλων σε πιο συμπαγή μορφή, για παράδειγμα τους κανόνες: # cat ruleset.nft φίλτρο ip πίνακα {chain input { type filter hook input input filter priority; πτώση πολιτικής? iifname "lo" αποδοχή ct κατάσταση καθιερώθηκε, σχετικό αποδοχή σχολίου "Στην κυκλοφορία προέρχονται, εμπιστευόμαστε" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149ud123p32768 αποδεχτείτε iifname "enp65535s0f31" ip saddr { 6, 64.59.144.17 } ip daddr 64.59.150.133 udp sport 10.0.0.149 udp dport 53-32768 θα γίνει αποδοχή -exeftnc s : ruleset.nft:65535:6-22: iifname "enp149s0f31" ip saddr { 6, 209.115.181.102 } ip daddr 216.197.228.230 udp sport 10.0.0.149ft :123-32768 65535 : iifname "enp7s22f143" ip saddr { 0, 31 } ip daddr 6 udp sport 64.59.144.17 udp dport 64.59.150.133-10.0.0.149 αποδοχή σε: ip saddr. ip daddr. udp sport. udp dport { enp53s32768f65535 . 0. 31. 6. 209.115.181.102-10.0.0.149, enp123s32768f65535. 0. 31. 6. 216.197.228.230-10.0.0.149, enp123s32768f65535. 0. 31. 6. 64.59.144.17-10.0.0.149, enp53s32768f65535. 0. 31. 6. 64.59.150.133-10.0.0.149 } αποδέχομαι
  • Επιλύθηκε το πρόβλημα με τη δημιουργία bytecode για συγχώνευση διαστημάτων που χρησιμοποιούν τύπους με διαφορετική σειρά byte, όπως IPv4 (σειρά byte δικτύου) και metamark (σειρά byte συστήματος). πίνακας ip x { map w { typeof ip saddr . meta mark: ετυμηγορία σημαίες μετρητή διαστήματος στοιχείων = { 127.0.0.1-127.0.0.4. 0x123434-0xb00122 : αποδοχή, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : αποδοχή, } } chain k { type filter hook input φίλτρο προτεραιότητας; πτώση πολιτικής? ip saddr. meta mark vmap @w } }
  • Βελτιωμένη σύγκριση σπάνιων πρωτοκόλλων κατά τη χρήση ακατέργαστων εκφράσεων, για παράδειγμα: meta l4proto 91 @th,400,16 0x0 accept
  • Τα προβλήματα με την ενεργοποίηση κανόνων κατά διαστήματα επιλύθηκαν: εισαγάγετε κανόνα xy tcp sport { 3478-3497, 16384-16387 } μετρητής αποδοχή
  • Το JSON API έχει βελτιωθεί ώστε να περιλαμβάνει υποστήριξη για εκφράσεις σε λίστες συνόλων και χαρτών.
  • Οι επεκτάσεις στη βιβλιοθήκη nftables python επιτρέπουν τη φόρτωση συνόλων κανόνων για επεξεργασία σε λειτουργία επικύρωσης ("-c") και προσθέτουν υποστήριξη για εξωτερικό ορισμό μεταβλητών.
  • Η προσθήκη σχολίων επιτρέπεται στα στοιχεία λίστας συνόλου.
  • Το όριο ρυθμού byte επιτρέπει τον καθορισμό μηδενικής τιμής.

Πηγή: opennet.ru

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