# Προστασία των logins διαχειριστή από brute force: προστασία για κάθε login

> Προστασία brute force για login και περιοχή διαχείρισης: rate limiting, Fail2ban, σύνδεση δύο παραγόντων και ασφαλής αποθήκευση κωδικών με password_hash.

Πηγή: https://phpsos.de/el/ratgeber/brute-force-login-schutz/  
Ημερομηνία: 25/10/2026  
Πάροχος: PHP SOS, Επείγουσα βοήθεια PHP και ασφάλεια διακομιστών. Άμεση βοήθεια μέσω WhatsApp: https://wa.me/491736494914?text=%CE%93%CE%B5%CE%B9%CE%B1%20%CF%83%CE%B1%CF%82%2C%20PHP%20SOS%2C%20%CF%87%CF%81%CE%B5%CE%B9%CE%B1%CE%B6%CF%8C%CE%BC%CE%B1%CF%83%CF%84%CE%B5%20%CE%B2%CE%BF%CE%AE%CE%B8%CE%B5%CE%B9%CE%B1%20%CE%BC%CE%B5%20%CF%84%CE%BF%CE%BD%20%CE%B4%CE%B9%CE%B1%CE%BA%CE%BF%CE%BC%CE%B9%CF%83%CF%84%CE%AE%20PHP%20%CE%BC%CE%B1%CF%82.%20%CE%95%CF%84%CE%B1%CE%B9%CF%81%CE%B5%CE%AF%CE%B1%3A%20%E2%80%A6%20%CE%99%CF%83%CF%84%CF%8C%CF%84%CE%BF%CF%80%CE%BF%CF%82%3A%20%E2%80%A6

**Εν συντομία:** Η αποτελεσματική προστασία brute force για ένα login αποτελείται από πολλά επίπεδα: σύνδεση δύο παραγόντων για όλους τους διαχειριστές, ένα φρένο για τις προσπάθειες σύνδεσης στον διακομιστή ιστού, αυτόματα κλειδώματα σε επίπεδο δικτύου και ασφαλής αποθήκευση κωδικών στον κώδικα. Όπου είναι δυνατό, η περιοχή διαχείρισης είναι επιπλέον προσβάσιμη μόνο από γνωστά δίκτυα.

## Πώς εξελίσσονται οι επιθέσεις brute force στα logins

Κάθε δημόσια προσβάσιμη σελίδα σύνδεσης δέχεται αργά ή γρήγορα αυτοματοποιημένες επιθέσεις. Αυτό αφορά logins CMS, backends καταστημάτων, πάνελ φιλοξενίας, webmail και SSH. Οι επιτιθέμενοι δεν χρειάζεται γι' αυτό να γνωρίζουν σε ποιον ανήκει ο ιστότοπος· τα εργαλεία τους σαρώνουν το διαδίκτυο για γνωστές διευθύνσεις login.

Τρεις παραλλαγές είναι διαδεδομένες. Στο κλασικό **brute force** δοκιμάζονται πολλοί κωδικοί κατά ενός λογαριασμού. Στο **password spraying** δοκιμάζεται ένας συνηθισμένος κωδικός κατά πολλών λογαριασμών, ώστε να παρακαμφθούν τα κλειδώματα. Στο **credential stuffing** χρησιμοποιούνται διαπιστευτήρια που κλάπηκαν από άλλες υπηρεσίες.

Για τη διοίκηση και τους ιδιοκτήτες η κατάσταση συνοψίζεται απλά: ένας λογαριασμός διαχειριστή που έχει καταληφθεί είναι εξίσου επικίνδυνος με μια ευπάθεια ασφαλείας στον διακομιστή. Όποιος είναι διαχειριστής, μπορεί να εγκαθιστά επεκτάσεις, να αλλάζει κώδικα και να εξάγει δεδομένα.

Τέτοιες επιθέσεις αναγνωρίζονται από τη συσσώρευση αποτυχημένων συνδέσεων, από αιτήματα POST προς τη διεύθυνση του login από πολλές διαφορετικές διευθύνσεις IP και από προσπάθειες σύνδεσης με ονόματα χρηστών όπως «admin» ή ονόματα από το impressum. Και ένα αισθητά υψηλότερο φορτίο του διακομιστή σε ασυνήθιστες ώρες μπορεί να το υποδεικνύει, επειδή κάθε σύνδεση κοστίζει υπολογιστικό χρόνο για τον έλεγχο του κωδικού.

## Προστασία brute force στο login: τα πιο αποτελεσματικά μέτρα

Δεν ταιριάζει κάθε μέτρο σε κάθε σύστημα. Η παρακάτω σειρά έχει αποδειχθεί αποτελεσματική, επειδή τα πρώτα σημεία συνδυάζουν το μεγαλύτερο αποτέλεσμα με μικρό κόπο:

- **Σύνδεση δύο παραγόντων** για όλους τους λογαριασμούς με δικαιώματα διαχειριστή. Ακόμη και ένας κωδικός που μαντεύτηκε δεν αρκεί τότε. Λεπτομέρειες στον οδηγό [Σύνδεση δύο παραγόντων για προσβάσεις διαχειριστών](https://phpsos.de/el/ratgeber/zwei-faktor-admin/).
- **Μοναδικοί, μακροί κωδικοί** από διαχειριστή κωδικών, όχι κοινόχρηστοι λογαριασμοί.
- **Rate limiting** στον διακομιστή ιστού, ώστε ανά διεύθυνση να είναι δυνατές μόνο λίγες προσπάθειες ανά λεπτό.
- **Αυτόματα κλειδώματα** διευθύνσεων που εμφανίζουν επανειλημμένα ύποπτη συμπεριφορά, σε επίπεδο δικτύου, π.χ. με Fail2ban.
- **Μείωση της περιοχής διαχείρισης:** πρόσβαση μόνο από το δίκτυο της εταιρείας ή μέσω VPN, απενεργοποίηση διεπαφών που δεν χρειάζονται.
- **Ενιαία μηνύματα σφάλματος,** που δεν αποκαλύπτουν αν υπάρχει το όνομα χρήστη.
- **Παρακολούθηση** των αποτυχημένων συνδέσεων και ειδοποίηση σε ύποπτες περιπτώσεις.

## Rate limiting στον διακομιστή ιστού

Με το Nginx μπορεί να περιοριστεί ο αριθμός των αιτημάτων προς μια διεύθυνση login ανά διεύθυνση IP. Το παράδειγμα δείχνει μια σελίδα σύνδεσης WordPress· τη διαδρομή και τη μεταβίβαση PHP τις προσαρμόζετε στο σύστημά σας.

```nginx
# στο μπλοκ http
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

# στο μπλοκ server
location = /wp-login.php {
    limit_req zone=login burst=3 nodelay;
    limit_req_status 429;
    # εδώ ενσωματώστε τη συνηθισμένη μεταβίβαση PHP του διακομιστή σας
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}
```

Στον Apache ο περιορισμός της περιοχής διαχείρισης σε γνωστές διευθύνσεις προσφέρει μια απλή, αποτελεσματική προστασία:

```apache
<Location "/admin">
    Require ip 192.0.2.0/24
</Location>
```

Η διεύθυνση `192.0.2.0/24` είναι ένα placeholder από την περιοχή τεκμηρίωσης· εισαγάγετε το δίκτυο της εταιρείας σας ή τη διεύθυνση του VPN σας. Αν ο ιστότοπός σας βρίσκεται πίσω από proxy ή CDN, ο διακομιστής πρέπει να γνωρίζει την πραγματική διεύθυνση του επισκέπτη, διαφορετικά ο κανόνας δεν ισχύει όπως επιθυμείτε.

## Fail2ban και κλειδώματα σε επίπεδο δικτύου

Το Fail2ban διαβάζει αρχεία καταγραφής και κλειδώνει στο firewall, για καθορισμένο χρόνο, διευθύνσεις που εμφανίζουν επανειλημμένα ύποπτη συμπεριφορά. Για το rate limiting του Nginx το Fail2ban φέρνει ήδη ένα κατάλληλο φίλτρο:

```ini
# /etc/fail2ban/jail.local
[nginx-limit-req]
enabled  = true
port     = http,https
logpath  = /var/log/nginx/error.log
maxretry = 10
findtime = 10m
bantime  = 1h

[sshd]
enabled  = true
maxretry = 5
bantime  = 1h
```

Ελέγξτε μετά την επανεκκίνηση με `fail2ban-client status` αν τα jails είναι ενεργά. Φροντίστε να εξαιρέσετε τις δικές σας σταθερές διευθύνσεις μέσω `ignoreip`, ώστε να μην αποκλείσετε τον εαυτό σας. Για σελίδες σύνδεσης μεμονωμένων CMS είναι δυνατά δικά τους φίλτρα, πρέπει όμως να ταιριάζουν με την πραγματική μορφή του log και να δοκιμαστούν εκ των προτέρων.

Αν μπροστά από τον διακομιστή βρίσκεται CDN ή proxy, το Fail2ban βλέπει χωρίς περαιτέρω ρυθμίσεις μόνο τις διευθύνσεις του. Ένα κλείδωμα θα έπληττε τότε όλους τους επισκέπτες. Σε αυτή την περίπτωση ο διακομιστής ιστού πρέπει να παίρνει την πραγματική διεύθυνση του επισκέπτη από την κεφαλίδα της υπηρεσίας που βρίσκεται μπροστά, και τα κλειδώματα ορίζονται καλύτερα απευθείας στο CDN.

Τα κλειδώματα σε επίπεδο δικτύου είναι εργαλείο κατά του όγκου, όχι κατά στοχευμένων επιθέσεων. Κατανεμημένες επιθέσεις από πάρα πολλές διευθύνσεις με λίγες προσπάθειες ανά διεύθυνση υπονομεύουν κάθε κατώφλι. Γι' αυτό ο δεύτερος παράγοντας παραμένει το σημαντικότερο επίπεδο, και το Fail2ban μειώνει κυρίως το φορτίο και τον θόρυβο στα logs.

## Σωστή αποθήκευση κωδικών σε ιδιόκτητο λογισμικό

Όποιος προγραμματίζει δικές του συνδέσεις, δεν πρέπει να αποθηκεύει ποτέ κωδικούς σε απλό κείμενο ή με γρήγορες συναρτήσεις hash όπως MD5 ή SHA-1. Η PHP φέρνει με το `password_hash()` μια ασφαλή λύση, που διαχειρίζεται αυτόματα το salt και τη μέθοδο.

```php
<?php
declare(strict_types=1);

// Κατά την εγγραφή ή την αλλαγή κωδικού
$hash = password_hash($passwort, PASSWORD_DEFAULT);

// Κατά τη σύνδεση
if (password_verify($eingabe, $hashAusDatenbank)) {
    if (password_needs_rehash($hashAusDatenbank, PASSWORD_DEFAULT)) {
        $neu = password_hash($eingabe, PASSWORD_DEFAULT);
        // αποθήκευση του $neu στη βάση δεδομένων
    }
    // επιτυχής σύνδεση, ανανέωση του ID session
} else {
    usleep(random_int(200000, 400000)); // ομοιόμορφος χρόνος απόκρισης
    // εμφάνιση ενιαίου μηνύματος σφάλματος
}
```

Το `password_needs_rehash()` φροντίζει ώστε παλαιότερα hashes να μετατρέπονται αυτόματα στη σύνδεση στη τρέχουσα μέθοδο. Τις αποτυχημένες προσπάθειες τις καταγράφετε με ώρα, λογαριασμό και διεύθυνση, ώστε να γίνονται αντιληπτά τα μοτίβα. Υποδείξεις για την ανάλυση υπάρχουν στον οδηγό [Ανάλυση των logs του διακομιστή ιστού μετά από επίθεση](https://phpsos.de/el/ratgeber/logfiles-auswerten/).

## Ιδιαιτερότητες σε CMS, καταστήματα και πάνελ

Πολλά συστήματα έχουν, εκτός από την ορατή σελίδα σύνδεσης, και άλλους δρόμους μέσω των οποίων ελέγχονται διαπιστευτήρια. Αυτές οι πλευρικές είσοδοι ξεχνιούνται συχνά στην προστασία.

- **WordPress:** Η διεπαφή `xmlrpc.php` δέχεται επίσης συνδέσεις. Αν δεν χρειάζεται, π.χ. για παλαιότερες εφαρμογές, αποκλείστε την στον διακομιστή ιστού. Ελέγξτε επιπλέον αν τα ονόματα χρηστών είναι ορατά μέσω σελίδων συγγραφέων ή της διεπαφής REST και χρησιμοποιήστε για διαχειριστές ονόματα που δεν εμφανίζονται δημόσια.
- **Καταστήματα:** Εκτός από την περιοχή διαχείρισης, στόχος είναι οι λογαριασμοί πελατών, ιδίως για credential stuffing. Εδώ βοηθούν το rate limiting, οι ειδοποιήσεις για νέες συνδέσεις και ένας προαιρετικός δεύτερος παράγοντας για πελάτες.
- **Πάνελ φιλοξενίας και webmail:** Αυτές οι διεπαφές είναι συχνά προσβάσιμες παγκοσμίως και προστατεύουν ολόκληρο τον διακομιστή. Πρέπει να είναι προσβάσιμες μόνο από γνωστά δίκτυα ή μέσω VPN.
- **SSH:** Η σύνδεση με κλειδί αντί για κωδικό κάνει την κλασική μαντεψιά αναποτελεσματική.

Ποιες λειτουργίες προστασίας φέρνει το ίδιο το σύστημά σας, αναφέρεται στην τεκμηρίωση του κατασκευαστή. Οι επεκτάσεις τρίτων πρέπει να συντηρούνται ενεργά, διαφορετικά γίνονται οι ίδιες κίνδυνος. Για διαχειριστές WordPress η σελίδα [WordPress και PHP2Shell](https://phpsos.de/el/plattformen/wordpress/) συνοψίζει τις τρέχουσες προτεραιότητες.

## Πώς βοηθά συγκεκριμένα η PHP SOS;

- Καταγράφουμε όλες τις προσβάσιμες σελίδες σύνδεσης των διακομιστών σας, από το CMS έως το πάνελ φιλοξενίας, και αξιολογούμε την προστασία τους.
- Στήνουμε rate limiting, Fail2ban και περιορισμούς πρόσβασης στο πλαίσιο της [θωράκισης διακομιστή](https://phpsos.de/el/leistungen/server-haertung/) και τα δοκιμάζουμε.
- Υποστηρίζουμε την εισαγωγή της σύνδεσης δύο παραγόντων για διαχειριστές και τεκμηριώνουμε προσβάσεις έκτακτης ανάγκης.
- Με το [security monitoring](https://phpsos.de/el/leistungen/security-monitoring/) παρακολουθούμε διαρκώς αποτυχημένες συνδέσεις και νέους λογαριασμούς διαχειριστή.


## Συχνές ερωτήσεις

**Πώς αναγνωρίζω μια επίθεση brute force;**  
Τυπικές είναι οι πολλές αποτυχημένες συνδέσεις σε σύντομο χρόνο, συχνά κατά της ίδιας σελίδας σύνδεσης και με εναλλασσόμενα ονόματα χρηστών. Στο access log φαίνεται ως συσσώρευση αιτημάτων POST προς τη διεύθυνση του login, συχνά από πολλές διαφορετικές διευθύνσεις IP.

**Πρέπει ένας λογαριασμός να κλειδώνει μετά από πολλές αποτυχημένες προσπάθειες;**  
Προσοχή: Τα σκληρά κλειδώματα μπορούν να τα χρησιμοποιήσουν οι επιτιθέμενοι για να αποκλείσουν νόμιμους χρήστες. Καλύτερες είναι οι αυξανόμενες καθυστερήσεις, τα χρονικά περιορισμένα κλειδώματα ανά διεύθυνση IP και μια ειδοποίηση του κατόχου του λογαριασμού.

**Βοηθά η μετονομασία της διεύθυνσης του login;**  
Μειώνει τον αυτοματοποιημένο θόρυβο στα logs, δεν αποτελεί όμως πραγματική προστασία. Όποιος γνωρίζει ή βρίσκει τη διεύθυνση μπορεί να συνεχίσει την επίθεση. Αποτελεσματικά είναι η σύνδεση δύο παραγόντων, το rate limiting και ο περιορισμός της περιοχής διαχείρισης.

**Τι είναι το credential stuffing;**  
Εδώ οι επιτιθέμενοι δοκιμάζουν συνδυασμούς email και κωδικού που κλάπηκαν από άλλες υπηρεσίες. Λειτουργεί όταν οι χρήστες χρησιμοποιούν τον ίδιο κωδικό πολλές φορές. Μοναδικοί κωδικοί και ένας δεύτερος παράγοντας αφαιρούν τη βάση αυτής της μεθόδου.

## Πηγές

- [OWASP Cheat Sheet Series (Authentication)](https://cheatsheetseries.owasp.org/)
- [BSI: Συστάσεις για ασφαλείς κωδικούς και σύνδεση δύο παραγόντων](https://www.bsi.bund.de/)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
