Simples POP-Before-SMTP für Sendmail

POP before SMTP (die Erlaubnis, Mail über einen Server zu versenden, wenn man sich per POP3 oder IMAP vorgängig erfolgreich angemeldet hat – und ohne SMTP-Authentifizierung) ist eigentlich nicht mehr empfehlenswert. Trotzdem begegnet uns dieses Relikt aus älterer Zeit gelegentlich wieder, und dann ist es ganz praktisch, wenn man eine passende Implementation, die sich rasend schnell und (fast) ohne Konfiguration einsetzen lässt, ganz praktisch.

Wir stellen eine solche auf unserer Download-Seite zur Verfügung. Die Funktionsweise ist betont simpel

  • es handelt sich um ein einfaches Shell-Skript
  • das Sie aus Cron regelmässig (1x pro Minute ist zu empfehlen) starten
  • es holt aus /var/log/syslog (Sie können es an Ihr System anpassen, indem Sie /var/log/syslog z.B. durch /var/log/messages ersetzen) Logeinträge erfolgreicher POP3/IMAP-Logins
  • unter /var/spool/pop-before-smtp merkt es sich die gefundenen IP-Adressen und den Zeitpunkt, wann diese zuletzt im Log aufgetaucht sind
  • aus dieser Information generiert es Einträge in /etc/mail/access und löscht sie (nach 50 Minuten) auch wieder

Die meisten Sendmail-Standardinstallationen verwenden sowieso /etc/mail/access, d.h. das Skript funktioniert sofort ohne Änderung an der Sendmail-Konfiguration. Sollte dies doch nicht der Fall sein, so lässt sich die access-Datei so in sendmail.mc konfigurieren:

FEATURE(`access_db', , `skip')dnl

Falls die Access-Datei in Ihrem Fall nicht unter /etc/mail liegt, passen Sie den Pfad im Skript an.

Trotzdem erwarten Sie bitte keine Wunder. Es handelt sich um eine schreiend einfache Quick&Dirty-Lösung, die uns auch schon aus der Patsche geholfen hat. Sie hat auch Nachteile:

  • Unterstützung für Dovecot und Courier ist implementiert. Verwenden Sie einen POP/IMAP-Server, mit dem das Skript nicht zusammenarbeitet, dann müssen die grep- und sed-Anweisungen passend angepasst werden.
  • Zur Zeit unterstützt das Skript IPv6-Adressen nicht
  • Der Aufruf per Cron sorgt dafür, dass maximal die Zeit zwischen zwei Aufrufen vergehen kann, bis SMTP nach einer erfolgreichen Anmeldung freigeschaltet wird
  • Da das Skript direkt /etc/mail/access bearbeitet, muss man bei manuellen Änderungen darauf Rücksicht nehmen, dass die Datei während des Bearbeitens auch mal aufdatiert werden kann.
  • Weder das Abarbeiten des Logs per tail noch das Aufnehmen von Adressen in /etc/mail/access ist besonders elegant oder effizient und nur für kleine Mailserver geeignet. Verwalten Sie auf Ihrem Mailserver tausende von Mailboxen, dann nehmen Sie sich bitte die Zeit, eine effizientere Implementation zu verwenden oder noch besser POP-Before-SMTP auszumerzen.
  • IPv6-Unterstützung fehlt noch.