Εν ολίγοις: Όταν ο διακομιστής στέλνει spam, υπάρχει συνήθως μία από τρεις αιτίες: ένα script PHP που παρεισέφρησε ή καταχρήστηκε, ένα γραμματοκιβώτιο με κλεμμένο κωδικό ή ένας λανθασμένα ρυθμισμένος διακομιστής αλληλογραφίας. Διασφαλίστε μερικά από τα μηνύματα που περιμένουν, διαβάστε τις κεφαλίδες τους και το log αλληλογραφίας και στις περισσότερες περιπτώσεις θα βρείτε την πηγή. Μετά σταματήστε την αποστολή, κλείστε την αιτία και μόνο τότε ζητήστε την αφαίρεση από μαύρες λίστες.
Όταν οι πελάτες βρίσκουν τα τιμολόγιά σας στον φάκελο spam
Σπάνια ξεκινά με μήνυμα ασφαλείας. Συνήθως επικοινωνούν πελάτες που δεν λαμβάνουν πια τις προσφορές σας ή το γραμματοκιβώτιο γεμίζει με μηνύματα επιστροφής για email που δεν έγραψε ποτέ κανείς. Μερικές φορές ο πάροχος φιλοξενίας αποκλείει την αποστολή και αναφέρει ως λόγο ασυνήθιστη κίνηση αλληλογραφίας.
Για την επιχείρηση αυτό έχει γρήγορα αισθητές συνέπειες. Αν η διεύθυνση του διακομιστή βρίσκεται σε μαύρη λίστα, και άλλοι διακομιστές αλληλογραφίας απορρίπτουν τα πραγματικά σας email: τιμολόγια, επιβεβαιώσεις παραγγελιών, συνδέσμους κωδικών από το κατάστημα. Η φήμη του domain υποφέρει και η ζημιά μεγαλώνει με κάθε ώρα που συνεχίζεται η αποστολή.
Η αποστολή spam συγκαταλέγεται στις γνωστές συνέπειες μιας παραβίασης. Μετά το PHP2Shell, τις ευπάθειες CVE-2026-109618 και CVE-2026-109619 με εκτέλεση κώδικα χωρίς σύνδεση, αυτό είναι ένας λόγος ακόμη να κοιτάξετε προσεκτικότερα. Το spam όμως δεν είναι ειδική ένδειξη PHP2Shell· επιβεβαιωμένοι Indicators of Compromise δεν υπάρχουν. Περαιτέρω γενικές ενδείξεις περιγράφει το Έχω ήδη παραβιαστεί;.
Τρεις τυπικές αιτίες όταν ο διακομιστής στέλνει spam
| Αιτία | Τυπική εικόνα | Πού να κοιτάξετε |
|---|---|---|
| Script PHP που παρεισέφρησε | Μηνύματα χωρίς σύνδεση, που παραδίδονται τοπικά μέσω sendmail |
Κεφαλίδες, log αλληλογραφίας PHP, νέα αρχεία PHP |
| Φόρμα που καταχρήστηκε | Μηνύματα μέσω φόρμας επικοινωνίας ή σύστασης προς ξένους παραλήπτες | Log πρόσβασης της φόρμας, κεφαλίδες |
| Παραβιασμένο γραμματοκιβώτιο | Αποστολή με έγκυρη σύνδεση στον διακομιστή αλληλογραφίας | Log αλληλογραφίας με όνομα σύνδεσης, τόποι σύνδεσης |
| Ανοιχτός διακομιστής αλληλογραφίας | Ξένοι αποστολείς χρησιμοποιούν τον διακομιστή σας ως προώθηση | Διαμόρφωση διακομιστή αλληλογραφίας, εξωτερικός έλεγχος |
Οι δύο πρώτες αιτίες αφορούν τον ιστότοπο, η τρίτη τα γραμματοκιβώτια, η τέταρτη τη διαμόρφωση του διακομιστή. Η διάκριση είναι σημαντική, επειδή τα αντίμετρα είναι εντελώς διαφορετικά.
Ανάγνωση της ουράς αλληλογραφίας
Σε διακομιστές με Postfix η ουρά δείχνει τι πρόκειται να σταλεί αυτή τη στιγμή. Οι παρακάτω εντολές απλώς διαβάζουν:
# Εμφάνιση του περιεχομένου της ουράς (αντιστοιχεί στο mailq)
postqueue -p | tail -30
# Εμφάνιση των κεφαλίδων ενός μεμονωμένου μηνύματος (εισαγάγετε το Queue-ID από τη λίστα)
sudo postcat -q -h QUEUE-ID
# Επιτυχημένες συνδέσεις στον διακομιστή αλληλογραφίας με όνομα χρήστη
sudo grep 'sasl_username=' /var/log/mail.log | awk -F'sasl_username=' '{print $2}' | sort | uniq -c | sort -rn | head
Οι κεφαλίδες αποκαλύπτουν συχνά ήδη την πηγή. Αν το μήνυμα προέρχεται από συνδεδεμένο γραμματοκιβώτιο, το όνομα σύνδεσης εμφανίζεται στο log αλληλογραφίας. Αν συσσωρεύεται εκεί ένας μεμονωμένος λογαριασμός με συνδέσεις από ξένες χώρες, ο κωδικός αυτού του γραμματοκιβωτίου έχει πολύ πιθανώς γίνει γνωστός. Αν το μήνυμα παραδόθηκε αντίθετα τοπικά, προέρχεται συνήθως από ένα script στον διακομιστή.
Αν στον διακομιστή σας τρέχει άλλος διακομιστής αλληλογραφίας, για παράδειγμα Exim, οι εντολές ονομάζονται διαφορετικά, η αρχή όμως μένει ίδια: εξέταση της ουράς, ανάγνωση κεφαλίδων, καταμέτρηση συνδέσεων στο log. Στο shared hosting χωρίς πρόσβαση shell ζητήστε γραπτώς από τον πάροχο ένα απόσπασμα του log αλληλογραφίας και μερικά παραδείγματα μηνυμάτων με πλήρεις κεφαλίδες. Πολλοί πάροχοι τα παρέχουν κατόπιν αιτήματος, επειδή έχουν οι ίδιοι συμφέρον να σταματήσει η αποστολή.
Διασφαλίστε μερικά πλήρη μηνύματα πριν παγώσετε ή αδειάσετε την ουρά. Αποτελούν τεκμήρια για τη μεταγενέστερη ανάλυση και για συζητήσεις με τον πάροχο ή τους διαχειριστές μαύρων λιστών.
Εύρεση του υπεύθυνου scripts PHP
Αν η αποστολή γίνεται μέσω PHP, βοηθά η διαμόρφωση αλληλογραφίας της PHP. Σύμφωνα με το εγχειρίδιο PHP, το mail.log καταγράφει κάθε κλήση της συνάρτησης mail() με πλήρη διαδρομή του script, αριθμό γραμμής, παραλήπτη και κεφαλίδες. Το mail.add_x_header γράφει επιπλέον σε κάθε μήνυμα μια κεφαλίδα X-PHP-Originating-Script με το αναγνωριστικό χρήστη και το όνομα αρχείου.
; Στο php.ini ή στο pool FPM, μετά επανεκκινήστε όλους τους workers
mail.add_x_header = On
mail.log = /var/log/php/mail.log
Το αρχείο log πρέπει να είναι εγγράψιμο για τη διεργασία PHP. Η κεφαλίδα αποκαλύπτει σε παραλήπτες ένα όνομα αρχείου· απενεργοποιήστε την μετά την ανάλυση, αν δεν τη θέλετε μόνιμα.
Αν ως αποστολέας βρεθεί ένα άγνωστο αρχείο, για παράδειγμα στον φάκελο upload ή cache, αυτό είναι ένδειξη webshell. Πώς κατατάσσετε τέτοια αρχεία, περιγράφει το Αναγνώριση και αφαίρεση webshells. Αν πρόκειται αντίθετα για γνωστή φόρμα επικοινωνίας, πιθανώς καταχρήστηκε, για παράδειγμα επειδή παραλήπτες ή κεφαλίδες λαμβάνονται από εισαγωγές της φόρμας. Αυτό είναι σφάλμα στον κώδικα, όχι εισβολή, πρέπει όμως να διορθωθεί εξίσου γρήγορα.
Δεν χρησιμοποιεί κάθε spam τη συνάρτηση mail(). Ο κακόβουλος κώδικας μπορεί να ανοίξει και απευθείας σύνδεση προς ξένους διακομιστές αλληλογραφίας. Τότε η αποστολή δεν εμφανίζεται ούτε στην ουρά ούτε στο log αλληλογραφίας PHP, αλλά ως εξερχόμενες συνδέσεις στη θύρα 25. Πώς τις ελέγχετε, αναγράφεται στο Έλεγχος των εξερχόμενων συνδέσεων ενός διακομιστή.
Σταμάτημα της αποστολής και καθαρή επανεκκίνηση
Αφού βρεθεί η πηγή, ο καθαρισμός ακολουθεί με αυτή τη σειρά:
- Πάγωμα της αποστολής: Αποκλείστε τον επηρεαζόμενο δρόμο, δηλαδή απενεργοποιήστε το script, κλειδώστε το γραμματοκιβώτιο ή παγώστε την ουρά. Διασφαλίστε τα μηνύματα που περιμένουν ως τεκμήριο.
- Κλείσιμο της αιτίας: Σε webshell φέρτε την PHP σε διορθωμένο επίπεδο (8.5.12, 8.4.27, 8.3.36, 8.2.35 ή επιβεβαιωμένο backport), επανεκκινήστε όλους τους workers και καθαρίστε τον ιστότοπο. Σε φόρμα διορθώστε τον κώδικα. Σε γραμματοκιβώτιο αλλάξτε τον κωδικό και ελέγξτε τη συσκευή του χρήστη.
- Αναζήτηση περαιτέρω ιχνών: Όποιος στέλνει spam μέσω webshell, έχει συχνά δημιουργήσει περαιτέρω κερκόπορτες.
- Περιορισμός της εξόδου: Επιτρέψτε εξερχόμενες συνδέσεις στη θύρα 25 μόνο για τον διακομιστή αλληλογραφίας, όχι για τον χρήστη του διακομιστή ιστού.
- Καθαρισμός μαύρων λιστών: Μόνο τώρα ζητήστε από τους διαχειριστές των μαύρων λιστών την αφαίρεση και περιγράψτε σύντομα τι διορθώθηκε.
Ελέγξτε με την ευκαιρία αυτή τα SPF, DKIM και DMARC του domain σας. Αυτές οι εγγραφές DNS ορίζουν ποιοι διακομιστές επιτρέπεται να στέλνουν εξ ονόματος του domain σας και δυσκολεύουν τους ξένους να καταχραστούν τη διεύθυνση αποστολέα σας.
Πώς βοηθά συγκεκριμένα η PHP SOS;
- Αξιολογούμε ουρά, κεφαλίδες και logs αλληλογραφίας και εντοπίζουμε αν αιτία είναι script, φόρμα, γραμματοκιβώτιο ή διαμόρφωση.
- Σταματούμε την αποστολή ελεγχόμενα και διασφαλίζουμε τεκμήρια για τον πάροχο και τις μαύρες λίστες.
- Καθαρίζουμε τον ιστότοπο στο πλαίσιο της αφαίρεσης κακόβουλου λογισμικού και κλείνουμε την πύλη εισόδου.
- Περιορίζουμε την εξερχόμενη κίνηση αλληλογραφίας σε επίπεδο διακομιστή και συνοδεύουμε την αφαίρεση από μαύρες λίστες.
Συχνές ερωτήσεις
Πώς καταλαβαίνω ότι ο διακομιστής μου στέλνει spam;
Τυπικά είναι μηνύματα επιστροφής για email που δεν έγραψε κανείς, υποδείξεις του παρόχου φιλοξενίας, γεμάτη ουρά αλληλογραφίας και πελάτες που βρίσκουν ξαφνικά τα email σας στον φάκελο spam. Και οι καταχωρίσεις της διεύθυνσης του διακομιστή σας σε δημόσιες μαύρες λίστες είναι σαφές σημάδι.
Πώς βρίσκω το script PHP που στέλνει spam;
Η PHP μπορεί να καταγράφει κάθε κλήση της συνάρτησης mail() με τη διαδρομή του script, αν έχει οριστεί το mail.log. Με το mail.add_x_header η PHP γράφει το όνομα του script επιπλέον στην κεφαλίδα κάθε email. Στα μηνύματα που έχουν ήδη σταλεί ή περιμένουν βοηθά μια ματιά στις κεφαλίδες.
Πρέπει να αδειάσω αμέσως την ουρά αλληλογραφίας;
Όχι πριν διασφαλίσετε μερικά μηνύματα ως τεκμήριο. Οι κεφαλίδες δείχνουν συχνά ποιο script ή ποιο γραμματοκιβώτιο προκάλεσε την αποστολή. Το πάγωμα είναι συνήθως καλύτερο από τη διαγραφή, μέχρι να γίνει γνωστή η πηγή.
Πώς βγαίνω ξανά από μαύρες λίστες;
Πρώτα αρθεί η αιτία, μετά ζητάτε από τους εκάστοτε διαχειριστές των μαύρων λιστών την αφαίρεση. Οι περισσότεροι απαιτούν εξήγηση για το τι διορθώθηκε. Όποιος ζητά πολύ νωρίς και συνεχίζει να στέλνει spam, καταχωρίζεται ξανά.