Πώς να ασφαλίσετε τον διακομιστή σας Linux με το fail2ban

Με το fail2ban, ο υπολογιστής σας Linux αποκλείει αυτόματα τις διευθύνσεις IP που έχουν πάρα πολλές αποτυχίες σύνδεσης. Είναι αυτορυθμιζόμενη ασφάλεια! Θα σας δείξουμε πώς να το χρησιμοποιήσετε.

Ασφάλεια Ασφάλεια Ασφάλεια

Δούκισσα του Ουίνδσορ, Wallis Simpson, Κάποτε είπε το διάσημο: «Δεν μπορείς ποτέ να είσαι πολύ πλούσιος ή πολύ αδύνατος». Το έχουμε ενημερώσει για τον σύγχρονο, διασυνδεδεμένο κόσμο μας: Δεν μπορείτε ποτέ να είστε πολύ προσεκτικοί ή πολύ ασφαλείς.

Εάν ο υπολογιστής σας δέχεται εισερχόμενα αιτήματα σύνδεσης, όπως π.χ Ασφαλές κέλυφος (SSH) συνδέσεις ή λειτουργεί ως διακομιστής web ή email, πρέπει να τον προστατεύσετε από επιθέσεις ωμής βίας και εικασίες κωδικών πρόσβασης.

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

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

Το fail2ban ενσωματώνεται με το τείχος προστασίας Linux iptables. Επιβάλλει τις απαγορεύσεις στις ύποπτες διευθύνσεις IP προσθέτοντας κανόνες στο τείχος προστασίας. Για να διατηρήσουμε αυτή την εξήγηση ξεκάθαρη, χρησιμοποιούμε iptables με κενό σύνολο κανόνων.

Φυσικά, εάν ανησυχείτε για την ασφάλεια, πιθανότατα έχετε ένα τείχος προστασίας διαμορφωμένο με ένα καλά συμπληρωμένο σύνολο κανόνων. fail2ban μόνο προσθέτει και αφαιρεί τους δικούς του κανόνες—οι κανονικές λειτουργίες του τείχους προστασίας σας θα παραμείνουν ανέγγιχτες.

Μπορούμε να δούμε το κενό σύνολο κανόνων μας χρησιμοποιώντας αυτήν την εντολή:

sudo iptables -L

Εγκατάσταση fail2ban

Η εγκατάσταση του fail2ban είναι απλή σε όλες τις διανομές που χρησιμοποιήσαμε για την έρευνα αυτού του άρθρου. Στο Ubuntu 20.04, η εντολή είναι η εξής:

sudo apt-get install fail2ban

Στο Fedora 32, πληκτρολογήστε:

sudo dnf install fail2ban

Στο Manjaro 20.0.1, χρησιμοποιήσαμε το pacman:

sudo pacman -Sy fail2ban

Διαμόρφωση fail2ban

Η εγκατάσταση fail2ban περιέχει ένα προεπιλεγμένο αρχείο διαμόρφωσης που ονομάζεται jail.conf. Αυτό το αρχείο αντικαθίσταται όταν το fail2ban αναβαθμίζεται, επομένως θα χάσουμε τις αλλαγές μας εάν κάνουμε προσαρμογές σε αυτό το αρχείο.

  Last Light Redux σε Linux

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

Αυτός είναι ο τρόπος αντιγραφής του αρχείου:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Τώρα ανοίξτε το αρχείο στον αγαπημένο σας επεξεργαστή. Θα χρησιμοποιήσουμε το gedit:

sudo gedit /etc/fail2ban/jail.local

Θα αναζητήσουμε δύο ενότητες στο αρχείο: [DEFAULT] και [sshd]. Ωστόσο, φροντίστε να βρείτε τις πραγματικές ενότητες. Αυτές οι ετικέτες εμφανίζονται επίσης κοντά στην κορυφή σε μια ενότητα που τις περιγράφει, αλλά δεν είναι αυτό που θέλουμε.

Θα βρείτε το [DEFAULT] τμήμα κάπου γύρω από τη γραμμή 40. Είναι μια μεγάλη ενότητα με πολλά σχόλια και εξηγήσεις.

Κάντε κύλιση προς τα κάτω στη γραμμή 90 και θα βρείτε τις ακόλουθες τέσσερις ρυθμίσεις που πρέπει να γνωρίζετε:

ignoreip: Μια λίστα επιτρεπόμενων διευθύνσεων IP που δεν θα αποκλειστούν ποτέ. Έχουν μια μόνιμη κάρτα Get Out of Jail Free. ο διεύθυνση IP του localhost Το (127.0.0.1) βρίσκεται στη λίστα από προεπιλογή, μαζί με το αντίστοιχο IPv6 (::1). Εάν υπάρχουν άλλες διευθύνσεις IP που γνωρίζετε ότι δεν πρέπει ποτέ να αποκλειστούν, προσθέστε τις σε αυτήν τη λίστα και αφήστε ένα κενό μεταξύ τους.
bantime: Η διάρκεια για την οποία απαγορεύεται μια διεύθυνση IP (το “m” σημαίνει λεπτά). Εάν πληκτρολογήσετε μια τιμή χωρίς “m” ή “h” (για ώρες) θα αντιμετωπίζεται ως δευτερόλεπτα. Η τιμή -1 θα αποκλείσει οριστικά μια διεύθυνση IP. Προσέξτε πολύ να μην κλειδώσετε μόνιμα έξω.
findtime: Το χρονικό διάστημα εντός του οποίου πάρα πολλές αποτυχημένες προσπάθειες σύνδεσης θα έχουν ως αποτέλεσμα τον αποκλεισμό μιας διεύθυνσης IP.
maxretry: Η τιμή για “πάρα πολλές αποτυχημένες προσπάθειες”.

Εάν μια σύνδεση από την ίδια διεύθυνση IP πραγματοποιήσει αποτυχημένες προσπάθειες σύνδεσης maxretry εντός της περιόδου εύρεσης, θα αποκλειστούν για τη διάρκεια του bantime. Οι μόνες εξαιρέσεις είναι οι διευθύνσεις IP στη λίστα ignoreip.

Το fail2ban θέτει τις διευθύνσεις IP στη φυλακή για ένα καθορισμένο χρονικό διάστημα. Το fail2ban υποστηρίζει πολλά διαφορετικά jails και το καθένα αντιπροσωπεύει κρατήσεις που ισχύουν για έναν τύπο σύνδεσης. Αυτό σας επιτρέπει να έχετε διαφορετικές ρυθμίσεις για διάφορους τύπους σύνδεσης. Ή μπορείτε να έχετε την παρακολούθηση fail2ban μόνο ένα επιλεγμένο σύνολο τύπων σύνδεσης.

  Πώς να χρησιμοποιήσετε τη Μουσική YouTube στον επιτραπέζιο υπολογιστή Linux

Ίσως το μαντέψατε από το [DEFAULT] όνομα ενότητας, αλλά οι ρυθμίσεις που εξετάσαμε είναι οι προεπιλογές. Τώρα, ας δούμε τις ρυθμίσεις για τη φυλακή SSH.

Διαμόρφωση φυλακής

Τα jails σάς επιτρέπουν να μετακινείτε τύπους σύνδεσης μέσα και έξω από την παρακολούθηση του fail2ban. Εάν οι προεπιλεγμένες ρυθμίσεις δεν ταιριάζουν με αυτές που θέλετε να εφαρμοστούν στη φυλακή, μπορείτε να ορίσετε συγκεκριμένες τιμές για το bantime, το findtime και το maxretry.

Κάντε κύλιση προς τα κάτω στη γραμμή 280 περίπου και θα δείτε το [sshd] Ενότητα.

Εδώ μπορείτε να ορίσετε τιμές για το jail σύνδεσης SSH. Για να συμπεριλάβουμε αυτή τη φυλακή στην παρακολούθηση και την απαγόρευση, πρέπει να πληκτρολογήσουμε την ακόλουθη γραμμή:

enabled = true

Πληκτρολογούμε επίσης αυτή τη γραμμή:

maxretry = 3

Η προεπιλεγμένη ρύθμιση ήταν πέντε, αλλά θέλουμε να είμαστε πιο προσεκτικοί με τις συνδέσεις SSH. Το μειώσαμε στα τρία και, στη συνέχεια, αποθηκεύσαμε και κλείσαμε το αρχείο.

Προσθέσαμε αυτό το jail στην παρακολούθηση του fail2ban και αντικαταστήσαμε μία από τις προεπιλεγμένες ρυθμίσεις. Ένα jail μπορεί να χρησιμοποιήσει έναν συνδυασμό προεπιλεγμένων και ρυθμίσεων για συγκεκριμένες φυλακές.

Ενεργοποίηση fail2ban

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

Για να ενεργοποιήσουμε το fail2ban ως υπηρεσία, χρησιμοποιούμε το εντολή systemctl:

sudo systemctl enable fail2ban

Το χρησιμοποιούμε επίσης για να ξεκινήσουμε την υπηρεσία:

sudo systemctl start fail2ban

Μπορούμε επίσης να ελέγξουμε την κατάσταση της υπηρεσίας χρησιμοποιώντας το systemctl:

sudo systemctl status fail2ban.service

Όλα φαίνονται καλά—έχουμε το πράσινο φως, οπότε όλα είναι καλά.

Ας δούμε αν το fail2ban συμφωνεί:

sudo fail2ban-client status

Αυτό αντανακλά αυτό που δημιουργήσαμε. Έχουμε ενεργοποιήσει μία μόνο φυλακή, με το όνομα [sshd]. Εάν συμπεριλάβουμε το όνομα της φυλακής με την προηγούμενη εντολή μας, μπορούμε να το δούμε πιο βαθιά:

sudo fail2ban-client status sshd

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

Δοκιμάζοντας τη φυλακή μας

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

  Πώς να βρείτε κρίσιμες πληροφορίες συστήματος στο Linux με το I-Nex

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

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

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

Πρέπει να πατήσετε Ctrl+C για να επιστρέψετε στη γραμμή εντολών. Αν προσπαθήσουμε άλλη μια φορά, θα λάβουμε διαφορετική απάντηση:

ssh [email protected]

Προηγουμένως, το μήνυμα σφάλματος ήταν “Απόρριψη άδειας”. Αυτή τη φορά, η σύνδεση απορρίφθηκε κατηγορηματικά. Είμαστε persona non grata. Μας έχουν απαγορεύσει.

Ας δούμε τις λεπτομέρειες του [sshd] πάλι φυλακή:

sudo fail2ban-client status sshd

Υπήρξαν τρεις αποτυχίες και μια διεύθυνση IP (192.168.4.25) απαγορεύτηκε.

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

sudo iptables -L

Ένας κανόνας έχει προστεθεί στην πολιτική INPUT, στέλνοντας κίνηση SSH στην αλυσίδα f2b-sshd. Ο κανόνας στην αλυσίδα f2b-sshd απορρίπτει τις συνδέσεις SSH από το 192.168.4.25. Δεν αλλάξαμε την προεπιλεγμένη ρύθμιση για το bantime, επομένως, σε 10 λεπτά, αυτή η διεύθυνση IP θα καταργηθεί και θα μπορεί να κάνει νέα αιτήματα σύνδεσης.

Εάν ορίσετε μεγαλύτερη διάρκεια απαγόρευσης (όπως αρκετές ώρες), αλλά θέλετε να επιτρέψετε σε μια διεύθυνση IP να υποβάλει ένα άλλο αίτημα σύνδεσης νωρίτερα, μπορείτε να την αποδεσμεύσετε νωρίτερα.

Για να γίνει αυτό, πληκτρολογούμε τα εξής:

sudo fail2ban-client set sshd unbanip 192.168.5.25

Στον απομακρυσμένο υπολογιστή μας, εάν υποβάλουμε άλλο αίτημα σύνδεσης SSH και πληκτρολογήσουμε τον σωστό κωδικό πρόσβασης, θα μας επιτραπεί να συνδεθούμε:

ssh [email protected]

Απλό και Αποτελεσματικό

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