Αποφασίστε την άδεια πριν ανοίξετε ένα αρχείο τείχους προστασίας: οι πιστοποιημένοι πελάτες μπορούν να ανοίγουν συνδέσεις προς ένα συγκεκριμένο υποδίκτυο, και η πύλη πρέπει να αρνείται κάθε άλλη διαδρομή διέλευσης ακόμη και όταν ένας πελάτης εγκαθιστά πρόσθετες διαδρομές. Αυτή η πρόταση είναι ο σχεδιασμός, και κάθε κανόνας παρακάτω υπάρχει για να την επιβάλλει. Κάτι ευρύτερο, όπως όλος ο χώρος ιδιωτικών διευθύνσεων, η έξοδος στο διαδίκτυο μέσω της σήραγγας ή η κίνηση ομότιμων, είναι διαφορετικός σχεδιασμός που χρειάζεται δική του απόφαση. Οι κανόνες είναι επίσης σκόπιμα βαρετοί, επειδή ένα έξυπνο τείχος προστασίας είναι εκείνο που κανείς δεν μπορεί να ελέγξει αργότερα.

Γράψτε πρώτα την τοπολογία και την άδεια

Το παράδειγμα χρησιμοποιεί διακομιστή Community OpenVPN με συσκευή TUN χώρου χρήστη που ονομάζεται tun0, μια δεξαμενή πελατών 10.77.0.0/24, και ένα συνδεδεμένο υποδίκτυο 192.168.60.0/24 στο lan0. Η προώθηση IPv4 λειτουργεί ήδη και το LAN έχει ήδη διαδρομή επιστροφής προς τη δεξαμενή, οπότε τίποτα εδώ δεν εξαρτάται από μετάφραση μεταξύ τους.

Το UFW κατέχει το τείχος προστασίας σε αυτόν τον κεντρικό υπολογιστή, και κανένα σύνολο κανόνων κοντέινερ ή ξεχωριστός πίνακας nftables δεν μπορεί να εγκαταστήσει προγενέστερη διαδρομή αποδοχής. Μια συντόμευση εκφόρτωσης ροής που παρακάμπτει το φίλτρο θα έκανε τις αλυσίδες φρουράς διακοσμητικές, οπότε επιβεβαιώστε ότι καμία δεν είναι ενεργή. Αφήστε την ίδια προώθηση client-to-client του OpenVPN απενεργοποιημένη, επειδή η κίνηση ομότιμων που δεν διασχίζει ποτέ το φίλτρο του λειτουργικού συστήματος δεν μπορεί να περιοριστεί από αυτήν. Ο εξωτερικός ακροατής και οι κανόνες διαχείρισης παραμένουν ως έχουν, αφού αυτή η αλλαγή διέπει την αποκρυπτογραφημένη κίνηση της σήραγγας αντί να αντικαθιστά το τείχος προστασίας.

Τοποθετήστε τους φρουρούς πριν από τις πρώιμες αποδοχές του UFW

Μια άδεια διαδρομής που ακολουθείται από άρνηση δεν αρκεί για ένα αυστηρό όριο. Οι προεπιλεγμένοι κανόνες before δέχονται εδραιωμένη κίνηση και επιλεγμένο ICMP πριν εξεταστεί οποιοσδήποτε κανόνας χρήστη, οπότε μια ροή που επιτράπηκε την περασμένη εβδομάδα μπορεί να μείνει εκτός του νέου περιορισμού προορισμού μόνο και μόνο επειδή έχει ακόμη κατάσταση. Δημιουργήστε αντίγραφα ασφαλείας των αρχείων UFW και κρατήστε ανοιχτή μια κονσόλα εκτός ζώνης πριν την επεξεργασία.

Στην ενότητα *filter του αρχείου /etc/ufw/before.rules, δηλώστε δύο αλυσίδες δίπλα στις υπάρχουσες δηλώσεις και πριν από οποιαδήποτε γραμμή κανόνα.

:vpn-src-guard - [0:0]
:vpn-reply-guard - [0:0]

Αμέσως μετά τις δηλώσεις, και πριν από τις άδειες εισόδου και προώθησης, πηδήξτε μέσα τους και ορίστε τι επιτρέπουν.

-A ufw-before-input -i tun0 -j DROP
-A ufw-before-forward -i tun0 -j vpn-src-guard
-A ufw-before-forward -o tun0 -j vpn-reply-guard

-A vpn-src-guard -o lan0 -d 192.168.60.0/24 -s 10.77.0.0/24 -m conntrack --ctdir ORIGINAL -j RETURN
-A vpn-src-guard -j DROP

-A vpn-reply-guard -i lan0 -d 10.77.0.0/24 -s 192.168.60.0/24 -m conntrack --ctstate RELATED,ESTABLISHED --ctdir REPLY -j RETURN
-A vpn-reply-guard -j DROP

Κρατήστε το υπόλοιπο της ενότητας και τη γραμμή COMMIT της. Το να επικολλήσετε δεύτερο πίνακα φίλτρου ή να διαγράψετε άσχετους κανόνες είναι ο τρόπος με τον οποίο μια αλλαγή τείχους προστασίας γίνεται διακοπή λειτουργίας, και το αρχείο απέχει μια επανεκκίνηση από το να γίνει το μόνο αντίγραφο που μετράει.

Διαβάστε τι επιτρέπει και τι αρνείται κάθε φρουρός

Η πρώτη αλυσίδα συνεχίζει την επεξεργασία μόνο όταν η πηγή είναι στη δεξαμενή, ο προορισμός είναι το ένα υποδίκτυο, η διεπαφή εξόδου είναι το LAN και το πακέτο ταξιδεύει στην αρχική κατεύθυνση της ροής του. Ό,τι άλλο φτάνει από τη σήραγγα απορρίπτεται, συμπεριλαμβανομένης πηγής εκτός δεξαμενής και οποιουδήποτε προορισμού πέρα από το επιτρεπόμενο υποδίκτυο.

Ένα πακέτο ομότιμων μπαίνει και βγαίνει από το tun0, οπότε αποτυγχάνει στη δοκιμή διεπαφής LAN πριν καν φτάσει σε έλεγχο προορισμού. Οι νέες συνδέσεις από το LAN προς τους πελάτες αποτυγχάνουν επίσης στη δοκιμή κατεύθυνσης απάντησης, κάτι που κλείνει εξ ορισμού τη διαδρομή αντίστροφης κλήσης.

Ο στόχος RETURN κρατά την κανονική πολιτική του UFW σε ισχύ. Αυτές οι αλυσίδες φιλτράρουν, και η άδεια διαδρομής που προσθέτετε μετά αποφασίζει ακόμη αν θα γίνει δεκτό ένα πακέτο που επιβίωσε. Αυτός ο διαχωρισμός είναι που σας επιτρέπει αργότερα να αλλάξετε το επιτρεπόμενο υποδίκτυο σε ένα σημείο. Αν οι φρουροί δέχονταν τα πακέτα απευθείας, κάθε μελλοντικός κανόνας θα έπρεπε να προστεθεί δύο φορές.

Εξουσιοδοτήστε το υποδίκτυο και κλείστε τις πλαϊνές πόρτες

Προεπισκοπήστε πρώτα την άδεια διαδρομής και μετά αφαιρέστε τη σημαία προεπισκόπησης για να την εφαρμόσετε: sudo ufw --dry-run route allow in on tun0 out on lan0 from 10.77.0.0/24 to 192.168.60.0/24. Έπειτα ελέγξτε τη σειρά των κανόνων χρήστη, γιατί μια προγενέστερη άρνηση κερδίζει ακόμη και μια μεταγενέστερη άδεια. Μια άδεια για ολόκληρο το υποδίκτυο είναι επίσης λάθος σχήμα όταν μόνο η θύρα HTTPS ενός κεντρικού υπολογιστή πρέπει να είναι προσβάσιμη.

Προσέξτε τι κάνει η απόρριψη εισόδου: οι πελάτες της σήραγγας δεν μπορούν να φτάσουν καμία υπηρεσία στην ίδια την πύλη, συμπεριλαμβανομένου ενός ακροατή DNS δεσμευμένου στη διεύθυνση LAN της. Η φιλοξενία DNS εκεί απαιτεί σκόπιμη εξαίρεση πριν από την απόρριψη και αναθεωρημένο συμβόλαιο άδειας. Αν το UFW διαχειρίζεται IPv6, προσθέστε αντίστοιχες απορρίψεις για το tun0 στο before6.rules επίσης, γιατί μια λίστα προορισμών IPv4 δεν λέει τίποτα για πακέτα IPv6.

Επαληθεύστε την φορτωμένη πολιτική, όχι την προεπισκόπηση

Προεπισκοπήστε την επαναφόρτωση, εφαρμόστε την σε παράθυρο συντήρησης και διαβάστε το ζωντανό σύνολο κανόνων.

sudo ufw --dry-run reload
sudo ufw show raw

Επιβεβαιώστε ότι οι φρουροί της σήραγγας εμφανίζονται πριν από τις προεπιλεγμένες άδειες κατάστασης και ICMP. Το απλό ufw status δεν εμφανίζει κανόνες before που επεξεργάστηκαν με το χέρι, γι αυτό οι διαχειριστές συμπεραίνουν ότι λείπει ένας κανόνας ενώ στην πραγματικότητα είναι φορτωμένος. Διαβάστε την ωμή λίστα από πάνω προς τα κάτω αντί να αναζητάτε ένα απόσπασμα. Αν οι φρουροί εμφανίζονται μετά από άδεια κατάστασης, το όριο δεν κάνει αυτό που υπονοεί το αρχείο.

Έπειτα δοκιμάστε συμπεριφορά και όχι κείμενο. Ανοίξτε νέα σύνδεση προς έναν επιτρεπόμενο κεντρικό υπολογιστή και παρατηρήστε την απάντηση, δρομολογήστε ένα ακίνδυνο αίτημα προς προορισμό εκτός του υποδικτύου και επιβεβαιώστε ότι πεθαίνει, δοκιμάστε σύνδεση ομότιμων, δοκιμάστε μια υπηρεσία τοπική στην πύλη και δοκιμάστε μια ανεπιθύμητη σύνδεση από το LAN προς πελάτη. Συμπεριλάβετε μία ροή εκτός πεδίου που υπήρχε πριν την αλλαγή, και καθαρίστε μόνο αυτή τη ροή αντί να αδειάσετε ολόκληρο τον πίνακα παρακολούθησης του μηχανήματος.

Καταγράψτε τα όρια δίπλα στους κανόνες: αυτό περιορίζει τη διέλευση και τίποτα άλλο. Δεν εμποδίζει έναν πελάτη να χρησιμοποιεί τη δική του σύνδεση στο διαδίκτυο, δεν εμποδίζει έναν επιτρεπόμενο κεντρικό υπολογιστή του LAN να προωθεί κίνηση παραπέρα, και δεν αντικαθιστά την πιστοποίηση μέσα στις επιτρεπόμενες υπηρεσίες.

Σχετικά άρθρα