[linux] Re: sendmail guru's in de zaal?

Kees Theunissen theuniss op rijnh.nl
Za Mrt 20 20:46:11 CET 2010


On Sat, 20 Mar 2010, Udo van den Heuvel wrote:

>Dag,

Ook dag,

Mijn antwoord staat onderaan.
Om de config-info niet weg te snoeien heb ik niet geknipt in het
oorspronkelijke mailtje, hoewel ik vind dat ik zo eigenlijk te veel
citeer.

>
>Sendmail werkt wel voor me, maar ik wil de zaken wat optimaliseren:
>
>Alleen mail die *niet* lokaal is (localhost danwel het lokale domein)
>moet per smtp afgeleverd worden bij de MX'en van de bestemming.
>
>Lokale mail gewoon naar de lokale user.
>
>Lokale domein-mail naar de betreffende doos.
>
>Naar buiten moet sendmail doen alsof hij op de firewall zit qua IP/hostnaam.
>Ook moet voor mail naar buiten de zaak vanaf @xs4all.nl komen.
>Tot nu toe heb ik het onderstaande dat nog niet aan het bovenstaande
>voldoet:
>
>divert(-1)dnl
>include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
>VERSIONID(`setup for linux')dnl
>OSTYPE(`linux')dnl
>define(`confDOMAIN_NAME',`pindarots.xs4all.nl')
>define(`confDEF_USER_ID', ``8:12'')dnl
>define(`confTO_CONNECT', `1m')dnl
>define(`confTRY_NULL_MX_LIST', `True')dnl
>define(`confDONT_PROBE_INTERFACES', `True')dnl
>define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
>define(`ALIAS_FILE', `/etc/aliases')dnl
>define(`STATUS_FILE', `/var/log/mail/statistics')dnl
>define(`UUCP_MAILER_MAX', `2000000')dnl
>define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
>define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
>define(`confAUTH_OPTIONS', `A')dnl
>define(`confTO_IDENT', `0')dnl
>FEATURE(`no_default_msa', `dnl')dnl
>FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
>FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
>FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
>FEATURE(redirect)dnl
>FEATURE(always_add_domain)dnl
>FEATURE(use_cw_file)dnl
>FEATURE(use_ct_file)dnl
>FEATURE(local_procmail, `', `procmail -t -Y -a $h -d $u')dnl
>FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')dnl
>FEATURE(`blacklist_recipients')dnl
>EXPOSED_USER(`root')dnl
>DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
>DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
>FEATURE(`accept_unresolvable_domains')dnl
>LOCAL_DOMAIN(`localhost.localdomain')dnl
>LOCAL_DOMAIN(`surfplank2.hierzo')dnl
>MASQUERADE_AS(`xs4all.nl')dnl
>FEATURE(allmasquerade)dnl
>FEATURE(masquerade_envelope)dnl
>FEATURE(masquerade_entire_domain)dnl
>MAILER(smtp)dnl
>MAILER(procmail)dnl
>define(`confCACERT_PATH',`/etc/mail/ssl/certs')
>define(`confCACERT',`/etc/pki/tls/certs/ca-bundle.crt')
>define(`confSERVER_CERT',`/etc/mail/ssl/sendmail.pem')
>define(`confSERVER_KEY',`/etc/mail/ssl/sendmail.pem')
>define(`confCLIENT_CERT',`/etc/mail/ssl/sendmail.pem')
>define(`confCLIENT_KEY',`/etc/mail/ssl/sendmail.pem')
>define(`confBIND_OPTS', `WorkAroundBrokenAAAA')dnl
>
>Wat moet er veranderd worden om b.v. alleen mail naar buiten te
>masqueraden als xs4all.nl?

Om lokale mail niet te masqueraden kan je de
FEATURE(`local_no_masquerade') gebruiken.
Voor mail voor het lokale domein wordt het lastiger. Ik voeg in zo'n
geval een extra smtp-mailer variant toe waar ik de masquerading
functionaliteit heb uit gesloopt.

>Idem om de mail voor het lokale domein niet naar buiten te sturen maar
>naar de lokale doos?

Kan je toelichten wat hier fout gaat? Je hebt in het bovenstaande
geen SMART_HOST gedefinieerd. Sendmail probeert dan mail naar een
MX-host te sturen en als er geen MX-records zijn voor het domain-part
van het emailadres dan gaat de mail rechtstreeks naar de betreffende
doos. Als dat bij jou niet zo is dan moet je ergens expliciet hebben
ingesteld dat die mail naar buiten gaat (bijv. met MX-records in de
DNS, of met entries in je mailer table).
Als je wel een SMART_HOST zou hebben dan gaat alles wat niet lokaal
op localhost is naar die SMART_HOST.

>Dat soort zaken...
>
>Iemand?

Probeer het onderstaande eens:


[sendmail.mc]
Begin ongewijzigd overgenomenen van bovenstaande config.
------------------------------------------------------------------
[ ... ]

FEATURE(`local_no_masquerade')dnl
MASQUERADE_AS(`xs4all.nl')dnl
FEATURE(allmasquerade)dnl
FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl
define(`confCACERT_PATH',`/etc/mail/ssl/certs')dnl
define(`confCACERT',`/etc/pki/tls/certs/ca-bundle.crt')dnl
define(`confSERVER_CERT',`/etc/mail/ssl/sendmail.pem')dnl
define(`confSERVER_KEY',`/etc/mail/ssl/sendmail.pem')dnl
define(`confCLIENT_CERT',`/etc/mail/ssl/sendmail.pem')dnl
define(`confCLIENT_KEY',`/etc/mail/ssl/sendmail.pem')dnl
define(`confBIND_OPTS', `WorkAroundBrokenAAAA')dnl
dnl #
MAILER_DEFINITIONS
MAILER(procmail)dnl
MAILER(smtp)dnl

# A smtp-relay mailer, used to relay mail unmasqueraded
# The mailer definition and the rulesets below are modified
# versions stolen from "/usr/share/sendmail-cf/mailers/smtp.m4".

#
# unmasqueraded envelope sender rewriting
#
SUnmEnvFromSMTP
R$+		$: $>PseudoToReal $1	sender/recipient common
R$* :; <@>	$@			list:; special case
R$*		$: $>MasqSMTP $1	qualify unqual'ed names

#
# unmasquerarded header sender rewriting
#
SUnmHdrFromSMTP
R$+		$: $>PseudoToReal $1	sender/recipient common
R:; <@>		$@			list:; special case

# do special header rewriting
R$* <@> $*	$@ $1 <@> $2		pass null host through
R< @ $* > $*	$@ < @ $1 > $2		pass route-addr through
R$*		$: $>MasqSMTP $1	qualify unqual'ed names


Munmasqrelay,	P=[IPC], F=_MODMF_(CONCAT(_DEF_SMTP_MAILER_FLAGS, `a8', RELAY_MAILER_FLAGS), `RELAY'),
		S=UnmEnvFromSMTP/UnmHdrFromSMTP, R=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

LOCAL_NET_CONFIG
# Select the "unmasqrelay" mailer to deliver directly and
# unmasqueraded to all hosts on (sub domains of) the "hierzo"
# domain.
R$+<@$+.hierzo>$*	$#unmasqrelay $@ $2.hierzo $: $1<@$2.hierzo>

------------------------------------------------------------------

Let op!
De "unmasqrelay" mailer definitie bestaat uit vier lange regels
die ongetwijfeld door de email software (om te beginnen door
mijn eigen MUA :-) zijn vermangeld. Deze definitie start met de
regel die begint met: Munmasqrelay
De drie volgende regels beginnen alle drie met twee TABS.

De regels in het bovenstaande die met een hoofdletter "R"
beginnen zijn "rewriting rules".  Die regels bestaan uit een
"Left Hand Side" (LHS), "Right Hand Side" (RHS, vaak het
_middelste_ deel in plaats van het rechter want er kan nog
commentaar op volgen), en optioneel een "Comment" deel.
LHS en RHS zijn door TABS van elkaar gescheiden. Ook zijn
RHS en Comment door TABS van elkaar gescheiden. Pas op dat je
van die TABS geen spaties maakt als je gaat knippen en plakken,
want dan werkt het niet meer. LHS, RHS en Comment bevatten zelf
wel spaties.

De laatste rewriting rule (na LOCAL_NET_CONFIG) selecteert de
nieuw gedefinieerde "unmasqrelay" mailer voor hosts op
(subdomeinen van) het "hierzo" domein. Pas die naam aan als dat
nodig is. De "unmasqrelay" mailer doet overigens nog wel
MX-lookups voor het bestemmings adres. Dat kan je uitschakelen
door de RHS van de laatste regel te veranderen in:
  $#unmasqrelay $@ [$2.hierzo] $: $1<@$2.hierzo>

Als je een mailertable gebruikt (dit zit in je config zie ik,
maar misschien heb je een lege table) dan moet je in die
table ook de "unmasqrelay" mailer gebruiken voor lokaal-domein
mail. "Hits" in de mailertable krijgen de rewriting rule
onder de "LOCAL_NET_CONFIG" niet meer te zien.

Disclamer:
-------------------------------------
Gebruik op eigen risco ... bla bla ...
... ongetest ... bla bla.
Enzovoort.
--------------------------------------

Dit is bijna volledig knip en plak werk uit een configuratie
die ik op diverse productie systemen heb draaien. Het zou
dus moeten werken en het idee erachter is uitgetest. Maar de
uiteindelijke configuratie, zoals hierboven in elkaar geplakt,
heb ik niet getest.



Groeten,

Kees.

-- 
Kees Theunissen
F.O.M.-Instituut voor Plasmafysica Rijnhuizen, Nieuwegein
E-mail: theuniss op rijnh.nl,     Tel: 030-6096724,     Fax: 030-6031204



More information about the Linux mailing list