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

Το σύμπτωμα: αποτυχία μετά από μια επιτυχή πρώτη απόδειξη

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

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

Τι προσθέτει η επέκταση και τι δεν προσθέτει

Το IKEv2 μεταφέρει μια επέκταση για περισσότερες από μία ανταλλαγές ταυτοποίησης μέσα σε μία συνεδρία. Το RFC 4739 σκιαγραφεί, μεταξύ άλλων ακολουθιών, έναν πελάτη που αποδεικνύει ταυτότητα πιστοποιητικού και μετά ταυτοποιεί ένα πρόσωπο μέσω EAP. Το έγγραφο είναι Experimental, που σημαίνει ότι καμία υλοποίηση δεν σου οφείλει τη λειτουργία. Μην υποθέσεις τίποτα για την υποστήριξη μέχρι ο ομότιμος να τη διαπραγματευτεί.

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

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

Το EAP-TLS είναι τρίτη μορφή, και ούτε αυτό είναι αυτό. Εκεί ένα πιστοποιητικό πελάτη παρουσιάζεται μέσα σε μέθοδο EAP, οπότε ο πελάτης ολοκληρώνει ακόμη μία ταυτοποίηση IKE. Τα διαπιστευτήρια μπορεί να φαίνονται ίδια με την περίπτωση πολλών γύρων, ενώ το πρωτόκολλο μεταφέρει έναν γύρο αντί για δύο. Γι' αυτό ένα σχέδιο αντιγραμμένο από εγκατάσταση EAP-TLS αποτυγχάνει ακριβώς εκεί όπου αναμένεται η δεύτερη απόδειξη.

Το ίδιο αρχείο διαβάζεται διαφορετικά στην πύλη

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

Η θέση ενός τμήματος ορίζει τη σειρά του, εκτός αν την υπερισχύσει αριθμός γύρου. Επομένως τα πρόσθετα τμήματα local ή remote περιγράφουν πρόσθετους γύρους και όχι εναλλακτικές, και ο ρητός αριθμός γύρου στην αναφορά του swanctl.conf υπάρχει ακριβώς για να κάνει αυτή τη σειρά σκόπιμη. Χωρίς αυτόν, η μετακίνηση ενός μπλοκ αλλάζει τη συμπεριφορά. Γι' αυτό και δύο διαμορφώσεις που φαίνονται ισοδύναμες στο χαρτί μπορούν να συμπεριφέρονται με αντίθετη σειρά.

Αυτός ο κανόνας σειράς παράγει τον τρόπο αποτυχίας που αξίζει να θυμάσαι. Ένα δεύτερο μπλοκ remote δεν είναι άλλη μια αποδεκτή επιλογή· είναι δεύτερη απαίτηση, γι' αυτό μια πολιτική που διαβάζεται ως ή/ή συμπεριφέρεται ως και-μετά. Μια πολιτική πύλης μπορεί να δεχτεί το πιστοποιητικό της εγγεγραμμένης μηχανής και μετά να απαιτήσει την ανταλλαγή EAP αυτού του χρήστη, με αυτή τη σειρά.

Διάκρινε τους γύρους από τους ανεξάρτητους παράγοντες

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

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

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

Γράψε τον κανόνα ζευγαρώματος και δοκίμασε τις αρνήσεις

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

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

swanctl --list-conns
swanctl --list-sas

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

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