solip.de
Intel Channel Partner
Lancom Reseller

SMTP-Auth mit TLS und POP3 sowie IMAP mit TLS via Courier für Exim4 auf debian 5.0 (Lenny)

Erstellt von solip am 16. März 2010

Als größere Variante zur Einrichtung von Exim4 mit SMTP-Auth und TLS hier eine Anleitung, wie basierend auf der Exim4 Installation SMTP-Auth mit TLS und Postfachzugriff via POP3 und IMAP (beides auch mit TLS) eingerichtet werden kann.

Unterstützt werden damit die folgenden Protokolle: SMTP, SSMTP mit Authentifizierung, POP3, POP3S, IMAP2, IMAPS.

Exim4 als Standard Mail Transport Agent (MTA) von debian kommt in zwei Varianten: light und heavy. Die Variante Heavy lässt sich gut für mehr als nur lokale Mailzustellung ausbauen. Zunächst mal muss das evtl. benutzte light-Paket von Exim4 gegen die heavy-Variante getauscht werden. Dies ist jederzeit ohne Änderungen an der Konfiguration möglich.

aptitude install exim4-daemon-heavy

Dann installiert man einige Pakete nach, die für das Setup ingesamt erforderlich sind.

aptitude install courier-authdaemon courier-imap courier-imap-ssl courier-pop courier-pop-ssl swaks libnet-ssleay-perl ssl-cert

Der Ablauf von Authentifizierungen sieht mit diesem Setup so aus: Connection -> Exim4 -> Courier -> System (PAM). Die Benutzer sind also lokale Benutzer und sie stehen in Ressourcen wie /etc/passwd, /etc/group, und /etc/shadow.

Damit die Benutzer zukünftig auch eine Ordnerstruktur für E-Mail haben, legen wir eine solche für neue Benutzer-Accounts fest. maildirmake erstellt die Struktur in /etc/skel.

maildirmake /etc/skel/Maildir

Bestehende Benutzer ohne Ordnerstruktur für E-Mail können die Ordner wie folgt hinzugefügt bekommen:

maildirmake ~/Maildir

Es empfiehlt sich Benutzer auch in Gruppen zu sortieren. Z.B. E-Mail Benutzer, Benutzer mit gültiger Shell.. die Ordnung sollte hergestellt werden bevor man viele Benutzer anlegt. Dieses Beispiel nimmt unsere Firmen-Gruppe „solip“ für diesen Zweck. Alle Benutzer darin haben keinen Shell-Zugriff, aber ein Postfach.

groupadd solip
useradd -g solip -s /bin/false -d /home/demouser demouser

Benutzer können später auch noch in jedem Punkt mit dem Befehl usermod geändert werden.

An den Einstellungen von Courier muss nichts geändert werden. Jedoch benötigt man eine Änderung an den Zertifikaten für POP3S und IMAPS:

rm -rf /etc/courier/*.pem
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/courier/imapd.pem
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/courier/pop3d.pem

Optional, falls die Authentifizierung später nicht funktioniert, muss noch folgende Änderung gemacht werden:

chmod 755 /var/run/courier/authdaemon

Nun prüft man ob die Services laufen:

netstat -utal | egrep -e 'pop|imap'

Die Ausgabe sollte so aussehen:

tcp6 0 0 [::]:imaps [::]:* LISTEN
tcp6 0 0 [::]:pop3s [::]:* LISTEN
tcp6 0 0 [::]:pop3 [::]:* LISTEN
tcp6 0 0 [::]:imap2 [::]:* LISTEN

Nun prüft man den IMAP Server samt Login interaktiv:

telnet localhost imap2
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2008 Double Precision, Inc. See COPYING for distribution information.
AB LOGIN "root" "CHANGE"
AB OK LOGIN Ok.
BC SELECT "Inbox"
* FLAGS ($MDNSent NonJunk $Forwarded $label1 $label2 \Draft \Answered \Flagged \Deleted \Seen \Recent)
* OK [PERMANENTFLAGS ($MDNSent NonJunk $Forwarded $label1 $label2 \* \Draft \Answered \Flagged \Deleted \Seen)] Limited
* 190 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1205133440] Ok
* OK [MYRIGHTS "acdilrsw"] ACL
BC OK [READ-WRITE] Ok
ZZZZ LOGOUT
* BYE Courier-IMAP server shutting down
ZZZZ OK LOGOUT completed
Connection closed by foreign host.

Nun zu Exim4. Wir generieren ein X.509 Zertifikat für die Verschlüsselung. Exim4 hat dafür sein eigenes Tool und entsprechende Passagen in der Anleitung.

bash /usr/share/doc/exim4-base/examples/exim-gencert

Dies generiert uns Zertifikat und Key in /etc/exim4.

Nun ist die Exim4-Konfiguration für TLS anzupassen. Dazu fügen wir gem. Dokumentation ein:

2.1.3. Using Exim Macros to control the configuration" and "2.2.2. Enabling TLS support for Exim as server" from /usr/share/doc/exim4-base/README.Debian.gz, you should create a file with name /etc/exim4/conf.d/main/000_localmacros (split configuration) or /etc/exim4/exim4.conf.localmacros (non-split configuration), and insert lines as following:
#####################################################
### main/03_exim4-config_tlsoptions
#####################################################
MAIN_TLS_ENABLE = true
tls_on_connect_ports = 465

An gleicher Stelle kann auch noch bestimmt werden ob SMTP-AUTH verschlüsselt erfolgen muss oder nicht. Standard ist auch unverschlüsselt zugelassen.

auth_advertise_hosts = ${if eq{$tls_cipher}{}{}{*}}

Ermöglicht nur verschlüsselten Verbindungen SMTP-AUTH zu benutzen.

Da wir gerne möchten das Exim4 uns SMTP verschlüsselt am dafür üblichen Port 465 zur Verfügung stellt, bearbeiten wir auch /etc/default/exim4 wie folgt:

# options for daemon listening on port 25
SMTPLISTENEROPTIONS='-oX 465:25 -oP /var/run/exim4/exim.pid'

Nun müssen in der Sektion authenticators in der Exim4 Konfiguration PLAIN und LOGIN wie folgt aussehen. Anpassen oder ersetzen ist hier möglich.


plain_courier_authdaemon:
driver = plaintext
public_name = PLAIN
server_condition = \
${extract {ADDRESS} \
{${readsocket{/var/run/courier/authdaemon/socket} \
{AUTH ${strlen:exim\nlogin\n$auth2\n$auth3\n}\nexim\nlogin\n$auth2\n$auth3\n} }} \
{yes} \
fail}
server_set_id = $auth2
.ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}
.endif

login_courier_authdaemon:
driver = plaintext
public_name = LOGIN
server_prompts = Username:: : Password::
server_condition = \
${extract {ADDRESS} \
{${readsocket{/var/run/courier/authdaemon/socket} \
{AUTH ${strlen:exim\nlogin\n$auth1\n$auth2\n}\nexim\nlogin\n$auth1\n$auth2\n} }} \
{yes} \
fail}
server_set_id = $auth1
.ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}
.endif

Ggf. ist Exim4 noch zu konfigurieren. Dies kann jederzeit mittels dpkg-reconfigure exim4-config durchgeführt werden. Wichtige Punkte sind:

  • Split configuration into small files?: No
  • System Mail Name: Gleicher wie beim Zertifikat und in der Systemkonfiguration
  • Delivery method for local mail: Maildir format in home directory

Nun prüft man ob die SMTP Services wie gewünscht laufen.

netstat -utal | egrep -e 'smtp|ssmtp'

Die Ausgabe sollte in etwa so aussehen:

tcp 0 0 *:ssmtp *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp6 0 0 [::]:ssmtp [::]:* LISTEN
tcp6 0 0 [::]:smtp [::]:* LISTEN

Nun kann man ein mal probieren sich selbst eine E-Mail zu senden und auch eine an eine externe Adresse:

echo "test" | mail -s "test" root
echo "test" | mail -s "test" test@domain.de

Die Exim4 Logdatei /var/log/exim4/mainlog gibt Aufschluss darüber ob alles richtig läuft.

Nun prüft man ob TLS aktiv ist:

swaks -a -tls -q HELO -s localhost -au root -ap '<>'

Und ob Authentifizierung mittels TLS ebenfalls läuft (bitte Kennwort eingeben):

swaks -a -tls -q AUTH -s localhost -au root

Nun ist noch Exim4 mittels /etc/init.d/exim4 restart neu zu starten sowie die Logs und die Funktion zu prüfen.

Abgelegt unter debian GNU/Linux | Keine Kommentare »

SMTP-Auth und TLS für Exim4 auf debian 5.0 (Lenny)

Erstellt von solip am 10. März 2010

Exim4 als Standard Mail Transport Agent (MTA) von debian kommt in zwei Varianten: light und heavy. Die Variante Heavy lässt sich gut für mehr als nur lokale Mailzustellung ausbauen. Sie bietet unter anderem von Haus aus Authentifizierung gegen /etc/passwd und /etc/shadow.

Hier eine kleine Anleitung um SMTP-Authentifizierung einzuführen und TLS-Transportverschlüsselung zu nutzen.

Zunächst mal muss das evtl. benutzte light-Paket von Exim4 gegen die heavy-Variante getauscht werden. Dies ist jederzeit ohne Änderungen an der Konfiguration möglich.

aptitude install exim4-daemon-heavy

Dann generieren wir ein X.509 Zertifikat für die Verschlüsselung. Exim4 hat dafür sein eigenes Tool und entsprechende Passagen in der Anleitung.

bash /usr/share/doc/exim4-base/examples/exim-gencert

Dies generiert uns Zertifikat und Key in /etc/exim4.

Nun ist die Exim4-Konfiguration für TLS anzupassen. Dazu fügen wir gem. Dokumentation ein:

2.1.3. Using Exim Macros to control the configuration" and "2.2.2. Enabling TLS support for Exim as server" from /usr/share/doc/exim4-base/README.Debian.gz, you should create a file with name /etc/exim4/conf.d/main/000_localmacros (split configuration) or /etc/exim4/exim4.conf.localmacros (non-split configuration), and insert lines as following:
#####################################################
### main/03_exim4-config_tlsoptions
#####################################################
MAIN_TLS_ENABLE = true
tls_on_connect_ports = 465

An gleicher Stelle kann auch noch bestimmt werden ob SMTP-AUTH verschlüsselt erfolgen muss oder nicht. Standard ist auch unverschlüsselt zugelassen.

auth_advertise_hosts = ${if eq{$tls_cipher}{}{}{*}}

Ermöglicht nur verschlüsselten Verbindungen SMTP-AUTH zu benutzen.

Da wir gerne möchten das Exim4 uns SMTP verschlüsselt am dafür üblichen Port 465 zur Verfügung stellt, bearbeiten wir auch /etc/default/exim4 wie folgt:

# options for daemon listening on port 25
SMTPLISTENEROPTIONS='-oX 465:25 -oP /var/run/exim4/exim.pid'

Damit Exim4 auch gegen die lokalen Benutzer authentifizieren kann, braucht der Daemon Zugriff auf /etc/shadow. Dazu müssen die Rechte geändert werden so das Exim4, welches als User Debian-exim und Gruppe Debian-exim (Schreibweise beachten) läuft, auch darauf zugreifen kann.

chgrp Debian-exim /etc/shadow
chmod g+r /etc/shadow

Nun müssen in der Sektion authenticators in der Exim4 Konfiguration PLAIN und LOGIN wie folgt aussehen. Anpassen oder ersetzen ist hier möglich.

plain:
driver = plaintext
public_name = PLAIN
server_prompts = :
server_set_id = $2
server_condition = "${if pam{$2:$3}{1}{0}}"

login:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
server_set_id = $1
server_condition = "${if pam{$1:$2}{1}{0}}"

Nun ist noch Exim4 mittels /etc/init.d/exim4 restart neu zu starten sowie die Logs und die Funktion zu prüfen.

Abgelegt unter debian GNU/Linux | 1 Kommentar »