User Tools

Site Tools


exim-und-smtp-authentication-via-imap

EXIM und SMTP Authentication via IMAP

Nachdem der externe Zugriff auf die IMAP Boxen eingerichtet ist, ging es nun darum, wie man den Externen den Mailversand über den öffentlichen Mailserver ermöglichen konnte.

Folgende Dinge sollten dabei erreicht werden:

  1. Der Versand (bzw. das Relaying) sollte von überall aus möglich sein, allerdings nur nach vorheriger SMTP Authentication via RFC 4954.
  2. Die Übertragung der Authentifizierungsinformationen darf nicht im Klartext erfolgen – daher ist TLS Verschlüsselung zu implementieren
  3. Als Authentifizierungdatenbank soll der bestehende IMAP “Userstore” verwendet werden.

Ausgangslage (gleiches Setup wie beim IMAP Proxy Thema)

  1. Debian 6.0 Installation mit konfiguriertem exim4-daemon-light vorhanden (192.168.1.7)
  2. Debian 3.x Installation mit courier-imap vorhanden (172.16.1.9)
  3. exim4 verwendet dc_use_split_config

Diese Anleitung von GitHub (The Perl Solution) war der Ausgangspunkt für das folgende

Kochrezept

  1. Tausch der exim-Installation gegen exim4-daemon-heavy wg. der integrierten Perl Unterstützung
    # aptitude install exim4-daemon-heavy
  2. Zertifikat erzeugen und installieren
    1. Variante 1 – komplett neues Zertifikat:
      # cd /tmp
      # openssl req -new -x509 -newkey rsa:2048 -nodes -out exim.crt -keyout exim.key -days 730
      # mv exim.crt /etc/exim4/
      # mv exim.key /etc/exim4/
    2. Variante 2 – vorhandenes Zertifikate verwenden – dann weiß man eh was zu tun ist
  3. perl.pl aus der Exim-Doku nach /etc/exim4/perl.pl abspeichern
  4. TLS und Perl Funktionen aktivieren – dazu in /etc/exim4/conf.d/main/000_localmacros folgendes eintragen
    MAIN_TLS_ENABLE = yes
    perl_startup = do '/etc/exim4/perl.pl'
    perl_at_start
  5. SMTP-Authentication konfigurieren – dazu folgenden Code als /etc/exim4/conf.d/auth/10_exim4-config_imap speichern (auch das ist de-facto eine 1:1.5 Kopie von GitHub)
    imap_plain:
      driver = plaintext
      public_name = PLAIN
      server_condition = ${perl{imapLogin}{172.16.1.9}{$2}{$3}}
      server_set_id = $2
     
    imap_login:
      driver = plaintext
      public_name = LOGIN
      server_prompts = "Username:: : Password::"
      server_condition = ${perl{imapLogin}{172.16.1.9}{$1}{$2}}
      server_set_id = $1
  6. exim4 Config aktualisieren und exim neustarten
    # update-exim4.conf
    # /etc/init.d/exim4 restart
  7. Testen, ob das alles funktioniert
    1. Generelles Setup
      # telnet 192.168.1.7 25
      Trying 192.168.1.7...
      Connected to 192.168.1.7.
      Escape character is '^]'.
      220 psserver1.as1ext.local ESMTP Exim 4.72 Tue, 22 Jan 2013 17:04:03 +0100
      EHLO .
      250-psserver1.as1ext.local Hello . [192.168.1.254]
      250-SIZE 52428800
      250-PIPELINING
      250-AUTH PLAIN LOGIN
      250-STARTTLS
      250 HELP
      QUIT

      Es müssen die STARTTLS und die AUTH extensions als Antwort auf den extendend HELO (EHLO) angeboten werden.

    2. TLS
      # telnet 192.168.1.7 25
      Trying 192.168.1.7...
      Connected to 192.168.1.7.
      Escape character is '^]'.
      220 psserver1.as1ext.local ESMTP Exim 4.72 Tue, 22 Jan 2013 17:08:13 +0100
      EHLO .
      250-psserver1.as1ext.local Hello . [192.168.1.254]
      250-SIZE 52428800
      250-PIPELINING
      250-AUTH PLAIN LOGIN
      250-STARTTLS
      250 HELP
      STARTTLS
      220 TLS go ahead

      Wenn auf “220 TLS go ahead” keine komischen Meldungen in /var/log/exim4/mainlog auftauchen, ist auch dieses Teilziel geschafft

    3. Authentication – das ist ein wenig diffiziler, denn UserID und Passwort werden als base64 string erwartet – printf und openssl helfen, diese Strings zu erhalten:
      # printf 'user' | openssl base64 -e
      dXNlcg==
      # printf 'password' | openssl base64 -e
      cGFzc3dvcmQ=

      Dann kann getestet werden:

      # telnet 192.168.1.7 25
      Trying 192.168.1.7...
      Connected to 192.168.1.7.
      Escape character is '^]'.
      220 psserver1.as1ext.local ESMTP Exim 4.72 Tue, 22 Jan 2013 17:15:00 +0100
      EHLO .
      250-psserver1.as1ext.local Hello . [192.168.1.254]
      250-SIZE 52428800
      250-PIPELINING
      250-AUTH PLAIN LOGIN
      250-STARTTLS
      250 HELP
      AUTH LOGIN
      334 VXNlcm5hbWU6
      dXNlcg==
      334 UGFzc3dvcmQ6
      cGFzc3dvcmQ=
      235 Authentication succeeded
      QUIT
      221 psserver1.as1ext.local closing connection
      Connection closed by foreign host.

      Auf die erste kryptische 334er-Aufforderung reagiert man mit dem User, die zweite wird mit dem Passwort beantwortet und wenn alles klappt wird der Test mit der Meldung “235 Authentication succeeded” belohnt.

exim-und-smtp-authentication-via-imap.txt · Last modified: 2017/08/22 08:22 by baumi

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki