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