[CentOS-de] Sendmail LDAP Routing Mailer-Auswahl

Alexander Dalloz ad+lists at uni-x.org
So Sep 12 10:29:06 EDT 2010


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 at 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