Spambekämpfung mit Postfix unter Debian (Teil2)

Die Version des Artikels ist veraltet, zur aktuellen Version >> hier <<

Ebenso wichtig wie das Einbinden von Filtermechanismen in einen Maildeamon ist das Verhindern, dass man selbst unwissentlich zum Spammer wird. Im Folgenden soll Postfix so abgesichert werden, dass Mails nur mittels einer Authentifizierung via ssl abgeschickt werden können. Da es viele Möglichkeiten der Authentifizierung über SASL gibt (ldap, mysql, pam, sasldb) und alle ihre Eigenheiten besitzen, gehe ich hier nur auf die Authentifizierung gegen die hauseigene Datenbank von SASL ein.

SASL

Simple Authentication and Security Layer (SASL) ist ein Framework, das von verschiedenen Protokollen zur Authentifizierung im Internet verwendet wird. Es wurde im Oktober 1997 als RFC 2222 definiert und im Juni 2006 durch RFC 4422 ersetzt. SASL bietet dem Applikationsprotokoll damit eine standardisierte Möglichkeit der Aushandlung von Kommunikationsparametern. Im Regelfall wird nur eine Authentifizierungsmethode ausgehandelt, es kann aber auch vereinbart werden, dass zuerst auf ein verschlüsseltes Transportprotokoll, wie beispielsweise TLS, gewechselt wird. Die SASL-Implementierungen auf Client- und Server-Seite einigen sich auf ein Verfahren und dieses kann dann von der Applikation transparent benutzt werden. Durch diesen Standard wird die Entwicklung sicherer Applikationsprotokolle wesentlich vereinfacht. Der Entwickler muss lediglich eine bestehende SASL-Implementierung nutzen anstatt ein komplettes Verfahren zur Authentifizierung und Datenverschlüsselung selbst zu implementieren. SASL wird unter anderem benutzt bei SMTP, IMAP, POP3, LDAP und XMPP. Wikipedia

TLS/SSL

Transport Layer Security (TLS) oder Secure Sockets Layer (SSL) ist ein hybrides Verschlüsselungsprotokoll für Datenübertragungen im Internet. TLS 1.0, 1.1 und 1.2 sind die standardisierten Weiterentwicklungen von SSL 3.0 (TLS 1.0 steht neu für SSL 3.1). SSL wird also nun unter dem Namen TLS weiterentwickelt. Hier wird die Abkürzung SSL für beide Bezeichnungen verwendet. Wikipedia

Als erstes installieren wir alle benötigten Pakete:

#>aptitude install sasl2-bin libsasl2-modules libsasl2 libgsasl7 libauthen-sasl-perl ca-certificates

Nun geht es daran, Postfix so zu konfigurieren, dass der MTA nur Emails von authentifizierten Clients entgegennimmt. Hierzu fügen wir in die /etc/postfix/main.cf:

smtp_sasl_auth_enable = yes
smtpd_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_always_send_ehlo = yes
smtpd_sasl_security_options = noanonymous
relayhost = relayhost.de
broken_sasl_auth_clients = yes

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, check_relay_domains, reject

Zu den Optionen im Einzelnen:

Mit smtp(d)_sasl_auth_enable = yes aktivieren wir die Authentifizierung gegen SASL, sowohl ausgehend als auch eingehend. Mit smtp_always_send_ehlo = yes zwingen wir postfix immer ESMTP konform zu senden. Mit smtpd_sasl_security_options = noanonymous verhindern wir anonyme Anmeldungen. Mit broken_sasl_auth_clients = yes erlauben wir älteren Outlook Clients die Anmeldung. Wenn wir unsere Emails ebenfalls über einen Relayhost mit Authentifizierung schicken wollen, sind nachfolgende Zeilen notwendig:

smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
relayhost = relayhost.de

Dann muss die Datei /etc/postfix/sasl_passwd mit folgendem Inhalt angelegt werden:

relayhost.de username:password

Wobei relayhost.de unser Relayhost ist, über den wir unsere Emails versenden wollen. Danach wird eine neue Map erzeugt: # postmap /etc/postfix/sasl_passwd

Der Parameter smtpd_recipient_restrictions wird so abgeändert, dass unser MTA nur SASL authentifizierte Clients und Clients aus Netzen, die in mynetworks deklariert wurden, akzeptiert. Der Rest wird abgewiesen.

Als nächstes konfigurieren wir je nach Installation SASL. In den meisten Fällen muss die /etc/postfix/sasl/smtpd.conf mit folgendem Inhalt angelegt werden:

pwcheck_method: sasldb

Achtung, wer den saslauthdeamon im Einsatz hat, konfiguriert im SASLauthdeamon, gegen welchen Mechanismus (mysql,pam,shadow,ldap,sasldb) dieser sich authentifiziert und gibt hier:

pwcheck_method: saslauthd

an. Wie man sich gegen LDAP oder MYSQL authentifiziert folgt gesondert. Abschließend Postfix mittels /etc/init.d/postfix force-reload mit der neuen Konfiguration versorgen und das Ganze testen.

User legen wir wie folgt an:

#> saslpasswd2 -c USERNAME

Nachdem wir unserem User ein Passwort verabreicht haben, können wir die SASL Funktion mittels Telnet überprüfen:

#> printf „\0%s\0%s“ username password | base64-encode ; echo

gibt uns den Authentifizierungsstring den wir benötigen, wenn wir uns plain authentifizieren wollen. Nun loggen wir uns in unseren MTA:

#> telnet 127.0.0.1 smtp
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‚^]‘.
220 test.rfc822.org ESMTP Postfix
ehlo test
250-test.rfc822.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN CRAM-MD5
250-XVERP
250 8BITMIME
auth plain <STRING>
235 Authentication successful
quit
221 Bye
Connection closed by foreign host.

SASL funktioniert, nun wir können uns der Verschlüsselung zuwenden.

TLS/SSL

Wenn wir bereits SSL – Zertifikate erworben haben, kopieren wir den öffentlichen nach /etc/ssl/certs/$hostname.pem und den privaten Schlüssel nach /etc/ssl/private/$hostname.key. Solche können beispielsweise hier erworben werden: (CaCert) Vom Gebrauch selber erstellter Schlüssel, die nicht gegen eine Zertifizierungsstelle authorisiert sind, rate ich dringend ab. Auch an dieser Stelle setzen wir TLS eingehend und ausgehend ein.

# serverside TLS
smtpd_tls_cert_file=/etc/ssl/certs/$hostname.pem
smtpd_tls_key_file=/etc/ssl/private/$hostname.key
smtpd_use_tls=yes
smptd_tls_CApath=/etc/ssl/certs
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache

# client-side TLS
smtp_use_tls = yes
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_loglevel = 1
smtp_tls_security_level = may
smtp_tls_cert_file=/etc/ssl/certs/$hostname.pem
smtp_tls_key_file=/etc/ssl/private/$hostname.key
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

Letztlich starten wir postfix durch und schauen uns die Logfiles an. Wenn alles ordnungsgemäß konfiguriert wurde, nutzt Postfix nun SASL und TLS als Schutzmechanismen vor unauthorisertem Gebrauch.