nftables packet filter 1.0.7 release

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

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

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

  • Για συστήματα πυρήνα Linux 6.2+, έχει προστεθεί υποστήριξη για αντιστοίχιση πρωτοκόλλων vxlan, geneve, gre και gretap, επιτρέποντας σε απλές εκφράσεις να ελέγχουν τις κεφαλίδες σε ενθυλακωμένα πακέτα. Για παράδειγμα, για να ελέγξετε τη διεύθυνση IP στην κεφαλίδα ενός ένθετου πακέτου από το VxLAN, μπορείτε τώρα να χρησιμοποιήσετε τους κανόνες (χωρίς να χρειάζεται πρώτα να αποενθυλακώσετε την κεφαλίδα VxLAN και να συνδέσετε το φίλτρο στη διεπαφή vxlan0): ... udp dport 4789 vxlan ip πρωτόκολλο udp ... udp dport 4789 vxlan ip saddr 1.2.3.0. 24/4789 ... udp dport 1.2.3.4 vxlan ip saddr . vxlan ip daddr {4.3.2.1. XNUMX}
  • Εφαρμοσμένη υποστήριξη για αυτόματη συγχώνευση υπολειμμάτων μετά από μερική διαγραφή ενός στοιχείου λίστας συνόλου, η οποία επιτρέπει τη διαγραφή ενός στοιχείου ή μέρους μιας περιοχής από μια υπάρχουσα περιοχή (προηγουμένως, μια περιοχή μπορούσε να διαγραφεί μόνο στο σύνολό της). Για παράδειγμα, μετά την αφαίρεση του στοιχείου 25 από μια λίστα συνόλων με εύρη 24-30 και 40-50, τα 24, 26-30 και 40-50 θα παραμείνουν στη λίστα. Οι διορθώσεις που απαιτούνται για να λειτουργήσει η αυτόματη συγχώνευση θα προσφέρονται σε διορθωτικές εκδόσεις των 5.10+ σταθερών κλάδων του πυρήνα. # nft λίστα συνόλου κανόνων πίνακας ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24-30, 40-50 } } } # nft delete element ip xy { 25 } # nft list ruleset table ip x { set y { typeof tcp dport σημαίες interval αυτόματη συγχώνευση στοιχείων = { 24, 26-30, 40-50 } }
  • Να επιτρέπεται η χρήση επαφής και περιοχών στη χαρτογράφηση μετάφρασης διευθύνσεων (NAT). πίνακας ip nat { chain prerouting { type nat hook prerouting priority dstnat; πολιτική αποδοχή? dnat στο ip daddr . tcp dport map { 10.1.1.136 . 80: 1.1.2.69. 1024, 10.1.1.10-10.1.1.20. 8888-8889: 1.1.2.69. 2048-2049 } επίμονος } }
  • Προστέθηκε υποστήριξη για την "τελευταία" έκφραση, η οποία σας επιτρέπει να μάθετε την ώρα της τελευταίας χρήσης ενός στοιχείου κανόνων ή μιας λίστας συνόλων. Αυτή η δυνατότητα υποστηρίζεται από τον πυρήνα Linux 5.14. πίνακας ip x { set y { typeof ip daddr . tcp μέγεθος dport 65535 σημαίες δυναμικό, timeout τελευταίο χρονικό όριο 1 ώρα } chain z { type filter hook output priority filter; πολιτική αποδοχή? ενημέρωση @y { ip daddr . tcp dport } } } # nft list set ip xy πίνακας ip x { set y { typeof ip daddr . tcp dport μέγεθος 65535 σημαίες δυναμικό, χρονικό όριο λήξης τελευταίου χρονικού ορίου 1 ώρα στοιχεία = { 172.217.17.14 . 443 τελευταία χρήση 1s591ms timeout 1h λήγει 59m58s409ms, 172.67.69.19 . 443 τελευταία χρήση 4s636ms timeout 1h λήγει 59m55s364ms, 142.250.201.72 . 443 τελευταία χρήση 4s748ms timeout 1h λήγει 59m55s252ms, 172.67.70.134 . 443 τελευταία χρήση 4s688ms timeout 1h λήγει 59m55s312ms, 35.241.9.150 . 443 τελευταία χρήση 5s204ms timeout 1h λήγει 59m54s796ms, 138.201.122.174 . 443 τελευταία χρήση 4s537ms timeout 1h λήγει 59m55s463ms, 34.160.144.191 . 443 τελευταία χρήση 5s205ms timeout 1h λήγει 59m54s795ms, 130.211.23.194 . 443 τελευταία χρήση 4s436ms timeout 1h λήγει 59m55s564ms } } }
  • Προστέθηκε η δυνατότητα καθορισμού ποσοστώσεων σε λίστες συνόλων. Για παράδειγμα, για να ορίσετε ένα όριο επισκεψιμότητας για κάθε διεύθυνση IP-στόχου, μπορείτε να καθορίσετε: πίνακας netdev x { set y { typeof ip daddr size 65535 quota over 10000 Mbytes } chain y { type filter hook egress device "eth0" filter priority; πολιτική αποδοχή? ip daddr @y drop } } # nft προσθήκη στοιχείου inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list σύνολο κανόνων πίνακας netdev x { set y { type ipv4_addr size 65535 quota over 10000 mbytes elements. 8.8.8.8 όριο άνω των 10000 mbyte που χρησιμοποιείται 196 byte } } chain y { type filter hook egress device "eth0" priority filter; πολιτική αποδοχή? ip daddr @y drop } }
  • Επιτρέπεται η χρήση σταθερών σε λίστες συνόλων. Για παράδειγμα, όταν χρησιμοποιείτε μια λίστα με τη διεύθυνση προορισμού και το αναγνωριστικό VLAN ως κλειδί, μπορείτε να καθορίσετε απευθείας τον αριθμό VLAN (daddr. 123): table netdev t { set s { typeof ether saddr . vlan id μέγεθος 2048 σημαίες δυναμικό, timeout timeout 1m } chain c { type filter hook ingress device eth0 priority 0; πολιτική αποδοχή? τύπος αιθέρα != 8021q ενημέρωση @s { ether daddr . 123 } μετρητής } }
  • Μια νέα εντολή "destroy" έχει προστεθεί για την άνευ όρων διαγραφή αντικειμένων (σε αντίθεση με την εντολή delete, δεν δημιουργεί ENOENT όταν προσπαθείτε να διαγράψετε ένα αντικείμενο που λείπει). Απαιτεί τουλάχιστον πυρήνα Linux 6.3-rc για να λειτουργήσει. καταστρέψτε το φίλτρο ip πίνακα

Πηγή: opennet.ru

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