Table of Contents

Postfix - mail Server

Σε συνδυασμό με dovecot ή courier-pop courier-imap

Εγκατάσταση

Στήνουμε τον server κάνωντας τα διαδοχικά βήματα που περιγράφονται εδώ : http://www.howtoforge.com/perfect_setup_debian_etch_p5

Ρυθμίσεις

Μέγεθος e-mail

Το προκαθορισμένο μέγεθος e-mail είναι 10MB. Για να το αλλάξουμε τροποποιούμε το αρχείο main.cf προσθέτωντας ή αλλάζωντας την παρακάτω γραμμή

message_size_limit = 20480000

Στην συνέχεια κάνουμε επανεκκίνηση τον mail server

service restart postfix

και ελέγχουμε τις μεταβλητές του

postconf | grep size

Τέλος δοκιμάζουμε να στείλουμε ένα πολύ μεγάλο e-mail

Virtual Domains

Στο αρχείο /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

Relay setup

Στο αρχείο /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

Logs

Μια από τις χρήσιμες δυνατότητες είναι η λήψη με 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

Έλεγχος logs

Χρησιμοποιούμε το εργαλείο 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

Ορίζουμε όριο στο μέγεθος κάθε e-mail π.χ. 20MB

message_size_limit = 20480000

Εάν θέλουμε να ορίσουμε και όριο στο συνολικό μέγεθος e-mail που θα σταλεί π.χ, 10 παραλήπτες x 5MB → σύνολο 50ΜΒ σύνολικό μέγεθος, θα πρέπει να χρησιμοποιήσουμε τον policyd server (βλ. http://www.policyd.org/) FIXME Να δω εάν γίνεται να οριστεί και παράθυρο χρόνου για τα 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

Ασφάλεια

Block spammer ip

Στο αρχείο 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 emails - joomla

Εάν τα 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

Relay access denied

Η καλύτερη λύση για μείωση των επιπτώσεων των 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

TLS/SSL

smtp

Για αποστολή μέσω 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

Dovecot pop - imap

Στο αρχείο /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 

Courier pop

Για λήψη μέσω 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

Courier imap

Για λήψη μέσω 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

Είναι μάλλον πρόβλημα δικαιωμάτων

Dovecot

Πηγές