nftables packet filter 0.9.4 release

Που δημοσιεύθηκε απελευθέρωση φίλτρου πακέτου nftables 0.9.4, που αναπτύσσεται ως αντικατάσταση των iptables, ip6table, arptables και ebtables ενοποιώντας τις διεπαφές φιλτραρίσματος πακέτων για IPv4, IPv6, ARP και γέφυρες δικτύου. Το πακέτο nftables περιλαμβάνει στοιχεία φίλτρου πακέτων που εκτελούνται στο χώρο του χρήστη, ενώ η εργασία σε επίπεδο πυρήνα παρέχεται από το υποσύστημα nf_tables, το οποίο αποτελεί μέρος του πυρήνα του Linux από την έκδοση 3.13. Οι αλλαγές που είναι απαραίτητες για να λειτουργήσει η κυκλοφορία του nftables 0.9.4 περιλαμβάνονται στον κλάδο μελλοντικού πυρήνα Linux 5.6.

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

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

  • Υποστήριξη για εύρη σε συνδέσεις (σύνδεση, ορισμένες δέσμες διευθύνσεων και θύρες που απλοποιούν τη σύγκριση). Για παράδειγμα, για ένα σύνολο "whitelist" του οποίου τα στοιχεία είναι ένα συνημμένο, ο καθορισμός της σημαίας "interval" θα υποδεικνύει ότι το σύνολο μπορεί να περιλαμβάνει εύρη στο συνημμένο (για το συνημμένο "ipv4_addr . ipv4_addr . inet_service" ήταν προηγουμένως δυνατό να παρατεθεί ακριβής ταιριάζει με τη φόρμα "192.168.10.35. 192.68.11.123", και τώρα μπορείτε να καθορίσετε ομάδες διευθύνσεων "80-192.168.10.35-192.168.10.40"):

    τραπέζι ip foo {
    ορισμός λευκής λίστας {
    πληκτρολογήστε ipv4_addr. ipv4_addr. inet_service
    διάστημα σημαιών
    στοιχεία = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    μπάρα αλυσίδας {
    τύπος φίλτρου φίλτρου προδρομολόγησης προτεραιότητας. πτώση πολιτικής?
    ip saddr. ip daddr. tcp dport @whitelist αποδοχή
    }
    }

  • Σε σύνολα και λίστες χαρτών, είναι δυνατή η χρήση της οδηγίας "τύπος", η οποία καθορίζει τη μορφή του στοιχείου κατά την αντιστοίχιση.
    Για παράδειγμα:

    τραπέζι ip foo {
    ορισμός λευκής λίστας {
    τύπος ip saddr
    στοιχεία = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    μπάρα αλυσίδας {
    τύπος φίλτρου φίλτρου προδρομολόγησης προτεραιότητας. πτώση πολιτικής?
    ip daddr @whitelist αποδοχή
    }
    }

    τραπέζι ip foo {
    χάρτης adr2mark {
    typeof ip saddr : meta mark
    στοιχεία = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Προστέθηκε η δυνατότητα χρήσης συνδέσεων σε δεσμεύσεις NAT, η οποία σας επιτρέπει να καθορίσετε μια διεύθυνση και μια θύρα κατά τον ορισμό μετασχηματισμών NAT με βάση λίστες χαρτών ή ονομασμένα σύνολα:

    nft προσθήκη κανόνα ip nat pre dnat ip addr . port to ip saddr map { 1.1.1.1 : 2.2.2.2 . τριάντα}

    nft προσθήκη χάρτη ip nat προορισμοί { type ipv4_addr . inet_service: ipv4_addr. inet_service \\; }
    nft προσθήκη κανόνα ip nat pre dnat ip addr . θύρα σε ip saddr. tcp dport map @destinations

  • Υποστήριξη για επιτάχυνση υλικού με ορισμένες λειτουργίες φιλτραρίσματος που πραγματοποιούνται από την κάρτα δικτύου. Η επιτάχυνση ενεργοποιείται μέσω του βοηθητικού προγράμματος ethtool ("ethtool -K eth0 hw-tc-offload on"), μετά την οποία ενεργοποιείται σε nftables για την κύρια αλυσίδα χρησιμοποιώντας τη σημαία "offload". Όταν χρησιμοποιείτε τον πυρήνα Linux 5.6, υποστηρίζεται η επιτάχυνση υλικού για αντιστοίχιση πεδίου κεφαλίδας και επιθεώρηση εισερχόμενης διεπαφής σε συνδυασμό με λήψη, απόρριψη, αντιγραφή (dup) και προώθηση (fwd) πακέτων. Στο παρακάτω παράδειγμα, οι λειτουργίες απόρριψης πακέτων που προέρχονται από τη διεύθυνση 192.168.30.20 εκτελούνται σε επίπεδο κάρτας δικτύου, χωρίς να περάσουν τα πακέτα στον πυρήνα:

    # cat file.nft
    πίνακας netdev x {
    αλυσίδα y {
    Τύπος συσκευή εισόδου γάντζου φίλτρου eth0 προτεραιότητα 10. σημαίες εκφόρτωση?
    ip saddr 192.168.30.20 πτώση
    }
    }
    # nft -f file.nft

  • Βελτιωμένες πληροφορίες σχετικά με τη θέση ενός σφάλματος στους κανόνες.

    # nft διαγραφή κανόνα ip yz λαβή 7
    Σφάλμα: Δεν ήταν δυνατή η επεξεργασία κανόνα: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
    διαγραφή κανόνα ip yz handle 7
    ^

    # nft διαγραφή κανόνα ip xx handle 7
    Σφάλμα: Δεν ήταν δυνατή η επεξεργασία κανόνα: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
    διαγραφή κανόνα ip xx handle 7
    ^

    # nft διαγραφή πίνακα twst
    Σφάλμα: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος. μήπως εννοούσες «δοκιμή» πίνακα στην οικογενειακή ip;
    διαγραφή πίνακα twst
    ^^^^

    Το πρώτο παράδειγμα δείχνει ότι ο πίνακας "y" δεν βρίσκεται στο σύστημα, το δεύτερο ότι λείπει ο χειριστής "7" και το τρίτο ότι εμφανίζεται μια προτροπή τυπογραφικού σφάλματος όταν πληκτρολογείτε το όνομα του πίνακα.

  • Προστέθηκε υποστήριξη για τον έλεγχο της υποτελούς διεπαφής καθορίζοντας "meta sdif" ή "meta sdifname":

    ... meta sdifname vrf1 ...

  • Προστέθηκε υποστήριξη για λειτουργίες βάρδιας δεξιά ή αριστερά. Για παράδειγμα, για να μετακινήσετε μια υπάρχουσα ετικέτα πακέτου αριστερά κατά 1 bit και να ορίσετε το δευτερεύον bit σε 1:

    … σύνολο σήμανσης meta meta mark lshift 1 ή 0x1…

  • Εφαρμόστηκε η επιλογή "-V" για την εμφάνιση πληροφοριών εκτεταμένης έκδοσης.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli:readline
    json: ναι
    minigmp: Όχι
    libxtables: ναι

  • Οι επιλογές της γραμμής εντολών πρέπει τώρα να καθοριστούν πριν από τις εντολές. Για παράδειγμα, πρέπει να καθορίσετε το "nft -a list ruleset" και η εκτέλεση του "nft list rules -a" θα οδηγήσει σε σφάλμα.

    Πηγή: opennet.ru

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