Postfix - Mail Transfer Agent

Aus ITNoobz Wiki
Wechseln zu: Navigation, Suche

Postfix ist ein Mail Transfer Agent, mit dem es möglich ist Mails zu verschicken und zu empfangen.

Inhaltsverzeichnis

Vorraussetzungen

Ihr braucht für unseren perfekten Mailserver folgende (Ubuntu-)Pakete:

  1. postfix
  2. libsasl2-modules (für die verwendung eines Smarthost)
  3. bsd-mailx (um via "mail"- Befehl emails zu versenden)

Installation

Ubuntu 12.04

sudo apt-get install postfix libsasl2-modules bsd-mailx

Konfiguration

Der Postfix Mailserver wird traditionell über Konfigurationsdateien konfiguriert. die beiden wichtigen hierbei sind:

/etc/postfix/main.cf
/etc/postfix/master.cf

in der main.cf wird der Postfix konfiguriert und über die master.cf werden die Kommunikationswege beschrieben,

Allgemein

Allgemein sollten in der main.cf einige Informationen über den Server stehen.

myorigin = example.org

Im Grunder der Domainname des Servers. Diese Angabe ist eher Debian-Spezifisch.

mydomain = $myorigin

Domainname des Servers

myhostname = smtp.$mydomain

Hostname des Mailservers, traditionell wird hierbei smtp vor die Domain gesetzt.

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

Die Alias-Adressen für den Mailserver. Beispielsweise sollte stehts ein Alias für Postmaster und Root eingetragen werden, aber dazu später mehr.

mydestination = localhost, localhost.$mydomain, $myhostname, $mydomain

Dies legt die Adressen fest, für die sich der SMTP-Server verantwortlich fühlt. Hiermit wird verhindert, dass sich der Server als jemand ausgibt, der er nicht ist.

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

Legt fest, von wo aus der SMTP-Server emails zum Versandt annimmt. Hier sollten auf keinen fall weitere Adressbereiche angegeben werden, sondern eine Authentifizierung verlangt werden, um ein offenes Relay für Spammer zu vermeiden.

mailbox_command = /usr/lib/dovecot/deliver

Hiermit weisen wir Postfix an, lokale Emails nicht selbst zu verteilen, sondern an Dovecot weiterzuleiten. Dovecot kümmert sich dann um die lokale Zustellung der Nachrichten.

recipient_delimiter = +

Legt die Unterteilung der Empfänger fest.

inet_interfaces = all

Sorgt dafür, dass Postfix auf allen Interfaces lauscht.

Authentifizierung am Smarthost

Da wir nur eine dynamische IP-Adresse besitzen und unser Server relativ unbekannt ist, könnte er von vielen Domains als Spammer erkannt werden. Um dies zu vermeiden haben wir einen Relayserver bei unserem DynDNS Anbieter bestellt und verwenden diesen nun mit folgenden Einträgen in die main.cf

relayhost = mail.selfhost.de:587
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noplaintext noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password

Somit versendet unser Mailserver die Emails nicht direkt, sondern gibt alle zuerst an unseren Smarthost-Provider über eine sichere Verbindung weiter. Jetzt müssen wir nur noch die Logindaten am Smarthost in die Datei

/etc/postfix/sasl_password

eintragen.

mail.selfhost.de:587 [email protected]:GanzGeheimesPasswort

Hierbei ist mail.selfhost.de unser Relayserver, den wir über den Port 587 mit dem Loginnamen [email protected] und dem Passwort GanzGeheimesPasswort ansprechen.

Authentifizierung als Server

Da wir keine Emails von externen Quellen versenden, müssen sich externe Clients bei unserem SMTP-Server authentifizieren. Dies läuft bei unserem perfekten Mailserver über unseren IMAP-Server Dovecot. Schließlich muss man ja nicht an 10 verschiedenen Stellen eine Authentifizierung einrichten, sondern kann alles von einer Stelle übernehmen lassen.

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, 
                                         reject_invalid_hostname, reject_unauth_pipelining, reject_non_fqdn_hostname

Hiermit fragt Postfix bei jeder Verbindung bei Dovecot nach, ob der Anfragende Benutzer authentifiziert ist. Außerdem werden unerwünschte Destinations gefiltert.

TLS Parameter als Sender

Wenn man seine Emails verschlüsselt versenden möchte, kann man mit den folgenden Konfigurationsparametern in der main.cf eine verschlüsselte Übertragung anbieten. Dabei wird jedoch nur verschlüsselt, wenn der Ziel-Server dies auch anbietet, ansonsten wird die Email unverschlüsselt übertragen. Dies sollte an dieser Stelle auch nicht erzwungen werden, da man sich nicht sicher sein kann, dass Alle Mailserver im Internet eine Verschlüsselung anbieten.

smtp_tls_cert_file=/etc/ssl/certs/example.org.crt
smtp_tls_CAfile=/etc/ssl/certs/sub.class1.server.ca.pem
smtp_tls_key_file=/etc/ssl/private/example.org.key
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Das CAfile trägt dazu bei, dass der Zertifikatsaussteller gefunden werden kann. Unser Zertifikat example.org ist natürlich unbekannt, das Zertifikat sub.class1.server.ca wurde dabei von unserem CA erstellt und ist im besten fall global bekannt.

TLS Parameter als Server

Um auch den Clients, wie z.B. Handy´s oder Programmen wie Outlook und Thunderbird, eine verschlüsselte Kommunikation anzubieten, benötigen wir folgende Konfigurationsparameter in der main.cf.

smtpd_tls_cert_file=/etc/ssl/certs/example.org.crt
smtpd_tls_CAfile=/etc/ssl/certs/sub.class1.server.ca.pem
smtpd_tls_key_file=/etc/ssl/private/example.org.key
smtpd_tls_security_level=may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

Das CAfile trägt dazu bei, dass der Zertifikatsaussteller gefunden werden kann. Unser Zertifikat example.org ist natürlich unbekannt, das Zertifikat sub.class1.server.ca wurde dabei von unserem CA erstellt und ist im besten fall global bekannt.

Um auch das ältere SSMTP über den Port 465 anzubieten und Berechtigungsprobleme bei der Authentifizierung zu umgehen, müssen wir in der master.cf folgende Zeilen auskommentieren, hinzufügen oder anpassen:

smtp      inet  n       -       n       -       -       smtpd
smtps    inet  n       -       n       -       -       smtpd
 -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes

Amavis Spam Virenfilter

Um den Amavis Spam Virenfilter in Postfix zu integrieren müssen wir nur folgende Zeile in die main.cf einfügen:

content_filter=smtp-amavis:[127.0.0.1]:10024

Nun müssen wir aber Postfix noch beibringen, wie er mit Amavis reden soll. Um den Hin- und Rückweg zu ermöglichen, tragen wir in die master.cf noch folgende Zeilen ein:

smtp-amavis     unix    -       -       -       -       2       smtp
       -o smtp_data_done_timeout=1200
       -o smtp_send_xforward_command=yes
       -o disable_dns_lookups=yes
       -o max_use=20
127.0.0.1:10025 inet    n       -       -       -       -       smtpd
       -o content_filter=
       -o local_recipient_maps=
       -o relay_recipient_maps=
       -o smtpd_restriction_classes=
       -o smtpd_delay_reject=no
       -o smtpd_client_restrictions=permit_mynetworks,reject
       -o smtpd_helo_restrictions=
       -o smtpd_sender_restrictions=
       -o smtpd_recipient_restrictions=permit_mynetworks,reject
       -o smtpd_data_restrictions=reject_unauth_pipelining
       -o smtpd_end_of_data_restrictions=
       -o mynetworks=127.0.0.0/8
       -o smtpd_error_sleep_time=0
       -o smtpd_soft_error_limit=1001
       -o smtpd_hard_error_limit=1000
       -o smtpd_client_connection_count_limit=0
       -o smtpd_client_connection_rate_limit=0
       -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

und unmittelbar hinter die Zeile mit dem Dienst Pickup

       -o content_filter=
       -o receive_override_options=no_header_body_checks

Ab nun werden alle Nachrichten die unser Server annimmt und alle die wir versenden wollen, zuvor an Amavis übergeben und auf Viren bzw. Spam überprüft.

Aliase

Prinzipiell sollte man ein paar grundlegende Aliasse in die Datei

/etc/aliases

eintragen. hier ein paar Beispiele:

postmaster:     adminname
clamav:         adminname
root:           adminname
no-reply:       /dev/null

Dadurch werden alle Emails an postmaster, clamav und root an den lokalen Serveradmin weitergeleitet und Nachrichten an die Adresse: [email protected] werden weggeworfen.

Ports

Um eine Kommunikation zu ermöglichen müssen noch einige Vorbereitungen getroffen werden. Folgende Ports müssen sowohl über eine eventuelle Firewall, als auch über den lokalen Router geöffnet werden.

Port Beschreibung
25 SMTP-Versandt, unverschlüsselt. Wird von jedem Server unterstützt und muss umbedingt geöffnet werden. Wenn dieser Port geschlossen ist, kann euer Server keine Emails empfangen!
465 SMTP-Versandt über SSL, verschlüsselt aber veraltet. Eigentlich die sicherste Methode um den Versandt abzusichern, da hierbei zu aller erst Verschlüsselt wird.
587 SMTP-Versandt über TLS, verschlüsselt und derzeit Standard.

Der Perfekte Mail Server

  1. DynDNS Domain
  2. SMTP Relay
  3. Mailspool
  4. SSL Zertifikat
  5. Postfix - Mail Transfer Agent
  6. Amavis Spam Virenfilter
  7. Dovecot - Mail Delivery Agent
  8. Dovecot - Sieve Plugin
  9. Fetchmail - Mail Retrieval Agent
  10. MySQL - Datenbank
  11. PHP - Skriptsprache
  12. Perl - Skriptsprache
  13. Apache - Weberver
  14. phpMyAdmin
  15. Roundcube Webmail
  16. Roundcube Webmail - ManageSieve Plugin
  17. Roundcube Webmail - Fetchmail Plugin
  18. Roundcube Webmail - password Plugin
  19. Roundcube Webmail - Fail2Ban Plugin
  20. Fail2Ban
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Navigation
Werkzeuge