====== 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 ===== *Αρχικά θα πρέπει να στήσουμε τον backup mail server όπως τον κανονικό (βλ. http://www.howtoforge.com/perfect_setup_debian_etch_p5). *Στην συνέχεια κάνουμε επιπλέον ρυθμίσεις και δοκιμές (βλ. http://howtoforge.com/postfix_backup_mx) Στο αρχείο /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 (βλ.[[el:linux:debian:server:networking]]) Επίσης τροποποιούμε το αρχείο /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 ([[http://www.postfix.org/postconf.5.html#anvil_rate_time_unit|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 είναι η υπηρεσία [[el:linux:debian:server:security#fail2ban|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 μπορούμε να χρησιμοποιήσουμε τα [[ el:linux:debian:server:apache#ssl_-_tls_ths | 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 = 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 συνδέσεις *25 - smtp *110 - pop3 *113 - Authentication Service / Identification Protocol *143 - imap *993 - imaps *995 - pop3s ===== Συντήρηση ===== Για να διαγράψουμε τα πολύ παλιά 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 ===== ===== Πηγές ===== * Εγκατάσταση / Ρυθμίσεις : http://www.howtoforge.com/perfect_setup_debian_etch_p5 * Ρυθμίσεις - Επιλογές * http://www.postfix.org/VIRTUAL_README.html * http://www.postfix.org/postconf.5.html * Παραμέτροι και επιδόσεις για επιθέσεις, κατάχρηση: * http://www.postfix.org/TUNING_README.html * Συγκριτικό : http://www.geocities.com/mailsoftware42/ * virtual domains :http://www.sysdesign.ca/guides/postfix_virtual.html * mysql, quotas, virtual domains : http://www.howtoforge.com/virtual_postfix_mysql_quota_courier * dns : http://www.netwinsite.com/surgemail/help/startingoff.htm * Ρύθμιση Backup : http://howtoforge.com/postfix_backup_mx * Υπηρεσίες backup mail server : * http://www.mtgsy.net/backupemail/backup_email_server_service.php * http://www.dnsmadeeasy.com/s0306/prod/mailbk.html * Ασφάλεια * Γενικά : http://www.postfix.org/security.html * SASL : http://www.postfix.org/SASL_README.html * Security tips : http://dischosting.sourceforge.net/INSTALL/mailsec.html * main.cf spam block : https://jimsun.linxnet.com/misc/postfix-anti-UCE.txt * antispam policies : * http://w2.syronex.com/jmr/spam.html * https://www.cyberciti.biz/tips/postfix-spam-filtering-with-blacklists-howto.html * https://unix.stackexchange.com/questions/294300/postfix-prevent-users-from-changing-the-real-e-mail-address/294308 * Postfix and mysql (Μπορεί να μπει quota; - Θα χρειαστούν και αλλαγές στο wadserver script): * http://www.howtoforge.com/virtual_users_and_domains_with_postfix_debian_etch * http://www.howtoforge.com/postfix_mysql_dovecot_dspam_clamav_postgrey_rbl_debian_etch_p2 * TLS vs SSL : http://www.computing.net/webdevel/wwwboard/forum/439.html * Proper setup to avoid being blocked * DNS Proper setup for email : http://bind8nt.meiway.com/itsaDNSmess.cfm * Postfix Proper setup for email : http://cbl.abuseat.org/namingproblems.html * courier imap : * Έλεγχος Λειτουργίας : http://www.courier-mta.org/imap/tutorial.setup.html * Blacklist και δοκιμές * http://www.mxtoolbox.com/ * https://mxtoolbox.com/domain/mail.weballdesign.gr/ * http://multirbl.valli.org/lookup/ * http://multirbl.valli.org/lookup/78.87.13.205.html * http://multirbl.valli.org/lookup/194.219.108.89.html * http://multirbl.valli.org/lookup/62.38.154.127.html * http://multirbl.valli.org/lookup/62.169.208.167.html * http://rbls.org/ * spf - tests * https://mxtoolbox.com/SuperTool.aspx?action=spf%3alserveradmin.gr&run=toolpage * https://www.dmarcanalyzer.com/spf/checker/ * mail σε check-auth2@verifier.port25.com * dkim * setup : https://www.linuxbabe.com/mail-server/setting-up-dkim-and-spf * https://www.mail-tester.com * spam folder test * https://www.linuxbabe.com/glockapps * Dovecot * http://wiki.dovecot.org/Migration/Courier * http://www.debianadmin.com/debian-mail-server-setup-with-postfix-dovecot-sasl-squirrel-mail.html * postfix as smtp client * https://www.linode.com/docs/email/postfix/postfix-smtp-debian7 * Paid mail services * google gsuite : https://www.wpbeginner.com/beginners-guide/how-to-setup-a-professional-email-address-with-gmail-and-google-apps/ * Ubuntu 20 postfix setup * https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-on-ubuntu-20-04