Το Apache σταματά να απαντά στην 443 το απόγευμα που κάποιος ενεργοποιεί εισερχόμενες συνδέσεις VPN, και το αρχείο σφαλμάτων του κατηγορεί το bind αντί για τη δέσμευση πίσω από αυτό. Το Windows Routing and Remote Access ενεργοποιεί το SSTP εκείνη τη στιγμή, και ο listener του SSTP διεκδικεί την TCP 443 μέσω της στοίβας HTTP πριν ελεγχθεί οποιοσδήποτε πελάτης. Η διεκδίκηση ισχύει ακόμη και όταν λείπει το πιστοποιητικό, το όνομα είναι λάθος ή κάθε handshake απορρίπτεται, οπότε ένα VPN στο οποίο κανείς δεν μπορεί να συνδεθεί εξακολουθεί να κρατά τη θύρα. Διαβάστε πρώτα τον πίνακα ακρόασης· το PID που κατέχει την 443 αποφασίζει ποια από τις παρακάτω διορθώσεις είναι καν ανοιχτή για εσάς.

Η δέσμευση επιβιώνει από ένα χαλασμένο πιστοποιητικό

Το SSTP τυλίγει το PPP μέσα σε συνεδρία TLS, γι’ αυτό χρειάζεται την 443 και γι’ αυτό περνά μέσα από proxies που απορρίπτουν άλλα τούνελ. Ο listener δεν είναι υποδοχή που ανοίγει η υπηρεσία VPN για τον εαυτό της: το SstpSvc τον καταχωρεί στον οδηγό HTTP του πυρήνα, οπότε η θύρα μένει δεσμευμένη όσο εκτελείται η υπηρεσία. Αυτή η καταχώριση δεν συμβουλεύεται ποτέ το πιστοποιητικό, που σημαίνει ότι ένα ληγμένο όνομα, ένα ασύμβατο subject ή καθόλου πιστοποιητικό αφήνουν την 443 κατειλημμένη. Οι αστοχίες χωρίζονται τότε σε δύο κατευθύνσεις: τα απορριφθέντα handshakes καταλήγουν στο αρχείο System κάτω από το RasSstp, ενώ ο διακομιστής ιστού μπορεί μόνο να αναφέρει ότι δεν κατάφερε να δεσμεύσει τη θύρα.

netstat -aon | findstr :443
tasklist /svc /fi "PID eq <pid>"

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

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

Το IIS μοιράζεται τον οδηγό, το Apache ανοίγει υποδοχή

Το IIS παραδίδει τα bindings του στον ίδιο οδηγό πυρήνα που χρησιμοποιεί το SSTP, και αυτός ο οδηγός διαχωρίζει τις εισερχόμενες συνδέσεις κατά όνομα κεντρικού υπολογιστή και πρόθεμα URL, οπότε και στις δύο υπηρεσίες μπορεί να ζητηθεί να θέλουν την 443 χωρίς να αποτύχει καμία. Το Apache και το nginx κάνουν το αντίθετο: καλούν bind στη δική τους υποδοχή, και το λειτουργικό σύστημα αρνείται επειδή η διεύθυνση κρατείται ήδη. Τίποτα σε καμία από τις δύο διαμορφώσεις δεν είναι λάθος· η διαφορά βρίσκεται στο ποιο API κατέχει τη θύρα. Γι’ αυτό επίσης η ενεργοποίηση του VPN ρίχνει έναν ιστότοπο σε έναν κεντρικό υπολογιστή και αφήνει ανέπαφο έναν πανομοιότυπο ιστότοπο σε άλλον.

Αυτή η ασυμμετρία καθορίζει τη μορφή της επισκευής. Αν το IIS είναι ήδη η μπροστινή πόρτα, η σύγκρουση γίνεται ζήτημα προθεμάτων, bindings και πιστοποιητικών. Αν το Apache είναι η μπροστινή πόρτα, είτε αυτό μετακινείται από την 443 είτε ο listener του SSTP, και η επόμενη ενότητα καλύπτει και τις δύο κινήσεις.

Διαλέξτε ποια υπηρεσία κρατά την 443

Η θύρα του listener ζει σε μία μόνο τιμή μητρώου, ένα δεκαδικό DWORD κάτω από το κλειδί παραμέτρων του Sstpsvc. Αλλάξτε την τιμή, επανεκκινήστε το Routing and Remote Access και επιβεβαιώστε από τον πίνακα ακρόασης ότι η παλιά θύρα είναι ελεύθερη.

reg query "HKLM\SYSTEM\CurrentControlSet\Services\Sstpsvc\Parameters" /v ListenerPort
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Sstpsvc\Parameters" /v ListenerPort /t REG_DWORD /d 4443 /f
Restart-Service RemoteAccess

Διαλέξτε μια θύρα που δεν θέλει τίποτα άλλο στον κεντρικό υπολογιστή και πληκτρολογήστε την σε δεκαδικό: reg add αποθηκεύει το DWORD ακριβώς όπως γράφεται, οπότε μια τιμή που προοριζόταν ως δεκαεξαδική καταλήγει ως άλλη θύρα. Αν το ερώτημα λέει ότι η τιμή δεν υπάρχει, η δεύτερη γραμμή τη δημιουργεί. Restart-Service RemoteAccess αποσυνδέει όλους όσοι είναι συνδεδεμένοι, κάτι που αξίζει να προγραμματιστεί. Εκτελέστε ξανά τον έλεγχο ακρόασης μετά, γιατί μια παλιά εγγραφή στην 443 σημαίνει ότι η υπηρεσία κράτησε την παλιά καταχώριση.

Η μετακίνηση του listener έχει κόστος που δεν δείχνει η αλλαγή μητρώου. Οι συνηθισμένοι πελάτες SSTP καλούν την 443, οπότε κάθε προφίλ πελάτη χρειάζεται τη νέα θύρα, και η ροή παύει να μοιάζει με αίτημα ιστού για οτιδήποτε επιθεωρεί τη διαδρομή. Σε δίκτυο που ανέχεται μόνο κίνηση που μοιάζει με HTTPS, αυτό αφαιρεί το μεγαλύτερο μέρος του λόγου για τον οποίο επιλέχθηκε το SSTP. Ένας μικρός, διαχειριζόμενος πληθυσμός πελατών το απορροφά· μια δημόσια βάση χρηστών ή BYOD όχι.

Η άλλη κίνηση κρατά την 443 στο IIS και αντιμετωπίζει το Apache ως backend στο οποίο προωθεί ο proxy. Διατηρεί την προεπιλογή του SSTP και αφήνει έναν ιδιοκτήτη για τη θύρα, με κόστος τις προωθούμενες κεφαλίδες, μια διεύθυνση πελάτη που η εφαρμογή δεν βλέπει πλέον άμεσα, και ένα backend που πρέπει να μιλά το πρωτόκολλο που στέλνει πράγματι ο proxy.

Αποδείξτε τον ιδιοκτήτη, το πιστοποιητικό και το handshake με τη σειρά

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

netstat -aon | findstr :443
certutil -store My
Get-WinEvent -LogName System -ProviderName RasSstp -MaxEvents 20

Η πρώτη γραμμή ονομάζει το PID που κρατά την 443, και θα έπρεπε να είναι η υπηρεσία που μόλις διαμορφώσατε. Η δεύτερη απαριθμεί πιστοποιητικά μηχανήματος με τα subjects τους, οπότε ένα όνομα που δεν ταιριάζει με τη διεύθυνση στο προφίλ του πελάτη ξεχωρίζει αμέσως. Το ερώτημα συμβάντων επιστρέφει πρόσφατες εγγραφές SSTP, και ένα handshake που δεν φτάνει ποτέ στην αυθεντικοποίηση PPP αφήνει διαφορετική εγγραφή από ένα που αυθεντικοποιείται και μετά απορρίπτεται. Το τελευταίο στάδιο είναι ορατό μόνο στον πελάτη, όπου η εγγραφή είτε αναφέρει συνδεδεμένο είτε ονομάζει το σφάλμα PPP.

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

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