Πώς μια σύνδεση VPN φτάνει στο RADIUS και στον πάροχο ταυτότητάς σας
Παρακολουθήστε μια σύνδεση VPN από τον πελάτη στο αίτημα RADIUS της πύλης, στον πάροχο ταυτότητας πίσω από αυτό και στην πολιτική που εφαρμόζεται μετά την αποδοχή.
Την περασμένη εβδομάδα ένας χρήστης μπόρεσε να συνδεθεί στο VPN και παρ' όλα αυτά βρέθηκε σε δίκτυο όπου τίποτα δεν επιλύονταν. Ο πελάτης έλεγε συνδεδεμένος, το αρχείο καταγραφής της πύλης έλεγε Access-Accept και η ομάδα ταυτότητας έλεγε ότι ο λογαριασμός ήταν εντάξει. Η σύνδεση είχε λειτουργήσει· η εξουσιοδότηση πίσω από αυτήν όχι. Όταν μια σύνδεση VPN αποτυγχάνει, ακολουθώ τη διαδρομή που πραγματικά παίρνει το αίτημα — πελάτης, πύλη, διακομιστής RADIUS, πάροχος ταυτότητας — και σταματώ στο πρώτο άλμα του οποίου η απάντηση διαφωνεί με το επόμενο.
Ο πελάτης δεν μιλά ποτέ RADIUS
Ό,τι κι αν δείχνει η εφαρμογή στον φορητό υπολογιστή, το πρώτο της άλμα είναι το πρωτόκολλο VPN: IKEv2, OpenVPN, WireGuard ή πελάτης βασισμένος σε TLS. Το RADIUS δεν εμφανίζεται σε αυτή την ανταλλαγή. Ο πελάτης πιστοποιείται στην πύλη με πιστοποιητικό, όνομα χρήστη και κωδικό πρόσβασης ή μέθοδο EAP που μεταφέρεται μέσα στη ρύθμιση της σήραγγας.
Αυτό έχει σημασία όταν διαβάζετε αρχεία καταγραφής, γιατί το γενικό σφάλμα πιστοποίησης που βλέπει ο χρήστης το παράγει η πύλη αφού έχει ήδη μιλήσει με κάτι άλλο. Αν ο πελάτης δεν φτάσει ποτέ στην πύλη, δεν υπάρχει αίτημα RADIUS για αποσφαλμάτωση και μια ώρα στον διακομιστή RADIUS πάει χαμένη. Επιβεβαιώστε ότι η σήραγγα σηκώθηκε καθόλου πριν αγγίξετε το backend.
Η πύλη είναι ο πελάτης RADIUS
Μόλις η ρύθμιση της σήραγγας φτάσει στο σημείο όπου πρέπει να ελεγχθούν τα διαπιστευτήρια, η πύλη γίνεται διακομιστής πρόσβασης δικτύου. Κατασκευάζει ένα Access-Request: User-Name, κωδικό πρόσβασης ή φορτίο EAP, NAS-IP-Address ή NAS-Identifier και Message-Authenticator όταν η μέθοδος το απαιτεί. Το αίτημα πηγαίνει εξ ορισμού στο UDP 1812 και η λογιστική στο 1813. Παλαιότερες εγκαταστάσεις χρησιμοποιούν ακόμη 1645 και 1646, οπότε ένας κανόνας τείχους προστασίας γραμμένος για το ένα ζεύγος εξηγεί πολλές σιωπηλές αποτυχίες.
Και οι δύο πλευρές μοιράζονται ένα μυστικό, και δεν είναι διαπιστευτήριο χρήστη. Υπογράφει την ανταλλαγή και κάθε απάντηση επαληθεύεται ως προς αυτό. Ρυθμίστε το μυστικό διαφορετικά στις δύο πλευρές και ο διακομιστής δεν απαντά με λάθος μυστικό — απορρίπτει το αίτημα ή η απάντηση αποτυγχάνει στην επαλήθευση, οπότε η πύλη αναφέρει λήξη χρόνου. Ένα λάθος μυστικό και ένας νεκρός διακομιστής φαίνονται ίδια από την πύλη, γι' αυτό δοκιμάζω το άλμα με εργαλείο πελάτη πριν κατηγορήσω τον κατάλογο.
Το πρωτόκολλο είναι μικρό και παλιό — το RFC 2865 ορίζει την ανταλλαγή πιστοποίησης — αλλά τα χαρακτηριστικά που μεταφέρει είναι αυτά πάνω στα οποία βασίζεται η περισσότερη πολιτική VPN.
# ask the RADIUS server directly, from the gateway host
radtest alice 'test-password' 127.0.0.1 0 testing123
# watch the exchange the gateway actually sends
tcpdump -ni any -c 20 'udp port 1812'Ο διακομιστής RADIUS μπορεί να είναι μόνο το μέτωπο του παρόχου ταυτότητας
Οι άνθρωποι μιλούν για RADIUS και πάροχο ταυτότητας σαν να είναι το ίδιο κουτί. Συχνά δεν είναι. Ο διακομιστής RADIUS λαμβάνει το Access-Request και μετά ρωτά κάτι άλλο — Active Directory μέσω LDAP ή Kerberos, ένα τοπικό αρχείο χρηστών ή μια εξωτερική υπηρεσία — πριν απαντήσει. Το FreeRADIUS με το module LDAP ή krb5, το Windows NPS και το Cisco ISE βρίσκονται όλα σε αυτή τη θέση.
Η διάκριση καθορίζει πού θα κοιτάξετε. Ένας απορριφθείς κωδικός είναι απάντηση του παρόχου ταυτότητας που μεταβιβάζει το RADIUS. Η λήξη χρόνου είναι συνήθως το τμήμα RADIUS-κατάλογος: ληγμένος λογαριασμός bind, μη προσβάσιμος κατάλογος ή αίτημα που δρομολογήθηκε σε λάθος backend. Αν το όνομα χρήστη φέρει κατάληξη τομέα, ο διακομιστής μπορεί να δρομολογήσει με βάση αυτήν, και ο ίδιος λογαριασμός σταλμένος ως CORP\alice και [email protected] μπορεί να καταλήξει σε διαφορετικά σημεία. Στο Windows NPS, το αρχείο Security καταγράφει 6272 για χορήγηση και 6273 για άρνηση, που σας λέει αν η απόφαση ήρθε καθόλου από το NPS.
Διαβάστε την αποτυχία στο άλμα που την παρήγαγε
Ένα μήνυμα αδυναμίας σύνδεσης καλύπτει τέσσερις διαφορετικές αποτυχίες. Πριν αλλάξετε οτιδήποτε, αντιστοιχίστε το σύμπτωμα με το άλμα που το παρήγαγε.
| What you see | Where it comes from | First check |
|---|---|---|
| Gateway timeout, no reply | Shared secret mismatch, UDP 1812 blocked, unknown NAS, wrong server address | tcpdump at the gateway; radtest from the gateway host |
| Immediate reject | Credentials, account state, domain suffix, RADIUS policy | NPS 6273 or the FreeRADIUS auth log; test the account directly |
| Repeated challenge or MFA loop | Access-Challenge state not returned, or a token that expired mid-flow | Client prompt timing and the State attribute in debug output |
| Accept, then no access | Authorization attributes unmapped, wrong pool, route or ACL policy | Gateway policy and the attributes in the Access-Accept |
Η τελευταία γραμμή είναι αυτή που στέλνει τους ανθρώπους στη λάθος ομάδα. Το Access-Accept σημαίνει ότι τα διαπιστευτήρια έγιναν δεκτά· δεν σημαίνει ότι η πύλη έβαλε τον χρήστη στο σωστό pool ή έσπρωξε διαδρομές. Τα χαρακτηριστικά ομάδας μετράνε μόνο αν η πολιτική της πύλης τα διαβάζει. Έχω δει σωστή σύνδεση να προσγειώνεται σε pool επισκεπτών επειδή η αντιστοίχιση ομάδων είχε ρυθμιστεί στην πλευρά RADIUS για διαφορετικό χαρακτηριστικό από αυτό που εξετάζει η πύλη.
Ακολουθήστε μία σύνδεση από την αρχή ως το τέλος
Διαλέξτε έναν δοκιμαστικό λογαριασμό και μία πύλη και μετά παρακολουθήστε την ίδια προσπάθεια και στα τέσσερα σημεία. Ξεκινήστε μια εκτέλεση αποσφαλμάτωσης στην πλευρά RADIUS — το freeradius -X εκτυπώνει το αίτημα και κάθε module που αγγίζει — παρακολουθήστε το αρχείο πιστοποίησης της πύλης και εκτελέστε tcpdump για την ανταλλαγή UDP. Συνδεθείτε μία φορά και διαβάστε τα τέσσερα ίχνη με τη σειρά.
Αυτό που θέλετε να δείτε είναι συμφωνία: η πύλη ρώτησε για τον χρήστη που περιμένατε, ο διακομιστής RADIUS διάλεξε το backend που περιμένατε, αυτό το backend επέστρεψε απόφαση και τα χαρακτηριστικά στην απάντηση ταιριάζουν με την πολιτική που εφαρμόζει η πύλη. Το πρώτο σημείο όπου τα ίχνη διαφωνούν είναι η γραμμή βλάβης σας. Αν η απάντηση δεν φέρει χαρακτηριστικό ομάδας, το πρόβλημα είναι στην πλευρά RADIUS, όχι στο προφίλ VPN· αν το χαρακτηριστικό υπάρχει και η πύλη το αγνοεί, το πρόβλημα είναι η πολιτική της πύλης.
Μια σημείωση ασφαλείας όσο είστε εκεί. Το κοινό μυστικό προστατεύει την ανταλλαγή, αλλά δεν κρυπτογραφεί τα περισσότερα χαρακτηριστικά. Αν η πύλη και ο διακομιστής RADIUS βρίσκονται σε διαφορετικά τμήματα, βάλτε αυτό το άλμα σε RADIUS πάνω από TLS ή σε ιδιωτική διαδρομή. Μια κρυπτογραφημένη σήραγγα χρήστη δεν λέει τίποτα για τον σύνδεσμο του backend.
Πριν κλείσετε το ticket, επιβεβαιώστε τέσσερα πράγματα. Η πύλη φτάνει στον διακομιστή RADIUS στη θύρα για την οποία είναι πραγματικά ρυθμισμένη. Το κοινό μυστικό ταιριάζει και στις δύο πλευρές. Ο διακομιστής RADIUS επιλύει την ακριβή μορφή ονόματος χρήστη που στέλνει η πύλη. Η αποδοχή φέρει τα χαρακτηριστικά που χρειάζεται η πολιτική της πύλης. Όταν ισχύουν και τα τέσσερα, μια σύνδεση που ακόμη αποτυγχάνει είναι πρόβλημα πολιτικής πύλης, όχι πιστοποίησης.