Sendmail über externen Mailserver (anderer Port) senden lassen

Wenn man das im letzten Beitrag beschriebene Problem mit Mails hat (Port 25 geblockt) und bereits einen externen Mailserver wie dort beschrieben eingerichtet hat, muss man nun noch den Weitertransport über diesen Server organisieren.

Dazu geht man bei dem hinter der Firewall befindlichen Server mit der MTA sendmail (habe ich wegen der Einfachheit gewählt) wie folgt vor:

Zuerst stoppen wir sendmail

service sendmail stop

und editieren /etc/mail/sendmail.mc

define(`SMART_HOST',`smtp.myisp.net')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')
define(`ESMTP_MAILER_ARGS', `TCP $h 587')
FEATURE(`authinfo',`Hash -o /etc/mail/authinfo.db')dnl

Mit dem Befehl

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

wird die Config geprüft und in einem für sendmail lesbaren Format gespeichert.

Danach wird die Datei /etc/mail/authinfo mit folgendem Inhalt angelegt:

AuthInfo:ispdomain.net "U:my_username" "P:my_password" "M:PLAIN"
AuthInfo: "U:my_username" "P:my_password" "M:PLAIN"

Statt PLAIN kann auch ein anderer vom Relayserver unterstützter Authentifizierungsmechanismus gewählt werden.

makemap hash /etc/mail/authinfo < /etc/mail/authinfo

schreibt die Auth-Daten in eine von sendmail lesbare Hashfile (authinfo.db).

Jetzt kann sendmail wieder gestartet werden

service sendmail start

und sollte Mails nun über Port 587 an den Relay-Server weiterleiten, der sie schließlich ausliefert.

Postfix auf mehreren Ports „horchen“ lassen

Viele Netzwerke verbieten den Zugriff auf Port 25, um zu verhindern, dass Spam von ihrem Netzwerk aus gesendet wird (wenn auch nicht über ihren eigenen Mailserver). Muss man trotzdem öfter Mails aus einem solchen Netzwerk verschicken, bietet es sich an, Postfix auf dem Mailserver einen zweiten Port zuzuweisen.

Das ginge zwar auch in der master.cf, eventuell müssten dann aber noch einige andere Sachen geändert werden. Einfacher geht es, indem man iptables anweist, vom zweiten Port aus an 25 umzuleiten:

1
iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 25

Mit

1
iptables-save

wird die Änderung auch nach dem Serverneustart direkt wieder übernommen.