Επιβιώνει ένας διακόπτης ασφαλείας VPN μετά από επανεκκίνηση; Πώς να το επαληθεύσετε
Η επανεκκίνηση σας λέει λιγότερα για έναν διακόπτη ασφαλείας απ’ όσο νομίζετε. Ελέγξτε ποιο επίπεδο αποκαθιστά τον αποκλεισμό, πότε ξεκινά και πώς να το δοκιμάσετε πριν από τη σύνδεση.
Η επανεκκίνηση είναι ο πιο συνηθισμένος τρόπος με τον οποίο οι άνθρωποι δοκιμάζουν έναν διακόπτη ασφαλείας, και είναι η δοκιμή που λέει ψέματα πιο συχνά. Το πλαίσιο ελέγχου στον πελάτη είναι μια προτίμηση· αυτό που μετράει είναι αν κάτι επιβάλλει αποκλεισμό ανάμεσα στη στιγμή που ανεβαίνει η στοίβα δικτύου και στη στιγμή που η σήραγγα έχει πραγματικά εδραιωθεί. Στα Windows αυτό το κάτι είναι συνήθως ένα φίλτρο στο Windows Filtering Platform, στο Linux ένα σύνολο κανόνων που φορτώνει μια μονάδα, στο macOS μια άγκυρα pf, στο Android οι δικές του σημαίες του συστήματος για always-on και κλείδωμα. Αυτές οι ρυθμίσεις συμπεριφέρονται πολύ διαφορετικά κατά μήκος μιας επανεκκίνησης, και μόνο εκείνες στο επίπεδο πλατφόρμας βρίσκονται στη θέση τους πριν μπορέσει κάποιος να συνδεθεί.
Η επανεκκίνηση θέτει τρία ξεχωριστά ερωτήματα
Χωρίστε το ερώτημα. Πρώτον, υπάρχει η πολιτική στον δίσκο σε μορφή που κάτι διαβάζει κατά την εκκίνηση; Δεύτερον, εκτελείται αυτός ο αναγνώστης πριν μπορέσει να βγει οποιαδήποτε κίνηση; Τρίτον, καλύπτει η πολιτική την κίνηση που σας ενδιαφέρει, δηλαδή κάθε διεργασία, και τις δύο οικογένειες διευθύνσεων και το DNS. Ένα ναι στο πρώτο και ένα όχι στο δεύτερο παράγουν ακριβώς την αστοχία που οι άνθρωποι αναφέρουν ως διακόπτη ασφαλείας που δεν επιβιώνει από επανεκκίνηση: η κίνηση διαφεύγει για λίγα δευτερόλεπτα κατά την εκκίνηση, και κανείς δεν το προσέχει μέχρι κάποιος να πάει να ψάξει.
Κρατήστε τα επίπεδα χωριστά. Ένα αποθηκευμένο σύνολο κανόνων τείχους προστασίας, μια υπηρεσία που ξεκινά κατά την εκκίνηση και μια προτίμηση πελάτη είναι τρία διαφορετικά αντικείμενα με τρεις διαφορετικές διάρκειες ζωής. Η προτίμηση επιβιώνει από τις επανεκκινήσεις επειδή είναι μια τιμή σε ένα αρχείο ρυθμίσεων. Οι κανόνες είναι το μόνο πράγμα που αποκλείει πακέτα, και εξαφανίζονται μαζί με τον πυρήνα που τους κρατούσε.
Βρείτε το αντικείμενο που αποκαθιστά τον αποκλεισμό
Στο Linux οι κανόνες netfilter ζουν στον πυρήνα. Τίποτα δεν τους ξαναγράφει κατά την εκκίνηση αν δεν το έχετε κανονίσει: iptables-save συν netfilter-persistent, nftables.service φορτώνει /etc/nftables.conf, ή μια μονάδα systemd που εκτελεί το δικό σας σενάριο. Ελέγξτε τι είναι ενεργοποιημένο αντί για το τι θυμάστε ότι ρυθμίσατε.
systemctl is-enabled nftables netfilter-persistent 2>/dev/null sudo nft list ruleset sudo iptables -S OUTPUT
Ένα κενό σύνολο κανόνων λίγα δευτερόλεπτα μετά την εκκίνηση είναι η απάντηση στο ερώτημα του τίτλου. Στα Windows ρωτήστε την υπηρεσία πελάτη πώς ξεκινά, και μετά εξάγετε την κατάσταση του φίλτρου πλατφόρμας όσο η σήραγγα είναι κάτω.
Get-Service | Where-Object { $_.Name -match 'vpn' } | Select-Object Name, Status, StartType
netsh wfp show stateΗ δεύτερη εντολή γράφει wfpstate.xml στον τρέχοντα κατάλογο. Αναζητήστε φίλτρα με ενέργεια αποκλεισμού που υπάρχουν ήδη πριν συνδεθεί ο πελάτης. Το Base Filtering Engine ξεκινά νωρίς στην εκκίνηση και αποκαθιστά φίλτρα που προστέθηκαν με τη μόνιμη σημαία, γι’ αυτό ορισμένοι διακόπτες ασφαλείας αποκλείουν κίνηση πριν υπάρξει οποιοδήποτε παράθυρο πελάτη και άλλοι όχι. Στο macOS sudo pfctl -s info αναφέρει αν το pf είναι ενεργοποιημένο, sudo pfctl -s rules δείχνει τι έχει φορτωθεί, και οι πελάτες VPN συνήθως προσαρτούν τους κανόνες τους σε μια άγκυρα αντί για το κύριο σύνολο κανόνων. Ένας κανόνας που ονομάζει utun3 μπορεί να δείχνει σε άλλη διεπαφή μετά την επόμενη εκκίνηση, επειδή αυτός ο αριθμός αποδίδεται κατά την εκτέλεση.
Παρατηρήστε το κενό ανάμεσα στο ανέβασμα του δικτύου και το ανέβασμα της σήραγγας
Το επικίνδυνο διάστημα δεν είναι όλη η επανεκκίνηση, είναι το κενό. Η διεπαφή λαμβάνει μια μίσθωση και μια προεπιλεγμένη διαδρομή σε ένα σημείο, η υπηρεσία VPN ξεκινά σε άλλο, και η σήραγγα πιστοποιείται ακόμη αργότερα, μερικές φορές μόνο αφού συνδεθεί ένας χρήστης και εκτελεστεί ένας πράκτορας διαπιστευτηρίων. Αν ο αποκλεισμός εφαρμοστεί τελευταίος, ό,τι βρίσκεται στο κενό βγαίνει ανοιχτά.
Σε κεντρικούς υπολογιστές systemd, διαβάστε τη σειρά αντί να τη μαντέψετε. Εκτελέστε systemctl cat στις μονάδες VPN και τείχους προστασίας και αναζητήστε After= ή Before= έναντι των network-pre.target και network-online.target. Μια μονάδα τείχους προστασίας που έχει σειρά μετά το network-online.target χάνει από τη διεπαφή· εκείνη που την απαιτεί και έχει σειρά πριν από το network-pre.target κερδίζει. Στα Windows τα αντίστοιχα ερωτήματα είναι ο τύπος εκκίνησης της υπηρεσίας και οι εξαρτήσεις της, αφού μια υπηρεσία ρυθμισμένη σε Manual δεν μπορεί να αποκλείσει μια διεργασία κατά την εκκίνηση. Αν η απαίτησή σας περιλαμβάνει κίνηση πριν από τη σύνδεση, μόνο μια ρύθμιση σε επίπεδο συσκευής την ικανοποιεί: μια σήραγγα συσκευής Always On VPN πιστοποιείται με πιστοποιητικό μηχανής και συνδέεται πριν συνδεθεί ο χρήστης, και Η Microsoft τεκμηριώνει τη διαμόρφωση της σήραγγας συσκευής χωριστά από τη σήραγγα χρήστη. Το Android ακολουθεί την άλλη διαδρομή, επιβάλλοντας VPN always-on και αποκλείοντας συνδέσεις χωρίς αυτό από το σύστημα και όχι από μια διεργασία εφαρμογής.
Εκτελέστε τη δοκιμή και μετά συγκρίνετε δύο χρονολόγια
Επανεκκινήστε με έναν προορισμό που δεν κοστίζει τίποτα αν διαρρεύσει, και καταγράψτε την κατάσταση κατά τη διάρκεια του κενού αντί μετά. Η πιο καθαρή μέθοδος είναι ένας αισθητήρας κατά την εκκίνηση: μια μονάδα oneshot ή μια προγραμματισμένη εργασία που ξεκινά όσο πιο νωρίς επιτρέπει η πλατφόρμα, καταγράφει την προεπιλεγμένη διαδρομή και την κατάσταση του τείχους προστασίας, δοκιμάζει ένα αίτημα με σύντομο χρονικό όριο και προσθέτει μια γραμμή σε ένα τοπικό αρχείο. Συγκρίνετε αυτή την εγγραφή με την ώρα έναρξης της υπηρεσίας VPN από journalctl -b -u ή το αρχείο συστήματος.
Μετά εκτελέστε τη συνηθισμένη δοκιμή: σήραγγα πάνω, κόψτε τη σύνδεση, παρατηρήστε αν η άμεση κίνηση αποκλείεται, επαναφέρετε. Το να περάσει η δεύτερη και να αποτύχει η πρώτη είναι το φυσιολογικό αποτέλεσμα, και σημαίνει ότι η επιβολή είναι στην πλευρά του πελάτη, εφαρμόζεται όταν συνδέεται ο πελάτης και όχι κατά την εκκίνηση. Στον τελευταίο υπολογιστή που έλεγξα, ο αποκλεισμός ερχόταν από ένα σενάριο αποστολέα του NetworkManager: παρόν και σωστό και άχρηστο για τα δευτερόλεπτα πριν ανέβει η διεπαφή. Καταγράψτε και τα δύο αποτελέσματα, γιατί το να επιβιώσει μια επανεκκίνηση σημαίνει κάτι μόνο όταν πείτε ποιο επίπεδο επέζησε και από ποια στιγμή.
Κλείστε το κενό χωρίς να κόψετε τον δρόμο της επιστροφής
Αν ο αποκλεισμός λείπει κατά την εκκίνηση, μετακινήστε την επιβολή ένα επίπεδο κάτω αντί να προσθέσετε έναν δεύτερο κανόνα πελάτη. Αποθηκεύστε το σύνολο κανόνων και φορτώστε το από μια μονάδα που έχει σειρά πριν γίνει το δίκτυο χρησιμοποιήσιμο, και βεβαιωθείτε ότι αυτή η μονάδα δεν χρειάζεται αναζήτηση DNS ή προσάρτηση δικτύου που υποτίθεται ότι προστατεύει. Η εμβέλεια μετράει όσο και ο χρονισμός: κανόνες που ταιριάζουν με αναγνωριστικό χρήστη ή cgroup αφήνουν κάθε δαίμονα συστήματος έξω από τον αποκλεισμό, και ένα σύνολο κανόνων που χειρίζεται μόνο IPv4 αφήνει το IPv6 και το DNS προσβάσιμα.
Αφήστε στον εαυτό σας έναν δρόμο επιστροφής. Ένας υπολογιστής που αποκλείει τα πάντα κατά την εκκίνηση και μετά δεν μπορεί να πιστοποιηθεί δεν έχει καθόλου δίκτυο, και η διόρθωση δεν είναι να διαγράψετε τον αποκλεισμό αλλά να επισκευάσετε το διαπιστευτήριο ή τη σειρά. Κρατήστε μια τεκμηριωμένη διαδικασία τοπικής κονσόλας και μια στενή, σκόπιμη εξαίρεση για ό,τι χρειάζεται πραγματικά η σήραγγα, όπως η διεύθυνση του διακομιστή και ο μεταφραστής που χρησιμοποιείται πριν υπάρξει η σήραγγα.
Πριν εμπιστευτείτε τη ρύθμιση, επιβεβαιώστε τέσσερα πράγματα με σειρά. Η πολιτική είναι αποθηκευμένη κάπου που διαβάζει η εκκίνηση. Αυτός ο αναγνώστης εκτελείται πριν γίνει χρησιμοποιήσιμη η διεπαφή. Ο αποκλεισμός καλύπτει και τις δύο οικογένειες διευθύνσεων και το DNS. Το VPN μπορεί ακόμη να πιστοποιηθεί όσο ο αποκλεισμός είναι ενεργός. Όταν ισχύουν και τα τέσσερα, μια επανεκκίνηση δεν αλλάζει τίποτα.