Konfiguration von Postfix, Dovecot und Plesk unter Linux

Hi,

im heutigen Blog geht es um die Umstellung von Courier auf Dovecot bzw. von QMail auf Postfix mit Plesk unter Linux.


Plesk:

Als erstes muss man in die Paketverwaltung von Plesk X um von Courier auf Dovecot um zu stellen.

Plesk-Updates-1

Plesk-Updates-2Plesk-Updates-3

 

 

 

 

 

 

 

Nach der Umstellung und dem klicken auf Fortfahren wird das System geändert: Der Vorteile, finde ich, das die ganze config viel einfacher ist wie bei Courier und es funktioniert auch zumindest hatte ich ohne ende Probleme das System so ein zu stellen das nur noch TLS geht.

QMail wird nicht mehr Supportet und gilt als unsicher.


Dovecot:

Jetzt geht es in die Konsole direkt nach /etc/dovecot

Dort findet man dann folgendes:

drwxr-xr-x 2 root root 4,0K Dez 26 12:01 conf.d
-rw-r--r-- 1 root root 3,7K Dez 26 21:35 dovecot.conf
drwx------ 2 root root 4,0K Dez 26 21:35 private

conf.d

root Sa Jan 24 21:48:26 dovecot: l conf.d/
insgesamt 32K
-rw-r--r-- 1 root root 537 Mai 27 2014 10-plesk-security.conf
-rw-r--r-- 1 root root 383 Mai 27 2014 15-plesk-auth.conf
-rw-r--r-- 1 root root 79 Dez 26 10:09 25-logging.conf
-rw-r--r-- 1 root root 216 Dez 27 16:07 50-ssl.conf
-rw-r--r-- 1 root root 780 Mai 27 2014 90-plesk-sieve.conf
-rw-r--r-- 1 root root 205 Dez 27 11:26 92-plesk-service-imap.conf
-rw-r--r-- 1 root root 205 Dez 27 11:26 92-plesk-service-pop.conf
-rw-r--r-- 1 root root 184 Dez 27 11:26 92-plesk-userip_connections.conf

50-ssl.conf habe ich selbst erstellt um einige Anpassungen zu machen die ich in den ganzen TUTs gefunden haben.

Im Ordner Private liegen die Keys, diese habe ich aber durch eigene Ausgetauscht genauso wie die in Postfix.

Ich habe es mir auch einfach gemacht und benutze die Keys von Dovecot auch für Postfix, wenn diese dann ablaufen muss ich dann nur einmal welche erstellen und austauschen.

Unter dem Link findet Ihr einmal ein Script und eine conf Datei mit der Ihr euch ganz schnell ein neues Zertifikat erstellen könnt.

Ihr könnt auch die Bitrate auf 2048 hoch setzten und wenn Ihr wollt könnt Ihr auch noch die Verschlüsselung auf SHA256 setzen sonst wird ein SHA1 erstellt, wobei ich noch mit SHA1 arbeite, aber da ich die Zertifikate auch schon an Kunden gegeben habe will ich nicht schon wieder nerven und warte bis die jetzigen abgelaufen sind.

Bin ja schon happy das es überhaupt bei allen geht, da besonders MACs und Outlook super nervig sind im Gegensatz zu Thunderbird.

Da ich nicht mehr weiß wo ich genau was angepasst habe gebe ich mal ein paar Teile der einzelnen Config Dateien aus damit man weiß auf was zu achten ist.

dovecot.conf:
auth_mechanisms = plain login digest-md5 cram-md5 apop

Plain hätte ich gerne weggelassen aber ich musste feststellen das MACs und Android mit den standart E-Mail Programmen nur dies können bzw. APOP wird vom MAC genutzt.

ssl_cert = </etc/dovecot/private/certvondir.pem
ssl_key = </etc/dovecot/private/gleichedateiwiedascert.pem

wenn man eine neue .pem erstellt hat kann man diese hier angeben, wie bei Postfix gibt man bei beidem die gleiche Datei an.

Ansonsten gibt es hier nicht zu ändern bzw. den rest kann man auch durch eigene Dateien im Ordner conf.d/ machen.

conf.d:

in der Datei 25-logging.conf kann man den Eintrag für das Logging folgend abändern

login_log_format_elements = "user=<%u> method=%m rip=%r lip=%l mpid=%e %c %k"

geändert wird eigentlich nur das %k am ende damit kann man über das Logfile (syslog oder mail.info) prüfen welche Verschlüsselung genutzt wird, was ich ganz interessant finde zumindest am Anfang.

Dann habe ich mir die Datei 50-ssl.conf erstellt um fest zu legen welche Verschlüsselung genutzt werden soll und das hat mich die meiste Zeit gekostet da jedes OS / E-Mailprogramm nicht alles kann und man hier herausfinden muss was bei Windows, MAC und Android geht und was nicht.

ssl = required
ssl_dh_parameters_length = 2048
ssl_protocols = TLSv1 TLSv1.1 TLSv1.2 !SSLv3 !SSLv2
ssl_cipher_list = DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ALL:!LOW:!SSLv2:!EXP:!aNULL
ssl_prefer_server_ciphers = yes

Erst lege ich fest das SSL genutzt wird (Standard), danach das mein DH Key mit 2048 erstellt wurde, dieser liegt im Postfix Verzeichnis und ist auch dort so festgelegt.

Die SSL Protokolle werden auf TLS 1, TLS 1.1 und TLS 1.2 festgelegt SSL2 und SSL3 werden nicht unterstützt.

Die Cipherlist ist hier der knack Punkt, ich war auf zig Seiten und habe x listen getestet bin ich eine gefunden haben die überhaupt geht, interessant fand ich auch das Exchange von MS je nach Version nur 2 Verschlüsselungen kann echt traurig und das war kann auch der knackpunkt den meisten kann MS kein DHE kann.

Naja dafür hats ja dann noch ALL drin und alles was schlecht ist wird geblockt… OK nicht alles aber was will man machen, wenn man nicht alle 5min. einen Kunden am Ohr haben will der weint weil sein E-Mail nicht geht 🙂

Und als letztes wird noch festgelegt das Dovecot die cipherlist zu nutzen hat.


Postfix:

Den selben Spass machen wir auch noch mit Postfix.

Danach habe ich nur noch in einer Datei was geändert und zwar die 92-plesk-userip_connections.conf dort habe ich die Verbindungen pro Userip auf 10 begrenzt also kann eine IP maximal nur 10 gleichzeitige Verbindungen aufbauen.

Sollte man Kunden haben die via Exchange oder sonst einem E-Mail Server mehr Verbindungen aufbauen um alle E-Mail Konten auf einfach abzurufen muss man diesen Wert auf Standard lassen oder seinen Gegebenheiten anpassen.

Zum Schluss noch Dovecot mit /etc/init.d/dovecot restart neustarten.

Jetzt geht es an Postfix, ich hab erstmal ein Backup gemacht von der original config mit cp /etc/postfix/main.cf /etc/postfix/main.org , dadurch das ich schon mal an einem anderen System rumspielen durfte weiß ich das die config von Debian 6 nicht ganz so will und einige Befehle nicht mehr gehen bzw. auch Plesk hat hier den ein oder anderen punkt wo anders liegen und geht daher auch nicht mehr.

Postfix Konfiguration:

Meine Anpassungen

main.cf:
smtpd_tls_cert_file = /etc/postfix/cert.pem
smtpd_tls_key_file = $smtpd_tls_cert_file

Mein selbst erstelltes Zertifikat welches ic h auch für Dovecot benutze, das habe ich einfach via cp auch nach /etc/postfix/ kopiert.

smtpd_tls_auth_only = yes

Ohne diese Option würde Postfix auch auf SSL3 reagieren das kann man damit abstellen und sollte man auch machen.

Das ist das gleiche was auch web.de, t-online oder 1und1 machen. (Falls man seinen Kunden ein Argument benötigt)

smtpd_sender_restrictions = check_sender_access hash:/var/spool/postfix/plesk/blacklists,
permit_sasl_authenticated,
permit_mynetworks,
check_client_access pcre:/var/spool/postfix/plesk/non_auth.re,
reject_unknown_sender_domain,
reject_unknown_client,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
check_client_access hash:/etc/postfix/rbl_override,
reject_rbl_client bl.spamcop.net,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client allinone.bl.blocklist.de

sender_access und check_client_access sind von Plesk und sollten nicht geändert werden, check_client_access ist von mir über die trage ich Kunden meiner Kunden ein um sicherzustellen das falls hier mal einer auf einer RBL steht (z.B. t-online.de) diese ohne Prüfung durch gehen.

Daher muss der Eintrag auch vor der RBL Prüfung stehen.

Die reject Einträge habe ich mir von einigen TUT seiten zusammengesucht um sicherzustellen das keiner meine Kunden voll müllen.

smtpd_recipient_restrictions = permit_mynetworks,
reject_invalid_hostname,
reject_unauth_pipelining,
permit_sasl_authenticated,
permit_auth_destination,
reject_unauth_destination,
check_client_access hash:/etc/postfix/rbl_override,
reject_rbl_client bl.spamcop.net,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client allinone.bl.blocklist.de
smtpd_tls_dh1024_param_file = /etc/postfix/dh_1024.pem
smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem
smtpd_tls_eecdh_grade = strong

DH Zertifikat und die Stärke. Lasst Euch nicht verwirren vom Dateinamen, das DH Zertifikat ist 2048bit und nicht 1024bit auch wenn die Datei so heißt.

Erstellen der DH Keys:

cd /etc/postfix
umask 022
openssl dhparam -out dh512.tmp 512 && mv dh512.tmp dh512.pem
openssl dhparam -out dh1024.tmp 1024 && mv dh1024.tmp dh1024.pem
openssl dhparam -out dh2048.tmp 2048 && mv dh2048.tmp dh2048.pem
chmod 644 dh512.pem dh1024.pem dh2048.pem
tls_preempt_cipherlist = yes

Festlegen das eine cipherlist genutzt werden muss, ohne den Eintrag bringt diese nichts.

smtp_sasl_security_options = noplaintext noanonymous

kein Plaintext und keine Anonyme Anmeldung erlaubt

smtpd_helo_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_non_fqdn_hostname,
reject_invalid_hostname,
reject_unauth_pipelining
tls_high_cipherlist = DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ALL:!LOW:!EXP:!aNULL
tls_random_bytes = 256
tls_daemon_random_bytes = 128
tls_preempt_cipherlist = yes
smtpd_tls_ciphers = high
smtpd_tls_mandatory_ciphers = high
smtpd_tls_mandatory_protocols = TLSv1 TLSv1.1 TLSv1.2
smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA
### new ###
initial_destination_concurrency = 20
default_destination_concurrency_limit = 20
local_destination_concurrency_limit = 20
smtp_destination_concurrency_limit = 20
smtpd_client_connection_count_limit = 25
smtpd_client_message_rate_limit = 20
smtpd_client_new_tls_session_rate_limit = 30
default_destination_recipient_limit = 50
smtpd_recipient_limit = 100
queue_run_delay = 300s
minimal_backoff_time = 300s
maximal_backoff_time = 4000s
default_process_limit = 20
smtpd_tls_eecdh_grade = strong
tls_eecdh_strong_curve = prime256v1
tls_eecdh_ultra_curve = secp384r1
smtpd_junk_command_limit = 5
smtpd_starttls_timeout = 180s
smtpd_per_record_deadline = yes
address_verify_poll_count = 2
smtpd_client_connection_rate_limit = 20
smtpd_client_recipient_rate_limit = 50
smtpd_tls_protocols = TLSv1 TLSv1.1 TLSv1.2
plesk_virtual_destination_recipient_limit = 1

helo_restrictions überprüft nochmal extra den helo und stellt sicher das dieser sauber geprüft wird.

Cipherlist wie bei Dovecot, man hat zwar eine Medium und High Liste aber Outlook nimmt zum Beispiel automatisch die high auch wenn es diese nicht kann, echt Müll.

tls-random _bytes stellt sicher das erstmal mit 128bit versucht wird zu Verschlüsseln, aber alle machen mittlerweile 256bit.

Und zum Schluss verbieten wir SSl2 und SSL3.

Ich habe mittlerweile einiges mehr gemacht, man lernt ja nie aus und kann immer etwas verbesser.

Am ende werde ich einige Dateien zum Download anbieten, das sind alles Templates die ihr für Postfix und Dovecot verwenden dürft.

Zu beachten ist nur das Ihr Eure IP eintrage, Euren Hostname und die DH Keys sowie Postfix/Dovecot keys und dort den richten Pfad angebt und natürlich mit Plesk arbeitet, ansonsten kann ALLES 1zu1 übernommen und Euer E-Mail Server ist sich, kann TLS 1.2 und läuft mit allen Clients und Betriebssystemen.

Das war dann schon die ganze Postfix config.

Die Manpage von Postfix ist auch ganz gut, dort habe ich auch einiges gefunden und umgesetzt.

master.cf habe ich nur einige Anpassungen vorgenommen:

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
#smtp      inet  n       -       -       -       -       smtpd
smtp      inet  n       -       -       -       20      smtpd
pickup fifo n - - 60 1 pickup
cleanup   unix  n       -       -       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
#qmgr     fifo  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       -       1000?   1       tlsmgr
rewrite   unix  -       -       -       -       -       trivial-rewrite
bounce    unix  -       -       -       -       0       bounce
defer     unix  -       -       -       -       0       bounce
trace     unix  -       -       -       -       0       bounce
verify    unix  -       -       -       -       1       verify
flush     unix  n       -       -       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       -       -       -       smtp
relay     unix  -       -       -       -       -       smtp
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       -       -       -       showq
error     unix  -       -       -       -       -       error
retry     unix  -       -       -       -       -       error
discard   unix  -       -       -       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       -       -       -       lmtp
anvil     unix  -       -       -       -       1       anvil
scache    unix  -       -       -       -       1       scache
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix  -       n       n       -       2       pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman unix - n n - - pipe flags=R user=list:list argv=/usr/lib/plesk-9.0/postfix-mailman ${nexthop} ${user} ${recipient}


plesk_virtual unix - n n - - pipe flags=DORhu user=popuser:popuser argv=/usr/lib/plesk-9.0/postfix-local -f ${sender} -d ${recipient} -p /var/qmail/mailnames

plesk_saslauthd unix y y y - 1 plesk_saslauthd status=5 listen=6 dbpath=/plesk/passwd.db
smtps inet n - - - - smtpd -o smtpd_tls_wrappermode=yes

submission inet n - - - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination -o smtpd_tls_dh1024_param_file=/etc/postfix/dh2048.pem

plesk-85.25.197.100- unix - n n - - smtp -o smtp_bind_address=85.25.197.100 -o smtp_bind_address6= -o smtp_address_preference=ipv4

Am besten mit der Eigenen vergleichen.

Ich hab die Prozesse des SMTPD auf 20 begrenzt und den DH key mit angegeben.


Sonstiges:

Clamav nutze ich nicht mehr irgendwie hat das nie was gefunden obwohl jede E-Mail geprüft wurde und einige config Optionen gingen nach einem Update nicht mehr.

Ich nutze seit einige Monaten Dr.Web über Plesk und kann mich nicht beschweren kommt kaum was durch.

Postfix restart mit /etc/init.d/postfix restart um alle Änderungen und sich freuen das absofort nur noch E-Mails via TLS rein und raus gehen.

Für Outlook user muss man aus dem .pem Zertifikat ein .crt machen da Windoof kein .pem kann.

openssl x509 -outform der -in cert.pem -out cert.crt

Die .crt kann man seinen Outlook Kunden via E-Mail schicken, nach dem Importieren können dann diese auch ohne Fehlermeldung (hoffentlich) mit Outlook arbeiten.

Bei Outlook 2012 und höher muss man das Cert als PFX erstellen und MUSS ein Passwort haben, sonst lässt sich das Cert nicht mehr installieren ….

POP3/IMAP sollten die Kunden Port 995/993 Nutzen und für SMTP 587, dann läuft auch alles so wie man das will.

Bei Fragen oder fehlen meinerseits bitte einen Kommentar hinterlassen.


Anbei nochmal alle zu editierenden Dateien als Anhang.

11-plesk-security-ssl

25-logging

main

master

Cya
DocSchneidi ak Cheech

Postfix Logo
Dovecot Logo

Tagged , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink.

6 Responses to Konfiguration von Postfix, Dovecot und Plesk unter Linux

  1. Lenusch says:

    Hi,

    was ist wenn man keine 25-logging.conf hat in dem Verzeichnis?
    Plesk Onyx + Debian 8.7

    • Cheech says:

      Hi,

      die kannst du dir auch erstellen mit dem Eintrag von mir, schau dir aber auch nochmal die anderen Dateien an nicht das du etwas doppelt hast oder sich ausschließt, eventuell muss man das dann in der anderen config auskommentieren mit einer # am Anfang der Zeile .

      Sollte weder ein Problem mit Onyx noch Debian 8 sein, hab nur auf Deb8 umgestellt arbeite aber noch mit Plesk 12.5

      Sollten noch Fragen sein, einfach melden.

      Gruß
      Cheech

  2. Olli says:

    Hallo,
    vielen Dank für diese sehr sehr sehr gute Anleitung. Die SPAMS sind nun auch DEUTLICH zurück gegangen :).

    ABER nun tritt bei uns ein neues Problem auf:
    Auf unsere Webseite wird im Kontaktformular beim Senden der Fehler „SMTP Server hat keine Authentifizierungsmethoden übermittelt“ angezeigt.

    Woran könnte dies liegen?
    (unser System ubuntu 14.04 mit plesk 17.5.3)

    • Cheech says:

      Hi,
      erstmal danke für den Kommentar 🙂
      Schau mal in der Postfix config ob da auch 127.0.0.1 drin steht bei
      mynetworks =
      Dadurch werden Lokale Emails einfach durch gewunken.

      Gruß
      DocSchneidi

      • Olli says:

        Hallo,

        danke für die schnelle Antwort und danke für den Tip.
        Unser Kontaktformular sendet wieder. Es lag jedoch aber auch noch daran, dass unser php-Formular aus einer eher ruhigen Zeit des Internets stammt wo noch nicht der Wahnsinn der SICHERHEIT, BDSG, DSGVO, etc herrschte.

        Lösung (php-Kontaktformular):
        Wir haben „tls://“ vor dem Host eingefügt, den Port angepasst und TaaDaa…
        SMTP Host –> „tls://meinmailserver.tld“
        SMTP Port –> „465“

        Nochmals vielen DANK
        mit besten Grüßen, Olli

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.