Hallo zusammen,
Nach einem Jahr mit einem Plesk Server arbeite ich gerade an meinem ersten, selbst-administrierten (v)Server. Entsprechende Schritte auf dem Live-Server bereite ich auf einem lokalen (KVM) Server vor und teste sie so gut als möglich, bevor der entsprechende Dienst auch auf dem Live System aktiviert wird. Der bislang deutlich mächtigste (und vorerst auch letzte) Bissen ist dabei der Komplex Email, der mich jetzt mindestens 14 Tage beschäftigt hat.
Auf dem späteren Zielsystem laufen vorwiegend eigene PHP Anwendungen (TYPO3) unter mehreren Kundendomains. Meine Kunden sind fast ausschließlich fachfremd, so dass nur ich die Administration übernehme. Für meinen eigenen Komfort gibt es eine Management Subdomain, ausschließlich ansprechbar über ssl und Basic Auth, mit Statistiken (awstats), phpmyadmin und Apache Server Status). phpmyadmin läuft mit anderer php.ini (längere Scriptlaufzeiten, anderes open_basedir etc.) als die gehosteten TYPO3 Projekte (ich nutze fcgid/suexec). Die Management Subdomain aktiviere ich nur, wenn ich sie brauche (a2ensite/a2dissite).
Ich habe mich für Postfix, Dovecot, saslauthd, MySQL entschieden. Auf dem Entwicklungsserver scheint auch alles zu funktionieren, ausser dem Versand nach aussen, der wahrscheinlich am fehlenden DNS Server bzw. reverse Mapping scheitert (ein DNS Server macht in meinem LAN keinen Sinn, da die Rechner nicht immer laufen und mein Router zu doof ist, ich arbeite also provisorisch mit /etc/hosts). Auf dem Live-System kann ich die DNS Server von Host Europe nutzen.
Selbst nach langer Beschäftigung mit dem Thema Email bleibt eine Menge an Zweifel. Ich wäre Euch also dankbar, wenn Ihr Euch meine Konfiguration einmal kritisch anschauen würdet. Ich poste alle relevanten Infos, lasse aber die 4 mysql-*_*.cf weg. Meine Konfiguration ist ein Konglomerat aus 7 ähnlichen Tutorials, wobei in fast allen irgendwelche, selbst mir ersichtliche, Schwachstellen steckten:
/etc/hostname: demokrit.example-local.eu /etc/mailname: demokrit.example-local.eu Als Zertifikat kommt ein selbstgezeichnetes (eigene CA) Wildcard Zertifikat zum Einsatz: *.example-local.eu
/etc/postfix/main.cf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | # Don't be too verbose smtpd_banner = $myhostname ESMTP $mail_name biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no myhostname = demokrit.example-local.eu alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases #myorigin = /etc/mailname mydestination = demokrit.example-local.eu localhost localhost.localdomain mynetworks = 127.0.0.0/8 relayhost = mailbox_command = mailbox_size_limit = 0 message_size_limit = 30720000 recipient_delimiter = + inet_interfaces = all inet_protocols = all # TLS parameters #smtpd_use_tls=yes (depreciated, use smtpd_tls_security_level) smtpd_tls_security_level=may smtp_tls_security_level=may smtp_tls_note_starttls_offer = yes smtpd_tls_cert_file=/etc/ssl/certs/wc.example-local.eu.cert.crt smtpd_tls_key_file=/etc/ssl/private/wc.example-local.eu.unsecure.key smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # Logging (Production: smtpd_tls_loglevel = 0 (default) smtpd_tls_loglevel = 1 # Authentication # dovecot is added as a service in master.cf, so do not use # 'smtpd_sasl_type = dovecot' here smtpd_sasl_auth_enable = yes broken_sasl_auth_clients = yes smtpd_sasl_authenticated_header = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps # Virtual mailboxes virtual_mailbox_base = /home/vmail virtual_transport = dovecot virtual_alias_domains = virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_create_maildirsize = yes virtual_maildir_extended = yes dovecot_destination_recipient_limit=1 |
/etc/default/saslauthd:
1 2 3 4 5 6 7 | START=yes DESC="SASL Authentication Daemon" NAME="saslauthd" MECHANISMS="pam" MECH_OPTIONS="" THREADS=5 OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r" |
/etc/pam.d/smtp:
1 2 | auth required pam_mysql.so user=mail_admin passwd=mySecretPw host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 account sufficient pam_mysql.so user=mail_admin passwd=mySecretPw host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 |
/etc/postfix/sasl/smtpd.conf:
1 2 3 4 5 6 7 8 9 | pwcheck_method: saslauthd mech_list: plain login allow_plaintext: true auxprop_plugin: mysql sql_hostnames: 127.0.0.1 sql_user: mail_admin sql_passwd: mySecretPw sql_database: mail sql_select: select password from users where email = '%u' |
/etc/postfix/master.cf (only added/edited parts):
1 2 3 4 5 6 7 8 9 | # Add submission port 587 submission inet n - - - - smtpd # -o smtpd_tls_security_level=encrypt # -o smtpd_sasl_auth_enable=yes # -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING # Add dovecot as service dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient} |
dovecot -n
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | # 1.2.9: /etc/dovecot/dovecot.conf # OS: Linux 2.6.32-38-server x86_64 Ubuntu 10.04.3 LTS ext4 log_timestamp: %Y-%m-%d %H:%M:%S protocols: imap imaps pop3 pop3s ssl_cert_file: /etc/ssl/certs/wc.example-local.eu.cert.crt ssl_key_file: /etc/ssl/private/wc.example-local.eu.unsecure.key login_dir: /var/run/dovecot/login login_executable(default): /usr/lib/dovecot/imap-login login_executable(imap): /usr/lib/dovecot/imap-login login_executable(pop3): /usr/lib/dovecot/pop3-login mail_privileged_group: mail mail_location: maildir:/home/vmail/%d/%n/Maildir mbox_write_locks: fcntl dotlock mail_executable(default): /usr/lib/dovecot/imap mail_executable(imap): /usr/lib/dovecot/imap mail_executable(pop3): /usr/lib/dovecot/pop3 mail_plugin_dir(default): /usr/lib/dovecot/modules/imap mail_plugin_dir(imap): /usr/lib/dovecot/modules/imap mail_plugin_dir(pop3): /usr/lib/dovecot/modules/pop3 namespace: type: private separator: . prefix: INBOX. inbox: yes list: yes subscriptions: yes lda: postmaster_address: postmaster@example-local.eu mail_plugins: sieve log_path: /home/vmail/dovecot-error.log info_log_path: /home/vmail/dovecot-info.log global_script_path: /home/vmail/globalsieverc auth_socket_path: /var/run/dovecot/auth-master auth default: mechanisms: plain login passdb: driver: pam passdb: driver: sql args: /etc/dovecot/dovecot-sql.conf userdb: driver: passwd userdb: driver: static args: uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes socket: type: listen client: path: /var/spool/postfix/private/auth-client mode: 432 user: postfix group: postfix master: path: /var/run/dovecot/auth-master mode: 384 user: vmail |
/etc/aliases:
1 2 | postmaster: root root: webadmin@example-local.eu # the latter is a virt. dom account |
Tests:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Trying ::1... Connected to localhost. Escape character is '^]'. 220 demokrit.example-local.eu ESMTP Postfix ehlo localhost 250-demokrit.example-local.eu 250-PIPELINING 250-SIZE 30720000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN |
(auch telnet Mailversand klappt)
Versand vom Client an virtuelle Domain oder Systemuser klappt und erzeugt folgende Logeinträge:
/var/log/mail.log:
1 2 3 4 5 6 7 8 9 10 | Feb 12 11:02:05 demokrit postfix/smtpd[1455]: connect from unknown[192.168.2.10] Feb 12 11:02:05 demokrit postfix/smtpd[1455]: setting up TLS connection from unknown[192.168.2.10] Feb 12 11:02:05 demokrit postfix/smtpd[1455]: Anonymous TLS connection established from unknown[192.168.2.10]: TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits) Feb 12 11:02:05 demokrit postfix/smtpd[1455]: 3724E2A01B0: client=unknown[192.168.2.10], sasl_method=PLAIN, sasl_username=webadmin@example-local.eu Feb 12 11:02:05 demokrit postfix/cleanup[1458]: 3724E2A01B0: message-id=<4F378E1C.2050605@example-local.eu> Feb 12 11:02:05 demokrit postfix/qmgr[809]: 3724E2A01B0: from=<webadmin@example-local.eu>, size=702, nrcpt=1 (queue active) Feb 12 11:02:05 demokrit postfix/smtpd[1455]: disconnect from unknown[192.168.2.10] Feb 12 11:02:05 demokrit postfix/pipe[1460]: 3724E2A01B0: to=<tsk@example-local.eu>, relay=dovecot, delay=0.66, delays=0.21/0.04/0/0.41, dsn=2.0.0, status=sent (delivered via dovecot service) Feb 12 11:02:05 demokrit postfix/qmgr[809]: 3724E2A01B0: removed Feb 12 11:02:21 demokrit postfix/smtpd[1448]: disconnect from unknown[::1] |
Soviel zur Konfiguration. Jetzt zu meinen Fragen:
1. Kann ich mich mit diesem Konzept trauen, auf den Live-Server zu wechseln, oder habe ich wichtige, sicherheitsrelevante Dinge übersehen? Dies ist meine wichtigste Frage an die Experten.
2. Eine Verständnisfrage zu den Zertifikaten: Ich habe in der main.cf mein Wildcard Zertifikat über smtpd_tls_cert_file/smtpd_tls_key_file verlinkt, nutze aber dovecot, wo die Zertifikate erneut verlinkt werden. Brauche ich tatsächlich beide Einträge? Ich möchte auch die Kommunikation zwischen Mailservern verschlüsseln, zumindest falls möglich (smtp_tls_security_level=may). Sehe ich das richtig, dass der fremde Mailserver das Zertifikat nicht prüft, aber dennoch als Voraussetzung für eine TLS Verbindung erfordert? Macht in diesem Fall der Eintrag meines eigenen Root CA's (smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem) überhaupt Sinn?
3. Sehe ich das richtig, dass der Submission Port 587 nur von Client-Seite genutzt wird, dass man also zusätzlich den Port 25 für Server-to-Server offen lassen muss? Oder kann/sollte man Port 25 schließen? In meiner jetzigen Konfiguration ist lediglich der Port 587 in der master.cf konfiguriert, aber nicht weiter fine-getuned. Sehe ich das richtig, dass dies Dovecot/saslauthd übernimmt und es deshalb so bleiben kann?
4. Wenn die Basics laufen, möchte ich Virenschutz und Black/Greylisting und Webmail hinzufügen. Spamhouse darf ich aber nur unkommerziell nutzen. Mein tägliches Mail-Aufkommen ist winzig (<50 für alle gehosteten Domains pro Tag). Kennt Ihr andere, empfehlenswerte Blacklists, die man auch kleingewerblich nutzen darf? Welches (vorzugsweise php-basierenden) Webmail würdet Ihr empfehlen?
5. Vom Bauchgefühl her benötige ich kein Postfixadmin, da ich phpmyadmin habe. Gibt es dennoch Gründe dafür?
6. In meiner aktuellen Konfiguration ist eine virtuelle Mail Domain namentlich identisch mit der Domain gem. FQDN. Schickt jetzt ein Systemuser von der Konsole eine Mail, so kommt diese beim Empfänger unter root@demokrit.example-local.eu an, während die virtuellen Domain user unter ihrer korrekten Domain kommunizieren (webadmin@example-local.eu). In dieser Konfiguration klappt ein Reply immer. Setze ich über myorigin auf mydomain, so geht eine Mail von root raus unter root@example-local.eu (also im identischen Namespace wie die virtuellen Domainuser), dafür geht ein Reply in die Hose. Kann man dies irgendwie beheben, bzw. sollte man dies überhaupt? Der FQDN macht ja bei Systemusern sogar Sinn, um sie von gleichlautenden Usern anderer Server zu unterscheiden.
7. Gibt es heute noch Gründe für pop3, oder schenkt man sich dies besser?
Mehr Fragen habe ich derzeit nicht. Bitte entschuldigt den vielen Text, aber ohne Konfiguration wären meine Fragen zu akademisch. Bin natürlich auch für jede Teilantwort dankbar.
Beste Grüße,
Thomas