Φανταστείτε έναν κανόνα τείχους προστασίας που ενεργοποιεί το ICMP echo για τη δημόσια διεύθυνση του διακομιστή κάθε φορά που είναι συνδεδεμένο ένα επώνυμο προφίλ VPN. Διαβάζεται ως «ping μόνο μέσω της σήραγγας», και αυτή η ανάγνωση είναι λάθος με τρόπο που έχει σημασία. Ο κανόνας δεν περιορίζει ποιος μπορεί να φτάσει τον κεντρικό υπολογιστή· αλλάζει το τι απαντά η δημόσια διεπαφή όσο κάποια άλλη σύνδεση τυχαίνει να είναι ενεργή. Πρόκειται για δύο διαφορετικές πολιτικές, και η μία από αυτές διευρύνει σιωπηλά την έκθεση.

Ο κανόνας που νομίζετε ότι γράψατε

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

Μόλις η συνθήκη γίνει κατάσταση σύνδεσης και όχι διεύθυνση προέλευσης, το σύνολο των επιτρεπόμενων αποστολέων δεν είναι πλέον το σύνολο των ομοτίμων του VPN. Όποιος μπορεί να φτάσει τη δημόσια διεύθυνση μπορεί να στείλει αίτημα echo όσο η πύλη είναι ανοιχτή. Η σήραγγα δεν έγινε η διαδρομή· η σήραγγα έγινε ο διακόπτης.

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

Τι ελέγχει πραγματικά η πύλη

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

Αν η απαίτηση είναι πραγματικά μόνο ομότιμοι του VPN, το εύρος την απαντά χωρίς καμία λογική κατάστασης σύνδεσης: δέστε τον κανόνα στη διεπαφή της σήραγγας ή στο εύρος διευθύνσεων της σήραγγας, περιορίστε τις απομακρυσμένες διευθύνσεις στην ομάδα πελατών και προσδιορίστε τον τύπο echo αντί για «ICMP». Αυτός ο κανόνας παραμένει σωστός όταν δεν είναι ενεργό κανένα VPN και δεν μπορεί να ανοίξει από άσχετο προφίλ.

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

Χτίστε το αντικείμενο μία φορά και μετά εναλλάξτε το

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

New-NetFirewallRule -Name "VpnGateEchoV4" -DisplayName "Public echo gated on VPN state" -Direction Inbound -Action Allow -Protocol ICMPv4 -IcmpType 8 -LocalAddress 203.0.113.10 -RemoteAddress Any -Enabled False
Set-NetFirewallRule -Name "VpnGateEchoV4" -Enabled True

Το όνομα είναι το διαρκές αναγνωριστικό· το εμφανιζόμενο όνομα είναι τεκμηρίωση που μπορεί να επεξεργαστεί ένας άνθρωπος. Συμβιβάστε με το -Name και το script σταματά να παράγει αντίγραφα. Το ίδιο σχήμα εντολής καλύπτει την περίπτωση IPv6 με το -Protocol ICMPv6 -IcmpType 128, που είναι ξεχωριστός κανόνας επειδή οι αριθμοί τύπου echo διαφέρουν μεταξύ των δύο οικογενειών.

Κρατήστε την οικογένεια διευθύνσεων και τον τύπο ICMP ρητά για δεύτερο λόγο: το -Protocol ICMPv4 χωρίς τύπο επιτρέπει κάθε μήνυμα ICMPv4 που επιτρέπει το προφίλ, συμπεριλαμβανομένων εκείνων που δεν σκοπεύατε ποτέ να δεχτείτε. Η ονομασία τύπου 8 περιορίζει τον κανόνα στο αίτημα echo, που είναι το μόνο που στέλνει ένας έλεγχος προσβασιμότητας.

Όπου η αυτοματοποίηση αντιφάσκει με την πρόθεση

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

Υπάρχει παγίδα εύρους στον ίδιο τον έλεγχο κατάστασης. Το Get-VpnConnection αναφέρει προφίλ πελάτη που έχουν ρυθμιστεί στη μηχανή, από προεπιλογή για τον τρέχοντα χρήστη και για όλους τους χρήστες με το -AllUserConnection. Δεν αναφέρει τους απομακρυσμένους χρήστες που είναι αυτή τη στιγμή συνδεδεμένοι σε διακομιστή RRAS· αυτή είναι άλλη παρατήρηση με άλλη εντολή. Μια πύλη χτισμένη πάνω στο λάθος δεν είναι συνδεδεμένη με τίποτα.

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

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

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