Ein von mir aufgesetzter CentOS 5.5 Server mit sendmail-8.13.8-8.el5 arbeitet als Mailrelay zur Spam- und Virenabwehr zwischen dem Mailrelay des Providers und dem internen Mailserver (Lotus Notes). Zur Erkennung ungültiger Empfängeradressen am Perimeter wird die Methode "LDAP Routing ohne LDAP" eingesetzt, also in sendmail.mc:
FEATURE(`ldap_routing', `hash /etc/mail/mailhost', `hash /etc/mail/mailroute', `bounce')dnl
und in /etc/mail/mailhost für jeden Empfänger ein Eintrag der Form:
user@my.example.com notesserver.example.com
Das funktioniert auch alles sehr gut. Nun wünscht allerdings der Provider, dass die Mail bei ihm zukünftig nicht mehr über Port 25, sondern über Port 587 eingeliefert wird. Die Standardlösung:
define(`RELAY_MAILER_ARGS', `TCP $h 587')
führt leider dazu, dass auch die Weiterleitung an den internen Mailserver auf Port 587 geht, was natürlich nicht funktioniert. In der Sendmail-Doku findet sich dazu der trockene Hinweis, man solle halt sicherstellen, dass der "relay"-Mailer nirgends anders verwendet wird.
Offenbar verwendet also FEATURE(`ldap_routing') den Mailer "relay", und die Lösung meines Problems bestünde darin, das auf "esmtp" umzustellen.
Frage: Wie mache ich das?
Ich habe versucht, den Quellcode von FEATURE(`ldap_routing') zu lesen, muss aber gestehen, dass ich nicht verstehe, wie bzw. an welcher Stelle da der Mailer ausgewählt wird, geschweige denn, wie ich diese Wahl beeinflussen könnte.
Schon mal danke für alle Tipps.
Am 10.09.2010 10:06, schrieb Tilman Schmidt:
Ein von mir aufgesetzter CentOS 5.5 Server mit sendmail-8.13.8-8.el5 arbeitet als Mailrelay zur Spam- und Virenabwehr zwischen dem Mailrelay des Providers und dem internen Mailserver (Lotus Notes). Zur Erkennung ungültiger Empfängeradressen am Perimeter wird die Methode "LDAP Routing ohne LDAP" eingesetzt, also in sendmail.mc:
FEATURE(`ldap_routing', `hash /etc/mail/mailhost', `hash /etc/mail/mailroute', `bounce')dnl
und in /etc/mail/mailhost für jeden Empfänger ein Eintrag der Form:
user@my.example.com notesserver.example.com
Das funktioniert auch alles sehr gut. Nun wünscht allerdings der Provider, dass die Mail bei ihm zukünftig nicht mehr über Port 25, sondern über Port 587 eingeliefert wird. Die Standardlösung:
define(`RELAY_MAILER_ARGS', `TCP $h 587')
führt leider dazu, dass auch die Weiterleitung an den internen Mailserver auf Port 587 geht, was natürlich nicht funktioniert. In der Sendmail-Doku findet sich dazu der trockene Hinweis, man solle halt sicherstellen, dass der "relay"-Mailer nirgends anders verwendet wird.
Offenbar verwendet also FEATURE(`ldap_routing') den Mailer "relay", und die Lösung meines Problems bestünde darin, das auf "esmtp" umzustellen.
Frage: Wie mache ich das?
Ich habe versucht, den Quellcode von FEATURE(`ldap_routing') zu lesen, muss aber gestehen, dass ich nicht verstehe, wie bzw. an welcher Stelle da der Mailer ausgewählt wird, geschweige denn, wie ich diese Wahl beeinflussen könnte.
Schon mal danke für alle Tipps.
Die Lösung Deines Problems würde ich anders angehen.
Definiere einen neuen Mailer in /usr/share/sendmail-cf/mailer/smtp.m4. Die Anpassungen könnten so aussehen
mailer $ diff -uNr smtp.m4 smtp2.m4 --- smtp.m4 2001-04-02 18:52:54.000000000 -0700 +++ smtp2.m4 2010-09-12 07:24:20.000000000 -0700 @@ -19,11 +19,13 @@ ifdef(`SMTP8_MAILER_ARGS',, `define(`SMTP8_MAILER_ARGS', `TCP $h')') ifdef(`DSMTP_MAILER_ARGS',, `define(`DSMTP_MAILER_ARGS', `TCP $h')') ifdef(`RELAY_MAILER_ARGS',, `define(`RELAY_MAILER_ARGS', `TCP $h')') +ifdef(`RELAY_ISP_MAILER_ARGS',, `define(`RELAY_ISP_MAILER_ARGS', `TCP $h 587')') define(`_SMTP_QGRP', `ifelse(defn(`SMTP_MAILER_QGRP'),`',`', ` Q=SMTP_MAILER_QGRP,')')dnl define(`_ESMTP_QGRP', `ifelse(defn(`ESMTP_MAILER_QGRP'),`',`', ` Q=ESMTP_MAILER_QGRP,')')dnl define(`_SMTP8_QGRP', `ifelse(defn(`SMTP8_MAILER_QGRP'),`',`', ` Q=SMTP8_MAILER_QGRP,')')dnl define(`_DSMTP_QGRP', `ifelse(defn(`DSMTP_MAILER_QGRP'),`',`', ` Q=DSMTP_MAILER_QGRP,')')dnl define(`_RELAY_QGRP', `ifelse(defn(`RELAY_MAILER_QGRP'),`',`', ` Q=RELAY_MAILER_QGRP,')')dnl +define(`_RELAY_ISP_QGRP', `ifelse(defn(`RELAY_ISP_MAILER_QGRP'),`',`', ` Q=RELAY_ISP_MAILER_QGRP,')')dnl POPDIVERT ##################################### ### SMTP Mailer specification ### @@ -120,3 +122,6 @@ Mrelay, P=[IPC], F=_MODMF_(CONCAT(_DEF_SMTP_MAILER_FLAGS, `a8', RELAY_MAILER_FLAGS), `RELAY'), S=EnvFromSMTP/HdrFromSMTP, R=ifdef(`_ALL_MASQUERADE_', `MasqSMTP/MasqRelay', `MasqSMTP'), E=\r\n, L=2040, _OPTINS(`RELAY_MAILER_CHARSET', `C=', `, ')_OPTINS(`RELAY_MAILER_MAXMSGS', `m=', `, ')_OPTINS(`SMTP_MAILER_MAXRCPTS', `r=', `, ')T=DNS/RFC822/SMTP,_RELAY_QGRP A=RELAY_MAILER_ARGS +Mrelay_isp, P=[IPC], F=_MODMF_(CONCAT(_DEF_SMTP_MAILER_FLAGS, `a8', RELAY_ISP_MAILER_FLAGS), `RELAY'), S=EnvFromSMTP/HdrFromSMTP, R=ifdef(`_ALL_MASQUERADE_', `MasqSMTP/MasqRelay', `MasqSMTP'), E=\r\n, L=2040, + _OPTINS(`RELAY_ISP_MAILER_CHARSET', `C=', `, ')_OPTINS(`RELAY_ISP_MAILER_MAXMSGS', `m=', `, ')_OPTINS(`SMTP_MAILER_MAXRCPTS', `r=', `, ')T=DNS/RFC822/SMTP,_RELAY_QGRP + A=RELAY_ISP_MAILER_ARGS
Dann ändere in der /etc/mail/sendmail.mc die Zeile
MAILER(smtp)dnl
auf z.B.
MAILER(smtp2)dnl
Und die Anweisung, Deinen ISP als Smarthost zu verwenden änderst Du nach diesem Schema
define(`SMART_HOST',`relay_isp:smtp.your.provider')dnl
Den abweichenden Port 587 hatte ich schon in smtp2.m4 gesetzt. Das kannst Du natürlich lassen und stattdessen wie gehabt
define(`RELAY_ISP_MAILER_ARGS', `TCP $h 587')dnl
definieren.
Vom Prinzip her sollten die Änderungen klar sein.
Gruß
Alexander
Am 2010-09-12 16:29 schrieb Alexander Dalloz:
Am 10.09.2010 10:06, schrieb Tilman Schmidt:
[...]
define(`RELAY_MAILER_ARGS', `TCP $h 587')
führt leider dazu, dass auch die Weiterleitung an den internen Mailserver auf Port 587 geht, was natürlich nicht funktioniert. In der Sendmail-Doku findet sich dazu der trockene Hinweis, man solle halt sicherstellen, dass der "relay"-Mailer nirgends anders verwendet wird.
Offenbar verwendet also FEATURE(`ldap_routing') den Mailer "relay", und die Lösung meines Problems bestünde darin, das auf "esmtp" umzustellen.
[...]
Die Lösung Deines Problems würde ich anders angehen.
Definiere einen neuen Mailer in /usr/share/sendmail-cf/mailer/smtp.m4.
[...]
Und die Anweisung, Deinen ISP als Smarthost zu verwenden änderst Du nach diesem Schema
define(`SMART_HOST',`relay_isp:smtp.your.provider')dnl
So geht's natürlich auch, aber ich hatte auf eine etwas weniger umfangreiche Lösung gehofft. Schließlich gibt es ja schon einige ungenutzte Mailer, darunter der von mir ins Auge gefasste esmtp.
Interpretiere ich Deine Ausführungen richtig, dass FEATURE(`ldap_routing') hart darauf codiert ist, ausschließlich den relay-Mailer zu benutzen? Wäre es dann nicht einfacher, halt den esmtp-Mailer für die Kommunikation zum ISP zu nehmen? Also:
define(`SMART_HOST',`esmtp:smtp.your.provider')dnl define(`RELAY_ESMTP_MAILER_ARGS', `TCP $h 587')dnl
Dann würde ich mir wenigstens das Herumeditieren in den Innereien der m4-Dateien sparen. Oder mache ich da einen Denkfehler?
Thx T.
Ist zwar schon eine Weile her, aber vielleicht interessiert es doch noch jemanden.
Am 2010-09-10 10:06 schrieb /me:
FEATURE(`ldap_routing', `hash /etc/mail/mailhost', `hash /etc/mail/mailroute', `bounce')dnl
und in /etc/mail/mailhost für jeden Empfänger ein Eintrag der Form:
user@my.example.com notesserver.example.com
[zusammen mit]
define(`RELAY_MAILER_ARGS', `TCP $h 587')
führt leider dazu, dass auch die Weiterleitung an den [Notes-] Mailserver auf Port 587 geht, was natürlich nicht funktioniert.
[...]
Offenbar verwendet also FEATURE(`ldap_routing') den Mailer "relay", und die Lösung meines Problems bestünde darin, das auf "esmtp" umzustellen.
Frage: Wie mache ich das?
Nach Lektüre des cf-Quelltexts bin ich zu dem Schluss gekommen, dass ein schlichter Eintrag in der mailertable reichen müsste:
notesserver.example.com esmtp:notesserver.example.com
Und tatsächlich: damit benutzt ldap_routing beim Zielserver notesserver.example.com wie gewünscht den Mailer esmtp.
Vielleicht hilft's ja mal jemandem.