Μετάβαση στο περιεχόμενο

Ρυθμίσεις cookies

Επιλέξτε ανά κατηγορία ποια cookies επιτρέπετε. Μπορείτε να αλλάξετε την επιλογή σας οποιαδήποτε στιγμή μέσω των Ρυθμίσεων cookies στο κάτω μέρος κάθε σελίδας. Δήλωση απορρήτου

Απαραίτητα

Πάντα ενεργά

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

Ποια cookies;
  • weboke_sessie, weboke_klant, weboke_remember: η συνεδρία σας και η παραμονή σε σύνδεση
  • weboke_basket: το καλάθι σας
  • wkBtwIncl: εμφάνιση τιμών με ή χωρίς ΦΠΑ
  • wok_cookies: η επιλογή σας για τα cookies, 12 μήνες

Μετρούν ποια διαφήμιση οδηγεί σε επίσκεψη ή παραγγελία, ώστε να μην πληρώνουμε για διαφημίσεις που δεν αποδίδουν.

Ποια cookies;
  • Google Ads μέσω Google Tag Manager (_gcl_au, _gcl_aw), έως 90 ημέρες
  • OpenAI Ads, διαφημίσεις στο ChatGPT
  • wok_aff: μέσω ποιου συνεργάτη ήρθατε σε εμάς (πρόγραμμα συνεργατών), 60 ημέρες

4,6

Χώρα και γλώσσα

Κάθε χώρα έχει τη δική της ιστοσελίδα, με τιμές και ΦΠΑ της χώρας αυτής.

Προβολή

fail2ban κατά των προσπαθειών μαντέματος κωδικών

Ενότητα 5: Προστασία του δικτύου · Χρόνος ανάγνωσης: 10 λεπτά

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

Βασικές έννοιες: brute force, jail, filter, ενέργεια (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local και jail.d, fail2ban-client, recidive

Αυτοί που δοκιμάζουν τα πόμολα του internet

Ρίξτε μια ματιά στο αρχείο καταγραφής του SSH μία ημέρα μετά την εγκατάσταση και θα το δείτε: εκατοντάδες προσπάθειες σύνδεσης, με ονόματα όπως root, admin, test, ubuntu και oracle, από διευθύνσεις σε όλο τον κόσμο.

anna@web1:~$ sudo journalctl -u ssh --since today | grep -c "Invalid user"
412
anna@web1:~$ sudo journalctl -u ssh --since today | grep "Invalid user" | tail -n 3
nov 09 14:02:11 web1 sshd-session[20311]: Invalid user admin from 203.0.113.77 port 51522
nov 09 14:02:13 web1 sshd-session[20313]: Invalid user oracle from 203.0.113.77 port 51544
nov 09 14:02:16 web1 sshd-session[20315]: Invalid user test from 203.0.113.77 port 51560

(Στο Ubuntu η υπηρεσία ονομάζεται ssh, στο AlmaLinux και στο Rocky sshd. Το όνομα της διεργασίας μπορεί να είναι sshd ή sshd-session, ανάλογα με την έκδοση του OpenSSH.) Αυτή είναι μια επίθεση brute force: bots που απλώς δοκιμάζουν όλα τα συνηθισμένα ονόματα και κωδικούς πρόσβασης. Με σύνδεση μέσω κλειδιών και απενεργοποιημένη σύνδεση με κωδικό πρόσβασης (μάθημα 2.2) δεν μπαίνουν ποτέ, όσες φορές κι αν προσπαθήσουν. Γεμίζουν όμως το αρχείο καταγραφής σας, καταναλώνουν λίγη υπολογιστική ισχύ και, σε υπηρεσίες όπου απαιτείται κωδικός πρόσβασης (ένα webmail, ένας πίνακας διαχείρισης), μπορεί να γίνουν πραγματικά επικίνδυνα.

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

Πώς σκέφτεται το fail2ban: jails

Το fail2ban λειτουργεί με jails (κελιά). Ένα jail συνδυάζει τρία πράγματα:

  • ένα filter: κανονικές εκφράσεις που αναγνωρίζουν αποτυχημένες προσπάθειες σε ένα αρχείο καταγραφής (για παράδειγμα τη γραμμή "Invalid user ... from <adres>")·
  • μια ενέργεια: τι συμβαίνει όταν οι προσπάθειες είναι πάρα πολλές, συνήθως ένας κανόνας firewall που αποκλείει τη διεύθυνση (banaction, στο Debian 13 από προεπιλογή μέσω nftables)·
  • όρια: πόσες αποτυχημένες προσπάθειες (maxretry) μέσα σε πόσο χρόνο (findtime) οδηγούν σε αποκλεισμό και για πόσο διάστημα (bantime).

Οι προεπιλεγμένες τιμές στο jail.conf είναι: maxretry = 5, findtime = 10m, bantime = 10m. Δηλαδή: πέντε αποτυχημένες προσπάθειες μέσα σε δέκα λεπτά φέρνουν αποκλεισμό δέκα λεπτών.

Εγκατάσταση και η παγίδα του Debian 12

anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2ban

Στο Debian και στο Ubuntu το jail για SSH ([sshd]) είναι ήδη ενεργό μετά την εγκατάσταση, μέσω του αρχείου /etc/fail2ban/jail.d/defaults-debian.conf.

Υπάρχει μία γνωστή παγίδα. Το fail2ban πρέπει να γνωρίζει πού βρίσκεται το αρχείο καταγραφής. Παλαιότερα ήταν το αρχείο κειμένου /var/log/auth.log. Από το Debian 12 και μετά το rsyslog δεν εγκαθίσταται πλέον από προεπιλογή και τα μηνύματα βρίσκονται μόνο στο journal του systemd (μάθημα 6.2). Το πακέτο fail2ban του Debian 12 έψαχνε ακόμη το /var/log/auth.log, δεν το έβρισκε και δεν ξεκινούσε. Το Debian 13 το διόρθωσε ορίζοντας στο defaults-debian.conf για το SSH backend = systemd. Στο Debian 12 το διορθώνετε μόνοι σας (δείτε παρακάτω) κάνοντας το ίδιο. Το Ubuntu έχει ακόμη το rsyslog από προεπιλογή, αλλά το backend = systemd λειτουργεί κι εκεί.

Οι δικές σας ρυθμίσεις: jail.local

Μην τροποποιείτε ποτέ το jail.conf: το αρχείο αυτό αντικαθίσταται σε κάθε ενημέρωση. Βάλτε τις δικές σας ρυθμίσεις στο /etc/fail2ban/jail.local ή σε ένα αρχείο μέσα στο /etc/fail2ban/jail.d/ με την κατάληξη .local:

# /etc/fail2ban/jail.d/eigen.local
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
bantime.increment = true
ignoreip = 127.0.0.1/8 ::1 198.51.100.20

[sshd]
enabled = true
backend = systemd

Τι κάνουν οι γραμμές:

  • bantime = 1h: αποκλεισμός μίας ώρας αντί για δέκα λεπτά.
  • bantime.increment = true: όποιος επιστρέφει μετά από αποκλεισμό, δέχεται κάθε φορά μεγαλύτερο αποκλεισμό.
  • ignoreip: διευθύνσεις που δεν αποκλείονται ποτέ. Βάλτε εδώ τη σταθερή διεύθυνση IP του γραφείου σας, αν έχετε. Μη βάζετε εδώ μεγάλα εύρη διευθύνσεων "για σιγουριά".
  • backend = systemd: ανάγνωση του journal αντί για αρχείο κειμένου (απαραίτητο στο Debian 12, συνιστάται παντού). Για αυτό πρέπει να είναι εγκατεστημένο το πακέτο python3-systemd· συνήθως είναι ήδη, ως εξάρτηση.

Επαναφόρτωση και έλεγχος:

anna@web1:~$ sudo fail2ban-client -t            # έλεγχος ρυθμίσεων
OK: configuration test is successful
anna@web1:~$ sudo systemctl reload fail2ban
anna@web1:~$ sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

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

anna@web1:~$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 3
|  |- Total failed:     1288
|  `- Journal matches:  _SYSTEMD_UNIT=ssh.service + _COMM=sshd
`- Actions
   |- Currently banned: 2
   |- Total banned:     117
   `- Banned IP list:   203.0.113.77 198.51.100.140

Το "Currently failed" αφορά διευθύνσεις που έχουν ήδη κάνει προσπάθειες αλλά δεν έχουν ξεπεράσει ακόμη το όριο. Το "Currently banned" αφορά τις διευθύνσεις που είναι αποκλεισμένες αυτή τη στιγμή.

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

anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20

Το αρχείο καταγραφής του ίδιου του fail2ban βρίσκεται στο /var/log/fail2ban.log και δείχνει πότε αποκλείστηκε και πότε απελευθερώθηκε κάθε διεύθυνση:

2026-11-09 14:02:16,903 fail2ban.actions [811]: NOTICE  [sshd] Ban 203.0.113.77
2026-11-09 15:02:17,120 fail2ban.actions [811]: NOTICE  [sshd] Unban 203.0.113.77

Όσοι επανέρχονται: recidive

Ορισμένα bots απλώς επιστρέφουν μετά από κάθε αποκλεισμό. Για αυτό υπάρχουν δύο μέσα. Το bantime.increment (παραπάνω) κάνει τον αποκλεισμό κάθε φορά μεγαλύτερο. Επιπλέον υπάρχει το jail recidive: διαβάζει το αρχείο καταγραφής του ίδιου του fail2ban και αποκλείει για μία εβδομάδα, σε όλες τις θύρες, μια διεύθυνση που έχει αποκλειστεί πολλές φορές μέσα σε μία ημέρα. Ενεργοποιήστε το στο αρχείο σας .local:

[recidive]
enabled = true

Τι κάνει και τι δεν κάνει το fail2ban

Το fail2ban είναι χρήσιμο, αλλά δεν είναι η κλειδαριά της πόρτας. Η κλειδαριά είναι η σύνδεση με κλειδί, με απενεργοποιημένους τους κωδικούς πρόσβασης (μάθημα 2.2). Γι' αυτό καλό είναι να γνωρίζετε και τι δεν μπορεί να κάνει το fail2ban:

  • Μια κατανεμημένη επίθεση από χιλιάδες διευθύνσεις, με μία ή δύο προσπάθειες η καθεμία, δεν ξεπερνά ποτέ το maxretry.
  • Ένας αδύναμος κωδικός πρόσβασης παραμένει αδύναμος. Το fail2ban απλώς επιβραδύνει το μάντεμα, τίποτα περισσότερο.
  • Μόνο ό,τι υπάρχει σε ένα log: μια υπηρεσία που δεν καταγράφει αποτυχημένες προσπάθειες, ή ένα log που το fail2ban δεν διαβάζει, δεν το βλέπει.
  • Docker: οι αποκλεισμοί στην κανονική αλυσίδα του firewall δεν ισχύουν για δημοσιευμένες θύρες container (μάθημα 9.3). Για υπηρεσίες σε containers χρειάζεται ξεχωριστή ρύθμιση (ενέργεια στην αλυσίδα DOCKER-USER).

Τι κάνει καλά το fail2ban: κρατά ήσυχο το αρχείο καταγραφής, μειώνει το φορτίο από τα bots και προστατεύει υπηρεσίες όπου χρησιμοποιείτε (ακόμη) κωδικούς πρόσβασης, όπως ένα webmail ή έναν πίνακα διαχείρισης. Για τέτοιες υπηρεσίες υπάρχουν filters για nginx, Postfix, Dovecot και πολλές άλλες.

Στο AlmaLinux και στο Rocky Linux

Εκεί το fail2ban προέρχεται από το EPEL: dnf install epel-release και μετά dnf install fail2ban. Το πακέτο fail2ban εγκαθιστά επίσης τη σύνδεση με το firewalld. Η υπηρεσία SSH ονομάζεται sshd. Ενεργοποιήστε το jail μόνοι σας σε ένα αρχείο .local· σε αντίθεση με το Debian, δεν είναι ενεργό αυτόματα.

Σύνοψη

  • Τα bots προσπαθούν να συνδεθούν όλη την ημέρα· με κλειδιά και απενεργοποιημένη σύνδεση με κωδικό πρόσβασης δεν μπαίνουν, και το fail2ban επιπλέον τα κρατά σε απόσταση.
  • Ένα jail είναι filter + ενέργεια + όρια (maxretry, findtime, bantime)· από προεπιλογή 5 προσπάθειες σε 10 λεπτά, αποκλεισμός 10 λεπτών.
  • Οι δικές σας ρυθμίσεις μπαίνουν στο jail.local ή στο jail.d/*.local, ποτέ στο jail.conf· χρησιμοποιήστε backend = systemd (απαραίτητο στο Debian 12).
  • Το fail2ban-client status sshd δείχνει τις αποκλεισμένες διευθύνσεις, το set sshd unbanip τις απελευθερώνει· το recidive και το bantime.increment αντιμετωπίζουν όσους επανέρχονται.
  • Το fail2ban δεν σταματά κατανεμημένες επιθέσεις ή αδύναμους κωδικούς πρόσβασης και δεν βλέπει από μόνο του τις θύρες του Docker.

Κουίζ

1. Εγκαταστήσατε το fail2ban στο Debian 12 και δεν ξεκινά, με το μήνυμα ότι δεν υπάρχει αρχείο καταγραφής για το jail sshd. Ποια είναι η αιτία;



2. Γιατί βάζετε τις ρυθμίσεις σας στο jail.local και όχι στο jail.conf;



3. Οι προεπιλεγμένες ρυθμίσεις είναι maxretry = 5, findtime = 10m, bantime = 10m. Μια διεύθυνση κάνει αποτυχημένη προσπάθεια στις 14:00, 14:03, 14:05, 14:08 και 14:09. Τι συμβαίνει;



4. Ο server σας δέχεται κάθε ημέρα χιλιάδες προσπάθειες σύνδεσης, κατανεμημένες σε δεκάδες χιλιάδες διευθύνσεις, μία προσπάθεια η καθεμία. Τι κάνει το fail2ban για αυτό;



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



Άσκηση

Άσκηση Z5.3: Ανάγνωση αρχείου καταγραφής εισβολής. Στο αρχείο παραδείγματος ssh-journal-1.txt υπάρχει ένα απόσπασμα από το journal ενός SSH server με fail2ban, μαζί με την έξοδο του fail2ban-client status sshd. Απαντήστε: ποια διεύθυνση δοκίμασε τα περισσότερα ονόματα χρήστη, ποια διεύθυνση κατάφερε να συνδεθεί με κλειδί και ως ποιος χρήστης, ποια διεύθυνση αποκλείστηκε και τι ώρα, και θα είχε αποκλειστεί αυτή η διεύθυνση και με τις προεπιλεγμένες ρυθμίσεις (maxretry = 5, findtime = 10m); Το πρόγραμμα συγκρίνει με το σταθερό κλειδί απαντήσεων. Αν έχετε δικό σας server με fail2ban, δείτε εκεί επίσης το fail2ban-client status sshd.

Άσκηση Z5.3: Ανάγνωση αρχείου καταγραφής εισβολής

Αρχείο για αυτή την άσκηση: ssh-journal-1.txt








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

Για περαιτέρω μελέτη

Μια στιγμή…

Ρυθμίστε τα domains σας

Ρυθμίστε για κάθε domain τους nameservers, τη σύνδεση με το hosting σας και ποιος θα είναι ο κάτοχος.

Φόρτωση των domains σας…