Σε συνδυασμό με dovecot ή courier-pop courier-imap
Στήνουμε τον server κάνωντας τα διαδοχικά βήματα που περιγράφονται εδώ : http://www.howtoforge.com/perfect_setup_debian_etch_p5
Το προκαθορισμένο μέγεθος e-mail είναι 10MB. Για να το αλλάξουμε τροποποιούμε το αρχείο main.cf προσθέτωντας ή αλλάζωντας την παρακάτω γραμμή
message_size_limit = 20480000
Στην συνέχεια κάνουμε επανεκκίνηση τον mail server
service restart postfix
και ελέγχουμε τις μεταβλητές του
postconf | grep size
Τέλος δοκιμάζουμε να στείλουμε ένα πολύ μεγάλο e-mail
Στο αρχείο /etc/postfix/main.cnf προσθέτουμε στο τέλος του τα εξής
#virtual domains virtual_alias_maps = hash:/etc/postfix/virtual sender_canonical_maps = hash:/etc/postfix/senders home_mailbox = Maildir/
Για να δημιουργηθούν τα αρχείο virtual.db και senders.db
cd /etc/postfix postmap senders postmap virtual
Μετά από κάθε αλλαγή στα αρχεία senders και virtual που είναι οι χρήστες και οι διευθύνσεις e-mail των αποστολέων και των παραληπτών e-mail του server εκτελούμε την αντίστοιχη postmap εντολή.
Δοκιμή Αποστολής e-mail
echo test | mail -v username@domain.com
Για να δοκιμάσουμε τα virtual domains συνδεόμαστε πρώτα ως ένας χρήστης virtual domain (π.χ. user) και στην συνέχεια δοκιμάζουμε αποστολή
su - user echo test | mail -v username@domain.com
Στο αρχείο /etc/postfix/main.cf προσθέτουμε στην παρακάτω γραμμή το configuration αρχείο για όλα τα virtual domains στα οποία κάνουμε relay
relay_domains = $mydestination, hash:/etc/postfix/relay-domains
Το αρχείο relay-domains θα πρέπει να μοιάζει με
mydomain.gr OK myotherdomain.com OK ..
Για να δημιουργήσουμε το relay-domains.db εκτελούμε
postmap relay-domains
Προσθέτουμε επίσης τις παρακάτω γραμμές στο /etc/postfix/main.cf
relayhost = relay_recipient_maps =
Τέλος θα πρέπει οπωσδήποτε στις ρυθμίσεις του dns για το domain που εξυπηρετείται ο relay mail server να έρχεται δεύτερος σε προτεραιότητα. Π.χ. Αν ο primary mail server είναι ο mx1.mymailserver.gr και relay είναι ο mx2.mymailserver.gr
mx1 IN CNAME mx1.mymailserver.gr. @ IN MX 10 mx1 mx2 IN CNAME mx2.mymailserver.gr. @ IN MX 20 mx2
Μια από τις χρήσιμες δυνατότητες είναι η λήψη με pop από κάποιον client των μηνυμάτων συστήματος των 2 server, που αποστέλλονται από τον τοπικό χρήστη root στο root@mydomain.gr. O primary mail server στέλνει τα μηνύματα στον εαυτό του ενώ βέβαια ο relay mail server στέλνει στο root στο domain μας δηλαδή στον root στον primary server. Έτσι τα e-mail στον root@mydomain.gr είναι και από τους δύο servers. Για να τα ξεχωρίζουμε κάνουμε το εξής:
Τροποποιούμε το αρχείο /etc/postfix/senders στον κάθε server ώστε στον primary mail server (π.χ. s1) να περιέχει
root root@s1.mydomain.gr
και στον relay (π.χ. s2) να περιέχει
root root@s2.mydomain.gr
Εκτελούμε και στα 2 μηχανήματα την εντολή
postmap senders
Τώρα θα ξεχωρίζουμε από ποιο server προέρχονται τα μηνύματα του root από την διεύθυνση αποστολέα (root@s1.mydomain.gr και root@s2.mydomain.gr)
Ρυθμίζουμε σωστά το hostname (βλ.Ρύθμιση δικτύου)
Επίσης τροποποιούμε το αρχείο /etc/mailname ώστε να είναι όμοιο με το hostname
cp /etc/hostname /etc/mailname
Επίσης καλό είναι να ρίξουμε μια ματιά στο αρχείο /etc/aliases για να δούμε σε ποιους χρήστες κατευθύνονται τα μηνύματα. Υπό φυσιολογικές συνθήκες όλα εκτός του mailer-daemon: postmaster θα προορίζονται προς τον root. Όμως ενώ θέλουμε και τα μηνύματα του www-data να αποστέλονται στον root εδώ είναι ίσως λανθασμένα μόνο του www. Εάν στείλει κάποιος μέσω php από τον apache και δεν φτάσει στον προορισμό του θα επιστραφεί στον www-data. Καλό είναι να επιστραφεί στον root. Προσθέτουμε λοιπόν την γραμμή
www-data: root
Μετά από αλλαγή θα πρέπει να εκτελέσουμε και την εντολή
newaliases
Χρησιμοποιούμε το εργαλείο pflogsumm
aptitude install pflogsumm pflogsumm /var/log/mail.log | less
Σε περίπτωση που γίνεται υπερβολική χρήση του mail server μπορούμε να ορίσουμε τις παρακάτω ρυθμίσεις
Ορίζουμε όριο 20 παραληπτών από ένα client ανά 60s (anvil_rate_time_unit)
smtpd_client_recipient_rate_limit = 20
Ορίζουμε όριο στο μέγεθος κάθε e-mail π.χ. 20MB
message_size_limit = 20480000
Εάν θέλουμε να ορίσουμε και όριο στο συνολικό μέγεθος e-mail που θα σταλεί π.χ, 10 παραλήπτες x 5MB → σύνολο 50ΜΒ σύνολικό μέγεθος, θα πρέπει να χρησιμοποιήσουμε τον policyd server (βλ. http://www.policyd.org/) Να δω εάν γίνεται να οριστεί και παράθυρο χρόνου για τα 50 MB π.χ. ανά 15 λεπτά
Εάν μαζευτούν πάρα πολλά deferred e-mail στην ουρά, λόγω π.χ. μη έγκυρων παραληπτών, τα διαγράφουμε ως εξής
postsuper -d ALL deferred
Σε περίπτωση φυσιολογικής μεγάλης χρήσης, π.χ. εάν έχουμε πολλούς φακέλους σε μια σύνδεση imap υπάρχει πιθανότητα να ξεπεράσουμε το όριο συνδέσεων από την ίδια ip. Αλλάζουμε το προκαθορισμένο που είναι 10 τροποποιώντας το αρχείο /etc/dovecot/dovecot.conf
#increase general limit mail_max_userip_connections=30 .. protocol imap { #increase imap limit mail_max_userip_connections=30
Ελέγχουμε τις υπάρχουσες συνδέσεις με
doveadm who
Στο αρχείο main.cf προσθέτουμε εκτός των άλλων και έλγχο rbl από γνωστές υπηρεσίες στο spam block databases στο internet
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, check_sender_access hash:/etc/postfix/sender_access, reject_rbl_client bl.spamcop.net, reject_rbl_client sbl.spamhaus.org, reject_rbl_client dnsbl.sorbs.net, permit smtpd_sasl_authenticated_header = yes
Επίσης (με την παραπάνω ρύθμιση) μπορούμε να προσθέσουμε και εμείς επιπλέον διευθύνσεις από τις οποίες δεν θα αποδεχόμαστε e-mail στο αρχείο /etc/postfix/sender_access (αν και πλέον οι spammers μεταβάλλουν συνέχεια την ip και την e-mail διεύθυνση από την οποία στέλνουν).
bad@badaddress.com REJECT
postmap /etc/postfix/sender_access /etc/init.d/postfix restart
Εάν τα spam mails πηγάζουν από τον ίδιο τον server π.χ. από μια εγκατάσταση joomla θα πρέπει να δούμε την ώρα που μπήκαν στην ουρά (Arrival time)
postqueue -p
Εάν κάποια είναι καλώς στην ουρά, π.χ. ο main mail server ήταν εκτός λειτουργίας για να ξανασταλλούν εκτελούμε
postqueue -f
Στην συνέχεια από το access_log του apache για τον virtual server από τον οποίο προέρχονται βρίσκουμε τι εκτελέστηκε δευτερόλεπτα πριν για να εντοπίσουμε το script που τα στέλνει.
Βέβαια το να διαγραφεί είναι πολύ προσωρινό μέτρο, αφού κατά 99% θα ξαναδημιουργηθεί. Θα πρέπει να δούμε ποιο ύποπτο component / module το ενεργοποιεί ή δυστυχώς να διαγράψουμε και να δημιουργήσουμε ξανά το site
Προσωρινά, διαγράφουμε τα deferred από την ουρά με
postsuper -d ALL deferred
Βάζουμε σε blacklist το sender email ως εξής: Στο main.cf, βάζουμε το check_sender_access hash:/etc/postfix/sender_access, πρώτο στο smtpd_recipient_restrictions και
smtpd_recipient_restrictions = check_sender_access hash:/etc/postfix/sender_access,
μέσα στο sender_access κόβουμε το domain που στέλνει τα spam.
domain@domain.gr REJECT
ΠΡΟΣΟΧΗ! θα πρέπει να έχει μόνο reject γραμμές αλλιώς θα κάνουμε το server μας open relay.
Το sender_access είναι για τις διευθύνσεις των αποστολέων που στέλνουν στον server μας αλλά με την παραπάνω τεχνική λειτουργεί και ανάποδα. Δεν κόβονται πάντα όλες οι προσβάσεις (π.χ. smtp) αλλά σίγουρα τοπικά μέσω script
Καλός έλεγχος είναι ο περιοδικός έλεγχος για αρχεία php που ξεκινούν με τελεία (κρυφά)
grep -H "\/\.[a-z]*\.php" -R /home/*/logs/access_log
Η καλύτερη λύση για μείωση των επιπτώσεων των spammers στην απόδοση και την ασφάλεια του mail server είναι η υπηρεσία fail2ban
Καλό είναι όμως να ορίσουμε και έναν μέγιστο αριθμό συνεχόμενων smtp αποτυχιών. Για παράδειγμα εάν το fail2ban ελέγχει ανά 5 δλ (μέθοδος poll) το αρχείο mail.log και γίνουν 20 προσπάθεις αποστολής μέσα στα 5 αυτά δλ δεν έχει σημασία εάν ορίσαμε να μπλοκάρει την απομακρυσμένη ip μετά από 5 προσπάθεις, o spammer έχει προλάβει να κάνει ήδη 20.
Ορίζουμε λοιπόν και την παρακάτω ρύθμιση στο main.conf
smtpd_hard_error_limit = 10 # because fail2ban polls and cannot detect too many relay access errors in little time smtpd_error_sleep_time = 1s smtpd_soft_error_limit = 3 # After that amount of errors, delay configured by smtpd_error_sleep_time delay is increased until the smtpd_hard_error_limit is reached and client is disconnected
Για αποστολή μέσω smtp με χρήση ssl/tls μπορούμε να χρησιμοποιήσουμε τα ssl κλειδιά που δημιουργήσαμε από τον apache2
Στο αρχείο main.cf ορίζουμε
smtpd_tls_cert_file = /etc/apache2/newcert.pem smtpd_tls_key_file = /etc/apache2/newkey.pem smtpd_tls_CAfile = /etc/apache2/newcert.pem
και επανεκκινούμε την υπηρεσία postfix
/etc/init.d/postfix restart
Στο αρχείο /etc/dovecot/dovecot.conf ορίζουμε
ssl_ca = </etc/apache2/newca.pem ssl_cert = </etc/apache2/newcert.pem ssl_key = </etc/apache2/newkey.pem
Επανεκκινούμε την υπηρεσία με
/etc/init.d/dovecot restart
Για λήψη μέσω pop3 με χρήση ssl/tls κάνουμε τα εξής για τα ίδια κλειδιά
cd /etc/courier cat /etc/apache2/newkey.pem /etc/apache2/newcert.pem > pop3d.pem openssl gendh >> pop3d.pem /etc/init.d/courier-pop-ssl restart
Για λήψη μέσω imap με χρήση ssl/tls κάνουμε αντίστοιχα
cd /etc/courier cat /etc/apache2/newkey.pem /etc/apache2/newcert.pem > imapd.pem openssl gendh >> imapd.pem /etc/init.d/courier-imap-ssl restart
Χρειάζεται να ανοίξουμε τις παρακάτω θύρες για smtp και pop συνδέσεις
Για να διαγράψουμε τα πολύ παλιά mail από dovecot μπορούμε να βάλουμε σε cron την εντολή
doveadm -Dv expunge -u username mailbox INBOX SENTBEFORE 52w
ή π.χ.
doveadm -Dv expunge -u username mailbox INBOX SENTBEFORE 1-Jan-2015
Για διαγραφή όλων
doveadm expunge -u username mailbox '*' all
βλ. και
man doveadm-expunge man doveadm-search-query
Ο relay mail server όταν δέχεται ένα e-mail την στιγμή που ο primary server δεν αποκρίνεται το τοποθετεί στην ουρά και ανά τακτά χρονικά διαστήματα (300 sec postfix version < 2.4, 1000sec postfix version > 2.4) προσπαθεί να τα στείλει εμφανίζοντας όμως το ακόλουθο μήνυμα λάθους.
tail -f /var/log/mail.log Aug 29 22:45:04 wad postfix/sendmail[21848]: fatal: usage: sendmail [options] Aug 29 22:50:04 wad postfix/sendmail[21871]: fatal: usage: sendmail [options] ..
Ίσως το λάθος προέρχεται από αλλού καθώς μετά από περίπου 1000sec τα μηνύματα φεύγουν
Εάν βγει το παρακάτω μήνυμα λάθους
Jan 27 23:54:22 s1 postfix/local[1437]: warning: maildir access problem for UID/GID=1009/1016: create maildir file /home/linuxfanclub/Maildir/tmp/1201470862.P1437.s1.mydomain.gr: Permission denied Jan 27 23:54:22 s1 postfix/local[1437]: warning: perhaps you need to create the maildirs in advance
Είναι μάλλον πρόβλημα δικαιωμάτων