Γιατί το nftables δεν βλέπει την κίνηση του OpenVPN μεταξύ πελατών
Η κίνηση μεταξύ ομότιμων παραδίδεται μέσα στη διεργασία VPN, οπότε οι μετρητές προώθησης δεν κινούνται ποτέ. Για να τη μετρήσετε, πρέπει να επιλέξετε ανάμεσα στη διαδρομή του πυρήνα και τη διαδρομή της διεργασίας.
Δύο πελάτες σε έναν διακομιστή ανταλλάσσουν αρχεία, η μεταφορά πετυχαίνει, και κάθε κανόνας προώθησης που στρέφετε στο τούνελ αναφέρει μηδέν πακέτα. Οι κανόνες δεν είναι χαλασμένοι και η αλυσίδα δεν βρίσκεται σε λάθος θέση. Με την προώθηση μεταξύ ομότιμων ενεργοποιημένη, το πακέτο παραδίδεται μέσα στη διεργασία του διακομιστή και η στοίβα του κεντρικού υπολογιστή δεν γίνεται ποτέ δρομολογητής, άρα το τείχος προστασίας του πυρήνα δεν έχει τίποτα να μετρήσει. Η κατανόηση αυτού του διαχωρισμού καθορίζει αν θα κρατήσετε τη συντόμευση ή θα ξαναχτίσετε τη διαδρομή μέσω του πυρήνα.
Ακολουθήστε ένα πακέτο μέσα από τον διακομιστή
Σε ένα δρομολογημένο τούνελ, ο δαίμονας παραδίδει το αποκρυπτογραφημένο πακέτο κάθε πελάτη στη συσκευή τούνελ. Από εκεί ο κεντρικός υπολογιστής το δρομολογεί, εκτελείται το άγκιστρο προώθησης, και ένας κανόνας που ταιριάζει με τη συσκευή τούνελ μπορεί να μετρήσει ή να απορρίψει την κίνηση. Αυτή είναι η διαδρομή που υποθέτουν τα περισσότερα παραδείγματα τείχους προστασίας.
| Forwarding path | Who decides | What the host firewall sees |
|---|---|---|
| Kernel routing between clients | Host routing table and forward rules | Every inner packet, with interface names |
| Peer forwarding inside the server process | The VPN daemon's own peer table | Only the outer encrypted transport |
Η συντόμευση βγάζει τον κεντρικό υπολογιστή από τη μέση. Το αποκρυπτογραφημένο πακέτο μιας συνεδρίας παραδίδεται σε άλλη συνεδρία μέσα στον δαίμονα, και το εσωτερικό πακέτο δεν εκπέμπεται ποτέ στη συσκευή τούνελ ούτε δρομολογείται από τον κεντρικό υπολογιστή. Η ενθυλακωμένη κίνηση εξακολουθεί να διασχίζει τη φυσική διεπαφή, άρα μια εξωτερική σύλληψη φαίνεται απασχολημένη ενώ οι εσωτερικοί κανόνες μένουν σιωπηλοί. Μια σύλληψη στη συσκευή τούνελ δεν δείχνει απολύτως τίποτα, κάτι που εκπλήσσει όποιον περιμένει να παρακολουθήσει εκεί τη μεταφορά. Αυτή η ασυμμετρία είναι ο ταχύτερος τρόπος να αναγνωρίσετε τη συντόμευση απέξω από τον δαίμονα.
Η δοκιμή μετρητή που αποφασίζει ποια διαδρομή εκτελέστηκε
Προσαρτήστε έναν μετρητή στον κανόνα που θα έπρεπε να ισχύει, εκτελέστε μια μεταφορά ανάμεσα σε δύο πελάτες που ο κανόνας θα έπρεπε να αποκλείει, και μετά διαβάστε τον μετρητή.
sudo nft list ruleset
sudo nft add rule inet filter forward iifname "tun0" oifname "tun0" counter accept
sudo nft list chain inet filter forward
Αν η μεταφορά πετύχει και ο μετρητής μείνει στο μηδέν, ο πυρήνας δεν διαχειρίστηκε ποτέ αυτά τα πακέτα, και καμία επεξεργασία κανόνων δεν θα το αλλάξει. Επαναλάβετε την ίδια δοκιμή απέναντι σε μια υπηρεσία στον ίδιο τον διακομιστή, γιατί αυτή η ροή περνά πράγματι από τη στοίβα του κεντρικού υπολογιστή και ο μετρητής της κινείται. Η σύγκριση των δύο αποτελεσμάτων είναι αυτό που δίνει την απάντηση.
Δύο λεπτομέρειες εμποδίζουν μια λανθασμένη ανάγνωση. Ένα όνομα διεπαφής γραμμένο σε ετικέτα αλυσίδας δεν φιλτράρει τίποτα από μόνο του, γιατί η αντιστοίχιση γίνεται στα πεδία διεπαφής μέσα στους κανόνες. Και ένα γεφυρωμένο σχέδιο επιπέδου 2 συμπεριφέρεται ξανά διαφορετικά: εκεί οι πελάτες μοιράζονται ένα πεδίο εκπομπής, άρα η ανακάλυψη ομότιμων αναμένεται και δεν είναι σφάλμα δρομολόγησης.
Ένας μεταγωγέας δεν είναι λίστα πρόσβασης
Αυτό είναι το κομμάτι που κοστίζει ένα απόγευμα. Η προώθηση μεταξύ ομότιμων είναι μία μόνο ρύθμιση ανοιχτή ή κλειστή, και όσο είναι ανοιχτή ο δαίμονας είναι το μόνο σημείο προώθησης. Το τείχος προστασίας του κεντρικού υπολογιστή δεν μπορεί να εκφράσει ποιος επιτρέπεται να φτάσει ποιον, και τα αρχεία ανά πελάτη δεν μετατρέπουν τον διακόπτη σε πίνακα πολιτικής.
Αν χρειάζεστε κανόνες ανά ομότιμο, η επιλογή είναι ανάμεσα στην εγκατάλειψη της συντόμευσης και στην εγκατάλειψη του τείχους προστασίας του κεντρικού υπολογιστή ως ελέγχου. Το κλείσιμό της αποκαθιστά την προώθηση του πυρήνα, που απαιτεί ενεργή προώθηση IP στον διακομιστή και ρητούς κανόνες για τις ροές που θέλετε. Το να μείνει ανοιχτή σημαίνει ότι η πολιτική ζει στη διαμόρφωση του δαίμονα, που στην πράξη είναι όλοι οι ομότιμοι ή κανένας.
Ξεχωριστές διεργασίες διακομιστή με δικές τους δεξαμενές διευθύνσεων και θύρες είναι η εφαρμόσιμη μέση λύση. Κάθε διεργασία φέρει ακριβώς μία απόφαση πρόσβασης, άρα δύο ομάδες μπορούν να έχουν διαφορετικούς κανόνες χωρίς πίνακα πολιτικής. Ο κεντρικός υπολογιστής μπορεί να δρομολογεί ανάμεσα στις δεξαμενές όταν αυτό είναι το επιθυμητό, και τότε το τείχος προστασίας βλέπει αυτές τις ροές επειδή διασχίζουν τον κεντρικό υπολογιστή. Το κόστος είναι επιπλέον θύρες, επιπλέον πιστοποιητικά και ένα προφίλ ανά ομάδα.
Επιλογή του σημείου προώθησης
Επιλέξτε προώθηση από τον πυρήνα όταν το τείχος προστασίας είναι η μηχανή πολιτικής, όταν χρειάζεστε καταγραφή ανά ροή ή όταν η λογιστική μετράει. Το κόστος είναι η διεκπεραιωτική ικανότητα μέσα από τη στοίβα του κεντρικού υπολογιστή και περισσότεροι κανόνες για συντήρηση. Το όφελος είναι ότι κάθε υπάρχον εργαλείο, από μετρητές έως εξαγωγείς ροών, περιγράφει ξανά την κίνηση. Σε έναν μικρό διακομιστή αυτό το κόστος είναι αόρατο· σε έναν πολυάσχολο κόμβο αναμετάδοσης δεν είναι.
Επιλέξτε προώθηση μέσα στη διεργασία όταν η κίνηση μεταξύ ομότιμων είναι είτε όλη επιτρεπτή είτε όλη απαγορευμένη και ο διακομιστής είναι διαστασιολογημένος γι' αυτό. Το κόστος είναι ότι οι μετρητές, οι πειθαρχίες ουράς και η παρακολούθηση συνδέσεων δεν περιγράφουν πλέον τις εσωτερικές ροές· αυτό είναι αποδεκτό μόνο αν κανείς δεν βασιστεί αργότερα σε αυτά.
Όποιο κι αν επιλέξετε, γράψτε το δίπλα στους κανόνες του τείχους προστασίας. Ένα σύνολο κανόνων που φαίνεται να επιτρέπει κίνηση μεταξύ ομότιμων ενώ ο δαίμονας αποφασίζει ούτως ή άλλως παραπλανά τον επόμενο που θα εντοπίσει σφάλμα σε μια αποτυχημένη μεταφορά. Όποιος διαβάζει μόνο τους κανόνες θα υποθέσει ότι ο πυρήνας είναι η πύλη.
Τι να ελέγξετε πριν αλλάξετε κανόνες
Διαβάστε τη διαμόρφωση που φόρτωσε πραγματικά ο διακομιστής, όχι το αρχείο που θυμάστε ότι επεξεργαστήκατε, και επιβεβαιώστε αν υπάρχει η επιλογή ομότιμων. Αν την αλλάξατε, βεβαιωθείτε ότι η υπηρεσία επαναφόρτωσε και δεν έγραψε απλώς ξανά ένα αρχείο στον δίσκο.
Στη συνέχεια επαναλάβετε τη δοκιμή με ροή από πελάτη προς διακομιστή για να αποδείξετε ότι ο κανόνας ταιριάζει έστω και λίγο, και ελέγξτε τις δρομολογήσεις που ωθούνται, γιατί μια απούσα διαδρομή μοιάζει από την πλευρά του πελάτη ακριβώς με αποκλεισμό από τείχος προστασίας. Αλλάξτε τη σειρά των κανόνων μόνο αφού μάθετε ποιο σημείο προώθησης κατέχει την απόφαση.