media-scientific - IT Blog

the backend developers blog
   

Email-Server auf Ubuntu: Postfix, dovecot und policyd-weight

November 29th, 2007 by admin

Einen Webserver zu Installieren ist alles andere als trivial. Da ich nun einen guten Tag für die Konfigurationen gebraucht habe, veröffentliche ich nachfolgend die gemachten Schritte.

Ziel ist es, Emails per pop3 und imap über ein Programm wie “Thunderbird” Emails senden und empfangen zu können. Ich brauchte nur wenige Email-Adressen einzurichten, weshalb ich auf den Einsatz einer Datenbank verzichtet habe.

Eine sehr sehr gute Hilfe ist unter http://holl.co.at/howto-email/ zu finden.
Weitere Quellen waren:

* http://www.tuxj0b.de/HOWTO_Mailserver_mit_Postfix_Dovecot_
Antispam_und_PostgreSQL_Backend
* http://forum.ubuntuusers.de
* http://wiki.dovecot.org/GermanVersion
* http://www.unixwitch.de/de/sysadmin/tools/postfix
* http://johnny.chadda.se
/2007/04/15/mail-server-howto-postfix-and-dovecot-with-mysql-and-tlsssl-postgrey-and-dspam/

Achtung: Durch fehlerhafte Konfigurationen ermöglichen Sie Spammern, Emails über Ihren Server zu versenden! Achten Sie also darauf, dass Sie alle Konfigurationspunkte verstehen und wissen was da passiert. Ich gebe keine Garantie auf die Richtigkeit meiner Angaben!

Beginnen Sie mit der Installation der benötigten Komponenten:

apt-get install postfix policyd-weight dovecot-imapd dovecot-pop3d

Sind alle Programme installiert, kann mit der Konfiguration begonnen werden.

Die wichtigsten Konfigurationsdateien sind in folgenden Verzeichnissen zu finden:

#Postfix conf:
/etc/postfix/main.cf

#dovecot conf:
/etc/dovecot/dovecot.conf

Insgesamt wird die Konfiguration für zwei Top Level Domains durchgeführt.
In der Konfigurationsdatei von postfix werden die folgenden Daten eingetragen (/etc/postfix/main.cf):

myhostname = domain.com
mydomain = domain.com

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, $mydomain

smtpd_banner = $myhostname ESMTP Mailserver
mailbox_size_limit = 11240000
message_size_limit = 10240000

smtpd_helo_required = yes
smtpd_helo_restrictions = reject_invalid_hostname
smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain,
permit_sasl_authenticated, reject_unauth_destination
smtpd_sender_restrictions = reject_unknown_address
smtpd_client_restrictions = reject_invalid_hostname
strict_rfc821_envelopes = yes
home_mailbox = mails/

smtpd_tls_cert_file = /etc/postfix/mail.cert
smtpd_tls_key_file = /etc/postfix/mail.key
smtpd_use_tls = yes
smtpd_enforce_tls = no
smtpd_tls_auth_only = yes

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
smtp_sasl_auth_enable = no
broken_sasl_auth_clients = yes

virtual_alias_domains = andere-domain.de
virtual_alias_maps = hash:/etc/postfix/virtual_domains
virtual_mailbox_limit = 10240000
check_policy_service inet:127.0.0.1:12525
Jetzt brauchen wir noch die hier angegebene Zertifikate unter /etc/postfix:

#/etc/postfix > openssl genrsa -out mail.key 2048 &&
openssl req -new -key mail.key -out mail.csr &&
openssl x509 -req -days 4312 -in mail.csr -out mail.cert -signkey mail.key

Bei der Abfrage nach Common Name (CN) muss der schon oben genannte Hostname angegeben werden “domain.com”

Dovecot muss nur an wenigen Stellen angepasst werden /etc/dovecot/dovecot.conf:

protocols = imap pop3
ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem
disable_plaintext_auth = yes
mail_location = maildir:%h/mails
auth default {

mechanisms = plain

userdb passwd {
}

passdb shadow {
}

user = root

socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
pop3_uidl_format = %08Xu%08Xv

Die Zertifikate unter ssl/certs werde wärend der Installation angelegt. Wenn jedoch der verwendete Host nicht in der /etc/hosts genannt wird, müssen (bzw. sollten) diese Zertifikate nochmal erstellt werden. (Wieder mit dem richtigen Hostnamen).
Sie können den Verweis in der Konfigurationsdatei natürlich dem entsprechend anpassen, um einen anderen Pfad zu wählen.

Erstellen Sie also den Schlüssel und das Zertifikat in einem Verzeichnis Ihrer wahl:

openssl genrsa 1024 > mycert-key.pem
chmod 400 mycert-key.pem
openssl req -new -x509 -nodes -sha1 -days 365 -key mycert-key.pem > mycert-cert.pem

Ist auch dies geschafft, ist noch policyd-weight zu Konfigurieren. Unter /etc/policyd-weight.conf sollten die folgenden Werte mit den default-Werten ersetzt werden:

$MAXDNSBLHITS = 3;
$MAXDNSBLSCORE = 10;

Jetzt werden erstmal 2 Benutzer angelegt, die Emailaccounts erhalten sollen:
adduser udo
adduser otto

Jeder Benutzer, der eine Emailadresse unter der Host-Adresse hat, bekommt einen Eintrag in der /etc/aliases. Udo will die Adressen webmaster@domain.com erhalten, und Otto will unter otto.pc@domain.com seine Emails erhalten:

webmaster: udo
otto.pc: otto

Der Aufbau der Datei entspricht also dem “vorderen Teil” der Adresse und dem Benutzernamen nach einem Doppelpunkt.

Merke:
Nach jeder Änderung in der /etc/aliases muss ein postalias /etc/aliases ausgeführt werden:

postalias /etc/aliases

Die virtuellen Domains werden in der Datei /etc/postfix/virtual_domains eingetragen. Udo möchte hier die Adresse “udo.it@andere-domain.de”, was wie folgt aussehen würde:
udo.it@andere-domain.de udo

Mehrere Werte werden einfach unter einander geschreiben.

Merke:
auch hier muss nach jeder Änderung der Datei der folgende Befehl ausgeführt werden:

postmap /etc/postfix/virtual_domains

Nun sollte alles funktionstüchtig konfiguriert sein und die Programme können gestartet werden:

/etc/init.d/policyd-weight start
/etc/init.d/postfix start
/etc/init.d/dovecot start

Sollte es eine Fehlermeldung geben, weil eines der Programme schon läuft, sollte ein reload oder restart (je nach tool) statt dem start angegeben werden.

Jetzt die Frage: “Läuft auch alles?”
ps -ela

Zeigt alle aktuellen Prozesse. Wichtig ist hier mal zu kontrollieren, ob alle Prozesse auch auftauchen wie sie sollten.

Weiter lohnt sich auch der Blick ins Logifle unter /var/log/mail.log.

Testen können Sie die Funktionsweise einmal mit Telnet … oder gleich mit einem Emailclient wie Thunderbird. Wenn keine Fehler in den Logfiles aufgetaucht sind, sollte auch alles gut funktionieren
Fehlerbehebung:

Die Fehler die mir während der Installation untergekommen sind, stelle ich hier mit der jeweiligen Lösung dar.

* Beschreibung: Nach dem Start von policyd-weight:

/usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /usr/local/bin/policyd-weight line 69.
BEGIN failed–compilation aborted at /usr/local/bin/policyd-weight line 69.
Ursache:
Hier fehlt wahrscheinlich ein Paket welches noch zu installieren ist.Lösung:
Fehlendes Paket nachinstallieren.
* Beschreibung:
“User polw doesn’t exist! at /usr/local/bin/policyd-weight line 907″Ursache:
Entweder ein Fehler bei der Installation oder fehlender User policyd-weight!Lösung:
Den User polw mit “adduser” nachinstallieren. Achten Sie darauf, dass es sich nicht um einen User handelt, der ein Homeverzeichnis braucht oder sich einloggen muss.
* Beschreibung:
Nach der Eingabe von telnet localhost 25 folgt die folgende Fehlermeldung:
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
Connection closed by foreign host.
Im Logfile erscheint dabei diese Ausgabe:
Nov 26 14:41:54 server postfix/smtpd[26426]: warning: database /etc/aliases.db is older than source file /etc/aliases
Nov 26 14:41:54 server postfix/smtpd[26426]: warning: SASL: Connect to private/auth failed: No such file or directory
Nov 26 14:41:54 server postfix/smtpd[26426]: fatal: no SASL authentication mechanisms
Nov 26 14:41:55 server postfix/master[26421]: warning: process /usr/lib/postfix/smtpd pid 26426 exit status 1
Nov 26 14:41:55 server postfix/master[26421]: warning: /usr/lib/postfix/smtpd: bad command startup — throttling
Nov 26 14:46:06 server postfix/smtpd[27073]: warning: database /etc/aliases.db is older than source file /etc/aliases
Nov 26 14:46:07 server postfix/smtpd[27073]: warning: SASL: Connect to private/auth failed: No such file or directory
Nov 26 14:46:07 server postfix/smtpd[27073]: fatal: no SASL authentication mechanisms
Nov 26 14:46:08 server postfix/master[26421]: warning: process /usr/lib/postfix/smtpd pid 27073 exit status 1
Nov 26 14:46:08 server postfix/master[26421]: warning: /usr/lib/postfix/smtpd: bad command startup — throttling
Nov 26 14:47:08 server postfix/smtpd[27168]: warning: database /etc/aliases.db is older than source file /etc/aliases
Nov 26 14:47:08 server postfix/smtpd[27168]: warning: SASL: Connect to private/auth failed: No such file or directory
Nov 26 14:47:08 server postfix/smtpd[27168]: fatal: no SASL authentication mechanisms
Nov 26 14:47:09 m33s14 postfix/master[26421]: warning: process /usr/lib/postfix/smtpd pid 27168 exit status 1
Nov 26 14:47:09 m33s14 postfix/master[26421]: warning: /usr/lib/postfix/smtpd: bad command startup — throttling Ursache:
Der Pfad in der Konfigurationsdatei von postfix weicht von dem in /etc/dovecot/dovecot.conf beim Punkt smtpd_sasl_path ab.Lösung:
Pfad abändern.
* Beschreibung:
Dovecot startet nicht!

Nov 26 20:49:39 mserv dovecot: Dovecot v1.0.beta3 starting up
Nov 26 20:49:40 mserv dovecot: Auth process died too early - shutting down
Nov 26 20:49:40 mserv dovecot: auth(default_with_listener): No user databases set
Nov 26 20:49:40 mserv dovecot: child 23960 (auth) returned error 89
Ursache:
Etwas stimmt nicht in der Konfigurationsdatei von Dovecot!Lösung:
Nochmals genau prüfen!

Leave a Reply

You must be logged in to post a comment.