Η εκτέλεση του nc -uz εναντίον ενός διακομιστή OpenVPN δεν μετρά σχεδόν τίποτα, και το εγχειρίδιο του OpenBSD το λέει στις επιφυλάξεις του: οι σαρώσεις UDP σε αυτή τη λειτουργία αναφέρουν επιτυχία ανεξάρτητα από το αν ακούει κάτι. Η κατάσταση εξόδου αντικατοπτρίζει την τοπική αποστολή, όχι την απομακρυσμένη κατάσταση, οπότε ένας επόπτης που την εμπιστεύεται κρατά έναν νεκρό διακομιστή σημασμένο ως υγιή όσο ο πίνακας διεργασιών φαίνεται πειστικός. Η αντικατάσταση ξεκινά με την απόφαση σε ποια ερώτηση πρέπει να απαντήσει ο έλεγχος, γιατί διεργασία, ακροατής, πιστοποίηση και προσβασιμότητα της εφαρμογής είναι τέσσερις διαφορετικές παρατηρήσεις. Ένας έλεγχος που ονομάζει μία από αυτές είναι χρήσιμος, ενώ ένας έλεγχος που υπονοεί και τις τέσσερις είναι βάρος.

Τι μπορεί και τι δεν μπορεί να παρατηρήσει ένας έλεγχος UDP

nc -uz στέλνει ένα αυτοδύναμο πακέτο και τερματίζει, και η κατάσταση που επιστρέφει περιγράφει την τοπική αποστολή. Μια κλειστή θύρα μπορεί να απαντήσει με ICMP port unreachable, αλλά η τεκμηριωμένη συμπεριφορά αυτής της λειτουργίας σάρωσης δεν το μετατρέπει σε αποτυχία, και μια φιλτραρισμένη θύρα δεν παράγει καμία απάντηση. Έτσι η σιωπή και η επιτυχία σημαίνουν το ίδιο για τον καλούντα.

Αυτό κάνει τον έλεγχο δοκιμή της τοπικής στοίβας, όχι του διακομιστή. Δεν αποδεικνύει ότι ο κεντρικός υπολογιστής είναι προσβάσιμος, ότι η θύρα είναι δεσμευμένη, ότι η διεργασία OpenVPN εκτελείται ή ότι ένας πελάτης θα μπορούσε να πιστοποιηθεί. Μια δοκιμή σύνδεσης TCP είναι ισχυρότερη επειδή η χειραψία δίνει σαφή απάντηση, αλλά μόνο όταν η εγκατάσταση ακούει πραγματικά σε TCP. Η αλλαγή του ελέγχου σε TCP στον ίδιο αριθμό δοκιμάζει έναν ακροατή που μπορεί να μην υπάρχει, και απέναντι σε διακομιστή μόνο με UDP θα αποτύχει μια υγιή υπηρεσία.

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

Τρεις καλούντες, τρεις διαφορετικές ερωτήσεις

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

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

Χτίστε τον έλεγχο από το τρέχον στιγμιότυπο

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

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

systemctl is-active openvpn@server
sudo journalctl -u openvpn@server -b --no-pager | grep "Initialization Sequence Completed"
ss -lunp | grep 1194

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

Σπάστε το επίτηδες και παρακολουθήστε τον έλεγχο

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

sudo systemctl stop openvpn@server
nc -uz 203.0.113.10 1194; echo "exit=$?"
ss -lunp | grep 1194
sudo systemctl start openvpn@server
ss -lunp | grep 1194

Διαβάστε το μπλοκ γραμμή προς γραμμή. Η εντολή netcat εκτυπώνει exit=0 ενώ τίποτα δεν είναι δεσμευμένο, και αυτό είναι όλο το πρόβλημα σε μία γραμμή. Η πρώτη ss δεν εκτυπώνει τίποτα, η επανεκκίνηση πετυχαίνει, και η δεύτερη ss δείχνει ξανά τον ακροατή. Αν ο έλεγχός σας περνά απέναντι στον σταματημένο διακομιστή, μετρά την τοπική στοίβα και τίποτα άλλο.

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

Τι πρέπει να λέει η γραμμή κατάστασης

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

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

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

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