Τρέχουσα κατάσταση: PHP2Shell. Δύο κρίσιμες ευπάθειες της PHP (CVSS 9.2) επιτρέπουν κακόβουλο κώδικα χωρίς σύνδεση. Patches από τις 21/10/2026.Τι πρέπει να γίνει τώρα →

Ρύθμιση του Fail2ban για διακομιστές ιστού

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

Ημερομηνία 6 λεπτά ανάγνωσηςΣκλήρυνση και διαμόρφωση

Εν ολίγοις: Το Fail2ban διαβάζει αρχεία καταγραφής και αποκλείει στο firewall διευθύνσεις που εμφανίζονται υπερβολικά συχνά μέσα σε ένα χρονικό παράθυρο. Για το Nginx και τον Apache διαθέτει έτοιμα jails όπως nginx-botsearch ή apache-noscript· δικά σας φίλτρα τα δοκιμάζετε με fail2ban-regex. Οι ρυθμίσεις ανήκουν στο jail.local, οι δικές σας διευθύνσεις στο ignoreip, τους επαναλαμβανόμενους δράστες τους πιάνει το jail recidive. Κατά μεμονωμένων στοχευμένων επιθέσεων το Fail2ban δεν βοηθά, κατά μαζικών σαρώσεων ναι.

Όταν τα logs είναι γεμάτα σαρωτές

Όποιος κοιτάζει αυτές τις ημέρες τα πρωτόκολλα πρόσβασης των διακομιστών ιστού του, τα βρίσκει συχνά γεμάτα αιτήματα σε διαδρομές που δεν υπάρχουν καθόλου: παλιά περιβάλλοντα διαχείρισης, δοκιμαστικά αρχεία, γνωστές αδυναμίες άλλων προϊόντων. Σε μια κατάσταση όπως το PHP2Shell προστίθεται η στοχευμένη αναζήτηση ευάλωτων διακομιστών: η Cloudflare και η Patchstack ανέφεραν απόπειρες επίθεσης, η Unit 42 μέτρησε περισσότερες από 22,6 εκατομμύρια εκτεθειμένες, δυνητικά ευάλωτες εγκαταστάσεις.

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

Τι δεν μπορεί να κάνει το Fail2ban είναι εξίσου σημαντικό: ένα μεμονωμένο αίτημα που εκμεταλλεύεται μια ευπάθεια δεν εμποδίζεται. Κατά του PHP2Shell βοηθά μόνο η ενημέρωση της PHP. Πώς εξελίσσονται οι αυτοματοποιημένες επιθέσεις, περιγράφει το Μαζικές σαρώσεις για PHP χωρίς patch.

Fail2ban για Nginx και Apache: τα jails που συνοδεύουν το πακέτο

Ένα jail συνδέει ένα φίλτρο με ένα αρχείο καταγραφής και μια ενέργεια αποκλεισμού. Το jail.conf που συνοδεύει το πακέτο περιέχει ήδη jails για διακομιστές ιστού. Είναι από προεπιλογή απενεργοποιημένα και ενεργοποιούνται ένα προς ένα.

Jail Διακομιστής ιστού Εντοπίζει
nginx-http-auth Nginx αποτυχημένες συνδέσεις HTTP Basic
nginx-limit-req Nginx αιτήματα που υπερβαίνουν το rate limit του Nginx
nginx-botsearch Nginx αναζήτηση τυπικών, ανύπαρκτων διαδρομών
nginx-bad-request Nginx ελαττωματικά αιτήματα
apache-auth Apache αποτυχημένες συνδέσεις
apache-badbots Apache γνωστά αναγνωριστικά κακόβουλων bots
apache-noscript Apache κλήσεις ανύπαρκτων σεναρίων
apache-overflows Apache υπερβολικά μακριά αιτήματα
apache-botsearch Apache αναζήτηση τυπικών, ανύπαρκτων διαδρομών
php-url-fopen και οι δύο ορισμένα μοτίβα απόπειρας ενσωμάτωσης URL
recidive και οι δύο διευθύνσεις που έχει αποκλείσει επανειλημμένα το Fail2ban

Οι προεπιλεγμένες τιμές της προεγκατεστημένης διαμόρφωσης είναι μάλλον ήπιες: αποκλεισμός για 10 λεπτά μετά από 5 εμφανίσεις σε 10 λεπτά. Για διακομιστές ιστού με πολλή κίνηση σάρωσης αξίζει ένας μεγαλύτερος αποκλεισμός και ένας αυξανόμενος συντελεστής για επαναλήψεις.

Η βασική διαμόρφωση στο jail.local

Το jail.conf δηλώνει το ίδιο ότι δεν πρέπει να αλλάζεται, επειδή οι ενημερώσεις το αντικαθιστούν. Οι δικές σας τιμές ανήκουν στο /etc/fail2ban/jail.local. Το παρακάτω παράδειγμα για το Nginx ορίζει λογικές προεπιλογές και ενεργοποιεί κατάλληλα jails:

# /etc/fail2ban/jail.local
[DEFAULT]
# Καταχωρίστε δικές σας σταθερές διευθύνσεις (αντικαταστήστε τη διεύθυνση του παραδείγματος)
ignoreip = 127.0.0.1/8 ::1 203.0.113.10
bantime  = 1h
findtime = 10m
maxretry = 5
bantime.increment = true

[nginx-http-auth]
enabled = true

[nginx-botsearch]
enabled = true

[recidive]
enabled  = true
bantime  = 1w
findtime = 1d

Για τον Apache ενεργοποιείτε αντί γι' αυτό π.χ. τα apache-auth, apache-noscript και apache-botsearch. Τις διαδρομές των logs τις φέρνει το Fail2ban ανάλογα με τη διανομή· αν οι δικές σας διαδρομές διαφέρουν, ορίστε το logpath στο εκάστοτε jail. Αν το σύστημά σας διαβάζει logs μόνο μέσω journal, βοηθά το backend = systemd.

Ένα δικό σας φίλτρο για μαζικά αιτήματα σε αρχεία PHP

Ένα τυπικό μοτίβο στην τρέχουσα κατάσταση είναι πολλά αιτήματα σε σύντομο χρόνο σε αρχεία PHP που δεν υπάρχουν. Ένα δικό σας φίλτρο το αναγνωρίζει από τον κωδικό κατάστασης 404. Περιγράφει μόνο ό,τι βρίσκεται στο δικό σας log:

# /etc/fail2ban/filter.d/nginx-php-404.conf
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD) [^"]*\.php[^"]*" 404
ignoreregex =
# Προσθήκη στο /etc/fail2ban/jail.local
[nginx-php-404]
enabled  = true
port     = http,https
filter   = nginx-php-404
logpath  = /var/log/nginx/access.log
maxretry = 20
findtime = 1m
bantime  = 1h

Προτού ενεργοποιήσετε το φίλτρο, το ελέγχετε έναντι του πραγματικού log. Έτσι βλέπετε πόσες γραμμές πιάνει και αν περιλαμβάνει θεμιτές προσβάσεις:

fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-php-404.conf
sudo systemctl restart fail2ban
sudo fail2ban-client status
sudo fail2ban-client status nginx-php-404
# Άρση αποκλεισμού μιας διεύθυνσης που αποκλείστηκε κατά λάθος
sudo fail2ban-client set nginx-php-404 unbanip 203.0.113.25

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

Οι συχνότερες παγίδες

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

  1. Αυτοαποκλεισμός: Οι διευθύνσεις γραφείου, VPN και παρακολούθησης ανήκουν στο ignoreip προτού ενεργοποιηθούν τα jails.
  2. Υπηρεσίες που προηγούνται: Πίσω από CDN ή load balancer το Fail2ban, χωρίς προσαρμογή, βλέπει μόνο τις διευθύνσεις τους. Περισσότερα στον οδηγό Προστασία συνδέσεων διαχειριστή από brute force.
  3. Περιστροφή logs: Μετά την αλλαγή του αρχείου καταγραφής, το Fail2ban πρέπει να διαβάζει το νέο αρχείο. Ελέγξτε μετά την πρώτη περιστροφή αν τα jails συνεχίζουν να μετρούν εμφανίσεις.
  4. Συνεργασία με το firewall: Το Fail2ban καταχωρίζει αποκλεισμούς στο firewall. Όποιος διαχειρίζεται το firewall του με πλήρη επαναφόρτωση του συνόλου κανόνων, μπορεί να διαγράψει αυτές τις εγγραφές. Πώς δομείτε το ίδιο το firewall, αναφέρεται στο Firewall για διακομιστές ιστού: άνοιγμα μόνο των απαραίτητων θυρών.
  5. IPv6: Οι επιθέσεις έρχονται και μέσω IPv6. Ελέγξτε αν η ενέργεια αποκλεισμού καλύπτει και τα δύο πρωτόκολλα.
Συμβουλή

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

Συμπέρασμα: ένα εργαλείο κατά του όγκου, όχι κατά των πάντων

Το Fail2ban ρυθμίζεται γρήγορα και απαλλάσσει τους διακομιστές ιστού από ένα μέρος του διαρκούς βομβαρδισμού. Τα jails που συνοδεύουν το πακέτο καλύπτουν τυπικά μοτίβα, τα δικά σας φίλτρα μπορούν να δοκιμαστούν χωρίς κίνδυνο έναντι πραγματικών logs με fail2ban-regex και το jail recidive φροντίζει ώστε οι επίμονες πηγές να μένουν περισσότερο έξω.

Δεν πρέπει να το υπερεκτιμάτε. Το Fail2ban αντιδρά στην επανάληψη, όχι στην πρώτη εμφάνιση, και βλέπει μόνο ό,τι υπάρχει στα logs. Κατά μιας ευπάθειας όπως το PHP2Shell βοηθά μόνο η ενημέρωση, κατά κατανεμημένων επιθέσεων από πολλές διευθύνσεις το Fail2ban βοηθά ελάχιστα. Αναπτύσσει την αξία του ως ένα στρώμα ανάμεσα σε πολλά: δίπλα σε ένα λιτό firewall, μια σκληρυμένη διαμόρφωση διακομιστή ιστού, σύνδεση δύο παραγόντων και μια παρακολούθηση που δεν αποκλείει μόνο τις ανωμαλίες αλλά και τις αναφέρει.

Πώς βοηθά συγκεκριμένα η PHP SOS;

  • Αξιολόγηση logs: Εξετάζουμε ποια μοτίβα εμφανίζονται στα πρωτόκολλα πρόσβασής σας και επιλέγουμε κατάλληλα jails.
  • Ρύθμιση και δοκιμή: Ρυθμίζουμε το Fail2ban με δικά του φίλτρα, δοκιμάζουμε κάθε φίλτρο έναντι πραγματικών logs και καταχωρίζουμε τις σταθερές διευθύνσεις σας ως εξαίρεση.
  • Διευκρίνιση της συνεργασίας: CDN, load balancer, firewall και περιστροφή logs τα συντονίζουμε ώστε οι αποκλεισμοί να πλήττουν τις σωστές διευθύνσεις.
  • Παρακολούθηση: Στο πλαίσιο της παρακολούθησης ασφαλείας αξιολογούμε διαρκώς αποκλεισμούς και ανωμαλίες.

Συχνές ερωτήσεις

Προστατεύει το Fail2ban από το PHP2Shell;

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

Γιατί να μην αλλάξω απευθείας το jail.conf;

Το αρχείο αντικαθίσταται σε ενημερώσεις πακέτων και το δηλώνει το ίδιο. Οι δικές σας ρυθμίσεις ανήκουν σε ένα jail.local ή σε αρχεία κάτω από το jail.d. Εκεί αντικαθιστούν στοχευμένα τις προεπιλεγμένες τιμές.

Τι είναι το jail recidive;

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

Λειτουργεί το Fail2ban πίσω από Cloudflare ή load balancer;

Μόνο με πρόσθετη διαμόρφωση. Χωρίς αυτήν στα logs εμφανίζεται η διεύθυνση της υπηρεσίας που προηγείται και ένας αποκλεισμός θα έπληττε όλους τους επισκέπτες. Ο διακομιστής ιστού πρέπει τότε να αναγνωρίζει την πραγματική διεύθυνση του επισκέπτη και οι αποκλεισμοί τοποθετούνται καλύτερα στην υπηρεσία που προηγείται.

Πηγές

Συνέχεια

Προστασία των logins διαχειριστή από brute force: προστασία για κάθε login

Οι αυτοματοποιημένες δοκιμές κωδικών χτυπούν κάθε προσβάσιμη σελίδα σύνδεσης. Πώς τις φρενάρετε με rate limiting και Fail2ban, προστατεύετε τους λογαριασμούς με δεύτερο παράγοντα και αποθηκεύετε σωστά τους κωδικούς.

Συνέχεια →

Firewall για διακομιστές ιστού: άνοιγμα μόνο των απαραίτητων θυρών

Ένας διακομιστής ιστού χρειάζεται προς τα έξω συνήθως μόνο δύο θύρες. Παρ' όλα αυτά σε πολλούς διακομιστές ακούν στο διαδίκτυο βάσεις δεδομένων, PHP-FPM ή περιβάλλοντα διαχείρισης. Δείτε πώς εντοπίζετε ανοιχτές υπηρεσίες και κλείνετε ό,τι δεν χρειάζεται.

Συνέχεια →

Μαζικές σαρώσεις για PHP χωρίς patch: πώς εξελίσσονται οι αυτοματοποιημένες επιθέσεις

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

Συνέχεια →
Άμεση επικοινωνία

Κάθε ώρα μετράει. Γράψτε μας τώρα.

Περιγράψτε σύντομα το σύστημα, την έκδοση PHP και ό,τι παρατηρείτε. Θα επικοινωνήσουμε μαζί σας, θα διευκρινίσουμε την κατάσταση και θα εργαστούμε εξ αποστάσεως μέχρι το περιστατικό να κλείσει και να τεκμηριωθεί.

Άμεση βοήθεια