Mail-Server mit postfix

m Folgenden möchte ich nun eine Alternative zu sendmail vorstellen. Zum einen werden in sendmail ständig neue Sicherheitslöcher entdeckt (und natürlich auch behoben), zum anderen ist die Konfiguration wirklich kompliziert.

Ziel ist es, postfix so einzurichten, dass es als Ersatz für sendmail dienen kann. Dabei soll die Funktionalität nicht schlechter sein. Der Dienst wird also so eingerichtet, dass Nutzer sich authentifizieren müssen, um Emails zu versenden und dass postfix sich auch bei anderen Servern authentifzieren kann.

Dazu benötigen wir die Cyrus-SASL-Bibliothek, die wir auf unsere Bedürfnisse zuschneiden.

tar xfj cyrus-sasl-2.1.12.tar.bz2
cd cyrus-sasl-2.1.12
./configure --enable-login --disable-krb4 --disable-gssapi --enable-anon --enable-plain --enable-digest --disable-sample
make
make install

Man achte darauf, dass unbedingt die Authentifizierungsmethode PLAIN aktiviert ist, weil die meisten Mailserver nur diese Methode unterstützen.

Email-Nutzer anlegen

Nun können wir Nutzerdaten in die Authentifizierungsdatenbank hinterlegen.

saslpasswd2 -c <user>
sasldblistusers2

Nun wird postfix mit SASL-Unterstützung installiert.

tar xfj postfix-2.0.9.tar.bz2
cd postfix-2.0.9
make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include/sasl2" AUXLIBS="-lsasl2"
make
groupadd -g 82 postgroup
useradd -u 82 -g 82 -d /usr/local/libexec/postfix -s /bin/false postdrop
postdrop:x:83:79:Postfix:/usr/libexec/postfix:/bin/false
make install

Fast die gesamte Konfiguration findet in der Datei /etc/postfix/main.cf statt. Diese Datei ist sehr gut dokumentiert, so dass ich hier nur explizit auf einige spezielle Sachen eingehen werde. Auch dazu stehen einige Kommentare in der Hauptkonfigurationsdatei.

In /etc/postfix/sasl_passwd hinterlegt man die Anmeldedaten für den ausgehenden Mailverkehr.

mailserver        Nutzer:Password

#for example:
#mail.epost.de    laas:MyPassword

Ein abschließendes

postmap sasl_passwd

erzeugt eine für postfix lesbare Datenbank. Analog verfährt man mit /etc/postfix/sender_canonical. Auch hier bitte am Ende den postmap Befehl benutzen, andernfalls ignoriert postfix die Modifikationen.

#
# map outgoing sender addresse from foo to bar@domain.com:
# foo                bar@domain.com
#
root                 laas@laas.de
laas                 webmaster@laas.de

Mein postfix zu Hause ist so eingestellt, dass es erst Mails raussendet, wenn der Rechner online ist. Dazu werden in der Datei /etc/ppp/ip-ip die beiden Befehle im Startblock hinzugefügt:

/usr/local/sbin/postconf -e "defer_transports ="
/usr/local/sbin/postfix reload

Virtuelle Domains

Um virtuelle Domains zu hosten, erstellt man eine Datei namens /etc/postfix/virtual. Sie enthält zum einen die virtuellen Domains (gekennzeichnet durch einen Domainnamen), zum anderen die Zuordnungen der Emailadressen zu den Nutzern. Hierbei gilt, dass @domain   User alle Emails an die Domain dem lokalen Nutzer User zugestellt werden. Dies bezeichnet man auch als Sternchenkonto. Einzelne Emailadressen können natürlich auch einem Nutzer zugewiesen werden. So kann man explizit einige Emails herausfiltern. Wenn man die Datei editiert, muss man nach jeder Änderung

postmap virtual

aufrufen, um die Datenbank erneut zu erzeugen. Entweder man startet danach postfix neu, oder wartet einige Minuten, bis postfix die Änderungen bemerkt. Wichtig: Postfix interpretiert leere Zeilen und ignoriert alle Angaben unter den Leerzeilen.

tactical-strike.de    mig
@tactical-strike.de   mig
laas.de               laas
ebay@laas.de          ebay
@laas.de              laas

In der Hauptkonfigurationsdatei muss man schließlich noch die Zeilen einfügen bzw. auskommentieren, damit postfix die virtuellen Domains unterstützt.

virtual_maps = hash:/etc/postfix/virtual
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_alias_domains = $virtual_alias_maps

Blocken einzelner Empfängeradressen

Um einzelne Adressen, z.B. bei massiven Spamempfang zu blocken, verwendet man sogenannte Blacklists. Diese werden in den smtpd-Option aktiviert. Dazu modifiziert man die Zeile

smtpd_recipient_restrictions =
 check_recipient_access hash:/etc/postfix/blacklist_recipients,
 permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination

In der Datei /etc/postfix/blacklist_recipients listet man die Adressen auf, deren Empfang man generell ablehnen möchte.

sales@tactical-strike.de        REJECT

Nach einer Änderung muss die Datenbank neu erzeugt werden.

postmap blacklist_recipients