Συνδέεσαι στον δρομολογητή, επικολλάς ένα σύνολο κανόνων διακόπτη ασφαλείας από μια ανάρτηση σε φόρουμ και το LAN σταματά να περιηγείται τη στιγμή που πέφτει το τούνελ. Δύο μέρες αργότερα, ο δρομολογητής εξακολουθεί να ενημερώνει την εγγραφή dynamic DNS του μέσω του συνηθισμένου WAN, και ο φορητός υπολογιστής του επισκέπτη εξακολουθεί να φτάνει σε τοποθεσίες IPv6. Και οι δύο συμπεριφορές είναι φυσιολογικές, επειδή οι κανόνες που επικολλήθηκαν κάλυπταν μία αλυσίδα και μία οικογένεια διευθύνσεων, και κανένα από τα δύο δεν είναι ολόκληρος ο δρομολογητής. Η διαδοχική εξέταση των διαδρομών των πακέτων δείχνει ακριβώς τι παραλείφθηκε.

Ξεκίνα από τον δρομολογητή, όχι από τον φορητό υπολογιστή

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

Πριν αλλάξεις οτιδήποτε, σημείωσε τρία στοιχεία σε χαρτί: το όνομα της διεπαφής WAN, το όνομα της γέφυρας LAN και τη διεύθυνση και τη θύρα του τελικού σημείου VPN. Θα τα χρειαστείς και τα τρία στους κανόνες, και το να μαντεύεις ονόματα διεπαφών είναι ο πιο συνηθισμένος λόγος που ένα σύνολο κανόνων που φαίνεται σωστό δεν κάνει τίποτα.

Ακολούθησε τις τρεις διαδρομές ενός πακέτου

Η κίνηση από έναν φορητό υπολογιστή προς το διαδίκτυο προωθείται, άρα περνά από την αλυσίδα FORWARD. Η κίνηση που παράγει ο ίδιος ο δρομολογητής, όπως η προώθηση DNS, τα ερωτήματα NTP, οι ενημερώσεις DDNS και το κανάλι ελέγχου του VPN, περνά από την αλυσίδα OUTPUT. Η κίνηση διαχείρισης που απευθύνεται στον δρομολογητή φτάνει μέσω της αλυσίδας INPUT.

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

Packet pathExampleChain that sees it
LAN client to WAN or tunnelBrowser requestFORWARD
Router-originatedDDNS update, NTPOUTPUT
Addressed to the routerSSH from the LANINPUT

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

Δώσε σειρά στους κανόνες ώστε το τούνελ να μπορεί να σηκωθεί

Ένας λειτουργικός διακόπτης ασφαλείας είναι μια λίστα επιτρεπόμενων που καταλήγει σε απόρριψη, και η σειρά είναι αυτό που τον κάνει διακόπτη ασφαλείας αντί για τούβλο. Επίτρεψε πρώτα το loopback, το τελικό σημείο VPN, τις απαντήσεις για καθιερωμένες ροές και τη διεπαφή του τούνελ· απόρριψε τα υπόλοιπα τελευταία.

iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 198.51.100.7 -p udp --dport 51820 -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o wg0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j REJECT

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

Αντέγραψε τη μορφή στην FORWARD για την κίνηση των πελατών και τοποθέτησε έναν ρητό κανόνα διαχείρισης πάνω από την απόρριψη. Κράτησε αυτόν τον κανόνα διαχείρισης στενό αλλά προσβάσιμο, και επιβεβαίωσέ τον ανοίγοντας μια δεύτερη συνεδρία SSH πριν κλείσεις την πρώτη. Το να κλειδωθείς έξω κατά την αλλαγή ενός διακόπτη ασφαλείας είναι αρκετά συνηθισμένο ώστε να το προβλέψεις. Σε έναν δρομολογητή που τρέχει WireGuard, τα allowed-ips του peer καθορίζουν τι μπαίνει στο τούνελ, ενώ αυτοί οι κανόνες καθορίζουν τι επιτρέπεται να βγει χωρίς αυτό.

Το IPv6 χρειάζεται τη δική του πόρτα εισόδου

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

ip6tables -A FORWARD -i br-lan -j REJECT
ip6tables -A OUTPUT -o eth0 -j REJECT
ip6tables -A OUTPUT -o lo -j ACCEPT

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

Ορισμένοι πελάτες VPN εγκαθιστούν μια προεπιλεγμένη διαδρομή μόνο για IPv4 και αφήνουν την υπάρχουσα προεπιλεγμένη του IPv6 ανέπαφη. Έλεγξε τον πίνακα δρομολόγησης αφού συνδεθεί το τούνελ αντί να υποθέτεις ότι ο πελάτης το χειρίστηκε.

Απόδειξέ το με το τούνελ κάτω

Σταμάτησε το τούνελ από τον δρομολογητή και δοκίμασε από τρία σημεία με αυτή τη σειρά:

# systemctl stop wg-quick@wg0
# ip route get 203.0.113.1
# curl -m 5 -sS http://example.com || echo blocked
# iptables -vnL OUTPUT | head
# ip6tables -vnL OUTPUT | head

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

Αποφάσισε τη λειτουργία αστοχίας πριν τη χρειαστείς. Το fail-closed κρατά τους πελάτες εκτός σύνδεσης μέχρι να επιστρέψει το τούνελ· το fail-open αποκαθιστά τη συνηθισμένη πρόσβαση WAN και ακυρώνει τον σκοπό για την κίνηση που σε ένοιαζε. Μια διαδρομή blackhole προς την ομάδα VPN με υψηλό μετρικό είναι ένα χρήσιμο δεύτερο επίπεδο για σχεδιάσεις fail-closed, αφού επιβιώνει όταν η διαδρομή του τούνελ εξαφανιστεί αντί να πέσει πίσω στην προεπιλεγμένη.

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

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