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

Από το παράθυρο εισαγωγής στην οδηγία

Το προφίλ είναι ένα αρχείο κειμένου με οδηγίες και ο πελάτης τις διαβάζει πριν υπάρξει οποιαδήποτε σήραγγα. Μια οδηγία όπως up, down ή tls-verify ονομάζει ένα εξωτερικό πρόγραμμα που OpenVPN πρέπει να εκτελέσει σε καθορισμένη στιγμή. Το αν το OpenVPN είναι πρόθυμο να το εκτελέσει είναι ξεχωριστή ρύθμιση που ονομάζεται script-security, και το προφίλ συνήθως την ορίζει κι αυτή.

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

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

Τι ανοίγει πραγματικά κάθε επίπεδο

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

LevelWhat OpenVPN may executeWhat it exposes
0No external programs at allInterface and route setup must not depend on helpers
1 (default)Built-in helpers such as ip, ifconfig, route or netshPrivileged commands the platform already ships
2Built-in helpers plus user-defined scriptsWhatever the named script does with the client's privileges
3Everything above, plus passwords in environment variablesCredentials visible to child processes and their logs

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

Κανένας από αυτούς τους αριθμούς δεν είναι ρύθμιση ισχύος. Ένα προφίλ στο επίπεδο 3 δεν έχει καλύτερη κρυπτογράφηση από ένα στο επίπεδο 1· απλώς έχει μεγαλύτερη επιφάνεια εκτέλεσης, και η σήραγγα είναι ίδια.

Αποφασίστε τι αξίζει το προφίλ

Ρωτήστε σε τι χρησιμεύει το σενάριο πριν ρωτήσετε ποιο επίπεδο χρειάζεται. Ένα άγκιστρο που σπρώχνει ρυθμίσεις DNS ή διορθώνει μια διαδρομή μετά τη σύνδεση είναι νόμιμος λόγος να εκτελέσετε κάτι. Ένα άγκιστρο που καλεί ένα άγνωστο δυαδικό αρχείο σε προσωρινό κατάλογο είναι λόγος να σταματήσετε.

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

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

grep -nE 'script-security|^up |^down |tls-verify' client.ovpn

Αλλάξτε ένα πράγμα και μετά παρακολουθήστε και την αποσυναρμολόγηση

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

openvpn --config client.ovpn --script-security 2 --verb 3
ip route show default

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

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

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

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