Αντιγράψατε ένα OpenVPN jail από μια δημοσίευση της κοινότητας, επανεκκινήσατε το fail2ban και καμία διεύθυνση δεν αποκλείεται ποτέ. Η αιτία είναι σχεδόν πάντα η μορφή του αρχείου καταγραφής: ο Access Server δεν γράφει τις γραμμές αποτυχίας ελέγχου ταυτότητας που περιμένει ένα τυπικό φίλτρο. Πριν αγγίξετε το φίλτρο, επιβεβαιώστε ότι οι εγγραφές υπάρχουν καθόλου, γιατί ένα μοτίβο δεν μπορεί να ταιριάξει με ό,τι δεν κατέγραψε ποτέ η υπηρεσία.

Αυτό είναι το runbook που ακολουθώ σε έναν κεντρικό υπολογιστή με Access Server: επιβεβαίωσε το σχήμα της εγγραφής, γράψε μία αγκιστρωμένη έκφραση, δοκίμασέ την στο πραγματικό αρχείο, μετά χώρισε τα jails ανά επιφάνεια που δέχεται την επίθεση και επαλήθευσε ότι ο αποκλεισμός φτάνει στο firewall.

Επιβεβαιώστε ότι η εγγραφή αποτυχίας υπάρχει

Ο Access Server γράφει τις δικές του δομημένες γραμμές στο /var/log/openvpnas.log, και η διεύθυνση του πελάτη βρίσκεται σε ένα πεδίο real_ip μέσα σε εισαγωγικά και όχι στην αρχή μιας γραμμής syslog. Αναζητήστε μια αποτυχημένη σύνδεση που ξέρετε ότι συνέβη πριν γράψετε οποιοδήποτε μοτίβο:

grep -i 'LOG ERR' /var/log/openvpnas.log | tail -20

Αν δεν εμφανιστεί τίποτα, το επίπεδο καταγραφής είναι ο επόμενος ύποπτος. Ο Access Server έχει διακόπτη αποσφαλμάτωσης για τη βάση δεδομένων καταγραφής στο /usr/local/openvpn_as/etc/as.conf (DEBUG_LOGDB=1), και η υπηρεσία πρέπει να επανεκκινηθεί αφού αλλάξει. Αντιμετωπίστε αυτόν τον διακόπτη ως διαγνωστική ρύθμιση που θα ξαναχαμηλώσει μόλις έχετε το μοτίβο σας, όχι ως μόνιμη διαμόρφωση.

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

Αγκιστρώστε ένα φίλτρο στο real_ip

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

# /etc/fail2ban/filter.d/openvpnaccess.local
[Definition]
failregex = ^ .*LOG ERR.*"real_ip": "<HOST>".*
ignoreregex =

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

Όταν χρειάζεστε ακρίβεια ανά επιφάνεια, περιορίστε περαιτέρω απαιτώντας τον δείκτη επιφάνειας (WEB_CLIENT, WEB_ADMIN ή VPN) στην ίδια γραμμή. Ένα φίλτρο με τρία μοτίβα ελέγχεται ευκολότερα από τρία φίλτρα που διαφέρουν σε μία λέξη.

Δοκιμάστε την έκφραση πριν ενεργοποιήσετε ένα jail

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

fail2ban-regex --print-all-missed /var/log/openvpnas.log \
  /etc/fail2ban/filter.d/openvpnaccess.local \
  /etc/fail2ban/filter.d/openvpnaccess.local > missed.txt

Συγκρίνετε τον αριθμό των ταιριασμάτων με τις αποτυχίες που επαληθεύσατε στο πρώτο βήμα. Μηδέν ταιριάσματα σημαίνει ότι το μοτίβο είναι λάθος. Ταιριάσματα σε γραμμές που δεν είναι αποτυχίες ελέγχου ταυτότητας σημαίνει ότι είναι πολύ ευρύ. Διαβάστε το missed.txt μέχρι να μπορείτε να εξηγήσετε κάθε γραμμή που επιλέξατε να μη διεκδικήσετε.

Κάντε αυτή τη δοκιμή σε αντίγραφο αν το αρχείο είναι μεγάλο, και επαναλάβετέ την μετά από κάθε αναβάθμιση του Access Server. Η μορφή του αρχείου είναι η διεπαφή με την οποία ταιριάζετε, και δεν είναι σταθερό API.

Χωρίστε τα jails ανά επιφάνεια, όχι ανά δαίμονα

Ένας Access Server παρουσιάζει πολλές επιφάνειες ελέγχου ταυτότητας: διεπαφές ιστού πελάτη και διαχειριστή στη θύρα 943/tcp, και τη σήραγγα στη 1194/udp ή 443/tcp στις περισσότερες εγκαταστάσεις. Ένα jail που τις καλύπτει όλες επιτρέπει στις απόπειρες μαντέματος στη σήραγγα να αποκλείσουν μια διεύθυνση που είναι και η διαχειριστική σας διαδρομή, και κρύβει ποια επιφάνεια δέχεται στην πραγματικότητα την επίθεση. Δώστε σε κάθε επιφάνεια το δικό της jail με τη δική του θύρα και κατώφλια:

# /etc/fail2ban/jail.d/openvpnaccess.local
[openvpnas-web-client]
enabled  = true
port     = 943
protocol = tcp
filter   = openvpnaccess
logpath  = /var/log/openvpnas.log
maxretry = 3
findtime = 10m
bantime  = 1h
[openvpnas-tunnel]
enabled  = true
port     = 443
protocol = udp
filter   = openvpnaccess
logpath  = /var/log/openvpnas.log
maxretry = 5
findtime = 10m
bantime  = 1h

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

Επαληθεύστε τον αποκλεισμό, το backend και τις παράπλευρες ζημιές

Μετά από επανεκκίνηση, η έξοδος κατάστασης είναι η γρηγορότερη επιβεβαίωση ότι το jail υπάρχει και μετρά:

fail2ban-client status
fail2ban-client status openvpnas-tunnel

Έπειτα επιβεβαιώστε ότι ο αποκλεισμός φτάνει στο firewall που εκτελείτε πραγματικά, γιατί ένα jail διαμορφωμένο για backend που κανείς δεν επιβάλλει δεν προστατεύει τίποτα. Με τη δράση iptables οι διευθύνσεις εμφανίζονται σε μια αλυσίδα που φέρει το όνομα του jail (f2b-openvpnas-tunnel). Με τη δράση nftables καταλήγουν σε ένα σύνολο στον δικό του πίνακα του fail2ban. Ελέγξτε αυτό που χρησιμοποιεί ο κεντρικός σας υπολογιστής αντί να υποθέσετε.

Δύο παράπλευροι έλεγχοι μετρούν περισσότερο από τον ίδιο τον αποκλεισμό. Πρώτον, επαληθεύστε ότι το real_ip είναι η διεύθυνση του πελάτη και όχι εξισορροπητής φόρτου ή αντίστροφος διαμεσολαβητής. Πίσω από διαμεσολαβητή κάθε αποκλεισμός πέφτει στον διαμεσολαβητή και παρασύρει ολόκληρη την υπηρεσία. Δεύτερον, γράψτε τη διαδικασία άρσης του αποκλεισμού, γιατί η διεύθυνση που ξεπερνά το κατώφλι στις 02:00 ανήκει συνήθως στον εφημερεύοντα μηχανικό: fail2ban-client set openvpnas-tunnel unbanip 203.0.113.24.

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

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