How to reject unknown users but still use smart_host and stickyhost

Hi all!

I'm using sendmail with spamassassin (spamass_milter) and interscan virus
wall. It works well in it's current config, except one problem: it doesn't
reject unknown users immediately. This means that all the messages to
unknown users are accepted, and then returned when the local user check
finally takes place. So here's the setup, and the request is for help
getting the sendmail-receiving.mc in the proper form to reject mail to
unknown users without accepting the message for delivery. I'm not a
sendmail guru, so I'll describe as best as possible, but let me know if you
need more information or if my understanding is incorrect.

Also, I had followed some instructions I found on comp.mail.sendmail, but
they don't allow for a virtual user table:
http://groups.google.com/group/comp.mail.sendmail/browse_thr ead/thread/88cc72d7c4d3a6e/ee2a9474b3a4558d.
That might be the place to start, I couldn't get it expanded to include
virtual users. FYI, the guts of that thread are included:

dnl LOCAL_CONFIG
dnl Kaliasp hash -m /etc/mail/aliases
dnl Kuserp user -m

dnl LOCAL_RULESETS
dnl SLocal_check_rcpt
dnl R$* $: <?> $&{rcpt_addr}
dnl R<?> $+ [at] $=w $: < [at] > $1 mark local
address
dnl R<?> $* [at] $* $ [at] OK ignore
remote address
dnl R<?> $+ $: < [at] > $1 mark
unqualified user
dnl R< [at] > $+ + $* $: < $(aliasp $1+$2 $: [at] $) > $1 + * plussed
alias?
dnl R< [at] > $+ + $* $: < $(aliasp $1+$2 $: [at] $) > $1 +* alias?
dnl R< [at] > $+ $: < $(aliasp $1 $: [at] $) > $1 normal
alias?
dnl R< [at] > $+ $: < $(userp $1 $: [at] $) > $1 system user?
dnl R< [at] > $+ $#error $ [at] 5.1.1 $: "550 User unknown" nope, go
away



1. Daemons
1.1. MTA_RX (sendmail-receiving.mc) accepts mail, passes it through
spamassassin then forwards it to MTA
1.1.1. Runs on port 25, pretty much standard except for the redirection to
another sendmail daemon
1.2. MTA (sendmail-delivery.mc) which is interscan virus wall.
1.2.1. Runs on port 18000
2. sendmail-receiving.mc: (sorry for all the comments in there, but I wanted
to make sure I got the whole config to you!)
---------------------------------sendmail-receiving.mc
divert(-1)dnl
dnl #
dnl # This is the sendmail macro config file for m4. If you make changes to
dnl # /etc/mail/sendmail.mc, you will need to regenerate the
dnl # /etc/mail/sendmail.cf file by confirming that the sendmail-cf package
is
dnl # installed and then performing a
dnl #
dnl # make -C /etc/mail
dnl #
include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`SpamAssassin, Interscan Sandwich, Sendmail - 20070924 edg')dnl
OSTYPE(`linux')dnl
dnl
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass.sock, F=,
T=C:15m;S:4m;R:4m;E:10m')dnl
dnl #
dnl # Uncomment and edit the following line if your outgoing mail needs to
dnl # be sent out through an external mail server:
dnl #
define(`MAIL_HUB',`smtp:[127.0.0.1]')dnl
define(`SMART_HOST',`smtp:[127.0.0.1]')dnl
FEATURE(`stickyhost')dnl
define(`confDEF_USER_ID',``8:12'')dnl
define(`confDF_BUFFER_SIZE', `16384')dnl
define(`confDELIVERY_MODE', `background')dnl
define(`confFAST_SPLIT', `10')dnl
define(`confINPUT_MAIL_FILTERS', `spamassassin')dnl
dnl define(`confAUTO_REBUILD')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
dnl define(`ALIAS_FILE', `/etc/aliases')dnl
dnl define(`STATUS_FILE', `/etc/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(`confMILTER_MACROS_CONNECT',`t, b, j, _, {daemon_name}, {if_name},
{if_addr}')dnl
define(`confMILTER_MACROS_HELO',`s, {tls_version}, {cipher}, {cipher_bits},
{cert_subject}, {cert_issuer}')dnl
define(`confMILTER_MACROS_ENVRCPT',`r, v, Z')dnl
dnl define(`confAUTH_OPTIONS', `A')dnl
dnl # The following allows relaying if the user authenticates, and disallows
dnl # plaintext authentication (PLAIN/LOGIN) on non-TLS links
dnl #
dnl define(`confAUTH_OPTIONS', `A p')dnl
dnl #
dnl # PLAIN is the preferred plaintext authentication method and used by
dnl # Mozilla Mail and Evolution, though Outlook Express and other MUAs do
dnl # use LOGIN. Other mechanisms should be used if the connection is not
dnl # guaranteed secure.
dnl #
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN
PLAIN')dnl
dnl #
dnl # Rudimentary information on creating certificates for sendmail TLS:
dnl # make -C /usr/share/ssl/certs usage
dnl #
dnl define(`confCACERT_PATH',`/usr/share/ssl/certs')
dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem' )
dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
dnl #
dnl # This allows sendmail to use a keyfile that is shared with OpenLDAP's
dnl # slapd, which requires the file to be readble by group ldap
dnl #
dnl define(`confDONT_BLAME_SENDMAIL',`groupreadablekeyfile')dnl
dnl #
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
define(`confTO_IDENT', `0')dnl
dnl FEATURE(delay_checks)dnl
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
dnl #
dnl # The -t option will retry delivery if e.g. the user runs over his
quota.
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
FEATURE(`virtuser_entire_domain')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
EXPOSED_USER(`root')dnl
dnl #
dnl # The following causes sendmail to only listen on the IPv4 loopback
address
dnl # 127.0.0.1 and not on any other network devices. Remove the loopback
dnl # address restriction to accept email from the internet or intranet.
dnl #
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
DAEMON_OPTIONS(`Name=MTA-RX')dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 587 for
dnl # mail from MUAs that authenticate. Roaming users who can't reach their
dnl # preferred sendmail daemon due to port 25 being blocked or redirected
find
dnl # this useful.
dnl #
dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 465, but
dnl # starting immediately in TLS mode upon connecting. Port 25 or 587
followed
dnl # by STARTTLS is preferred, but roaming clients using Outlook Express
can't
dnl # do STARTTLS on ports other than 25. Mozilla Mail can ONLY use STARTTLS
dnl # and doesn't support the deprecated smtps; Evolution <1.1.1 uses smtps
dnl # when SSL is enabled-- STARTTLS support is available in version 1.1.1.
dnl #
dnl # For this to work your OpenSSL certificates must be configured.
dnl #
dnl DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
dnl #
dnl # The following causes sendmail to additionally listen on the IPv6
loopback
dnl # device. Remove the loopback address restriction listen to the network.
dnl #
dnl # NOTE: binding both IPv4 and IPv6 daemon to the same port requires
dnl # a kernel patch
dnl #
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')dnl
dnl #
dnl # We strongly recommend not accepting unresolvable domains if you want
to
dnl # protect yourself from spam. However, the laptop and users on computers
dnl # that do not have 24x7 DNS do need this.
dnl #
dnl FEATURE(`accept_unresolvable_domains')dnl
dnl #
dnl FEATURE(`relay_based_on_MX')dnl
dnl #
dnl # Also accept email sent to "localhost.localdomain" as local email.
dnl #
LOCAL_DOMAIN(`localhost.localdomain')dnl
dnl #
dnl # The following example makes mail from this host and any additional
dnl # specified domains appear to be sent from mydomain.com
dnl #
dnl MASQUERADE_AS(`mydomain.com')dnl
dnl #
dnl # masquerade not just the headers, but the envelope as well
dnl #
dnl FEATURE(masquerade_envelope)dnl
dnl #
dnl # masquerade not just [at] mydomainalias.com, but [at] *.mydomainalias.com as
well
dnl #
dnl FEATURE(masquerade_entire_domain)dnl
dnl #
dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

dnl --Start-- for Sendmail 8.12.x only
define(`confRUN_AS_USER',`smmsp:smmsp')dnl
define(`confQUEUE_SORT_ORDER',`Modification')dnl Modification or Random is
reasonable
QUEUE_GROUP(`mqueue',`P=/var/spool/mqueue, R=2, F=f')dnl
dnl --End--

define(`confPID_FILE', `/var/run/sendmail.pid')dnl
define(`QUEUE_DIR',`/var/spool/mqueue')dnl
define(`STATUS_FILE',`/etc/mail/statistics')dnl

define(`ESMTP_MAILER_ARGS',`TCP $h 18000')dnl To tcp port 18000 instead of
25
MODIFY_MAILER_FLAGS(`ESMTP', `+k')dnl
define(`SMTP_MAILER_ARGS',`TCP $h 18000')dnl To tcp port 18000 instead of
25
MODIFY_MAILER_FLAGS(`SMTP',`+k')dnl
define(`RELAY_MAILER_ARGS',`TCP $h 18000')dnl To tcp port 18000 instead of
25
MODIFY_MAILER_FLAGS(`RELAY',`+k')dnl
define(`SMTP8_MAILER_ARGS',`TCP $h 18000')dnl To tcp port 18000 instead of
25
MODIFY_MAILER_FLAGS(`SMTP8', `+k')dnl
define(`DSMTP_MAILER_ARGS',`TCP $h 18000')dnl To tcp port 18000 instead of
25
MODIFY_MAILER_FLAGS(`DSMTP', `+k')dnl

define(`SMTP_MAILER_MAXMSGS',`10')dnl Max no. of msgs in a single
connection

undefine(`ALIAS_FILE')dnl No aliases file, all local mail goes to
MAIL_HUB
undefine(`UUCP_RELAY')dnl
undefine(`BITNET_RELAY')dnl
undefine(`DECNET_RELAY')dnl

MAILER(smtp)dnl
dnl MAILER(procmail)dnl
------------------------------------------------------------ -------EOF

3. sendmail-delivery.mc
--------------------------------------------------------send mail-delivery.mc
divert(-1)dnl
dnl #
dnl # This is the sendmail macro config file for m4. If you make changes to
dnl # /etc/mail/sendmail.mc, you will need to regenerate the
dnl # /etc/mail/sendmail.cf file by confirming that the sendmail-cf package
is
dnl # installed and then performing a
dnl #
dnl # make -C /etc/mail
dnl #
include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for Red Hat Linux')dnl
OSTYPE(`linux')dnl
dnl #
dnl # Uncomment and edit the following line if your outgoing mail needs to
dnl # be sent out through an external mail server:
dnl #
dnl define(`SMART_HOST',`smtp.your.provider')
dnl #
define(`confDEF_USER_ID',``8:12'')dnl
dnl define(`confAUTO_REBUILD')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
dnl define(`STATUS_FILE', `/etc/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
dnl define(`confAUTH_OPTIONS', `A')dnl
dnl #
dnl # The following allows relaying if the user authenticates, and disallows
dnl # plaintext authentication (PLAIN/LOGIN) on non-TLS links
dnl #
dnl define(`confAUTH_OPTIONS', `A p')dnl
dnl #
dnl # PLAIN is the preferred plaintext authentication method and used by
dnl # Mozilla Mail and Evolution, though Outlook Express and other MUAs do
dnl # use LOGIN. Other mechanisms should be used if the connection is not
dnl # guaranteed secure.
dnl #
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN
PLAIN')dnl
dnl #
dnl # Rudimentary information on creating certificates for sendmail TLS:
dnl # make -C /usr/share/ssl/certs usage
dnl #
dnl define(`confCACERT_PATH',`/usr/share/ssl/certs')
dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem' )
dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
dnl #
dnl # This allows sendmail to use a keyfile that is shared with OpenLDAP's
dnl # slapd, which requires the file to be readble by group ldap
dnl #
dnl define(`confDONT_BLAME_SENDMAIL',`groupreadablekeyfile')dnl
dnl #
define(`confTO_QUEUEWARN', `1h')dnl
define(`confTO_QUEUERETURN', `1d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
define(`confTO_IDENT', `0')dnl
dnl FEATURE(delay_checks)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
dnl #
dnl # The -t option will retry delivery if e.g. the user runs over his
quota.
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
dnl #
dnl # The following causes sendmail to only listen on the IPv4 loopback
address
dnl # 127.0.0.1 and not on any other network devices. Remove the loopback
dnl # address restriction to accept email from the internet or intranet.
dnl #
DAEMON_OPTIONS(`Port=19000,Addr=127.0.0.1, Name=MTA-TX')dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 587 for
dnl # mail from MUAs that authenticate. Roaming users who can't reach their
dnl # preferred sendmail daemon due to port 25 being blocked or redirected
find
dnl # this useful.
dnl #
dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 465, but
dnl # starting immediately in TLS mode upon connecting. Port 25 or 587
followed
dnl # by STARTTLS is preferred, but roaming clients using Outlook Express
can't
dnl # do STARTTLS on ports other than 25. Mozilla Mail can ONLY use STARTTLS
dnl # and doesn't support the deprecated smtps; Evolution <1.1.1 uses smtps
dnl # when SSL is enabled-- STARTTLS support is available in version 1.1.1.
dnl #
dnl # For this to work your OpenSSL certificates must be configured.
dnl #
dnl DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
dnl #
dnl # The following causes sendmail to additionally listen on the IPv6
loopback
dnl # device. Remove the loopback address restriction listen to the network.
dnl #
dnl # NOTE: binding both IPv4 and IPv6 daemon to the same port requires
dnl # a kernel patch
dnl #
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')dnl
dnl #
dnl # We strongly recommend not accepting unresolvable domains if you want
to
dnl # protect yourself from spam. However, the laptop and users on computers
dnl # that do not have 24x7 DNS do need this.
dnl #
dnl FEATURE(`accept_unresolvable_domains')dnl
dnl #
dnl FEATURE(`relay_based_on_MX')dnl
dnl #
dnl # Also accept email sent to "localhost.localdomain" as local email.
dnl #
LOCAL_DOMAIN(`localhost.localdomain')dnl
dnl #
dnl # The following example makes mail from this host and any additional
dnl # specified domains appear to be sent from mydomain.com
dnl #
dnl MASQUERADE_AS(`mydomain.com')dnl
dnl #
dnl # masquerade not just the headers, but the envelope as well
dnl #
dnl FEATURE(masquerade_envelope)dnl
dnl #
dnl # masquerade not just [at] mydomainalias.com, but [at] *.mydomainalias.com as
well
dnl #
dnl FEATURE(masquerade_entire_domain)dnl
dnl #
dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

dnl --Start-- for Sendmail 8.12.x only
define(`confRUN_AS_USER',`root:mail')dnl
define(`confQUEUE_SORT_ORDER',`Modification')dnl Modification or Random is
reasonable
QUEUE_GROUP(`mqueue',`P=/var/spool/mqueue-delivery, R=2, F=f')dnl
dnl --End--

define(`confPID_FILE', `/var/run/sendmail-delivery.pid')dnl
define(`QUEUE_DIR',`/var/spool/mqueue-delivery')dnl
define(`STATUS_FILE', `/etc/mail/statistics-delivery')dnl

MAILER(smtp)dnl
MAILER(procmail)dnl

Thank you! I know this is a lot to dig through!

Emil
Emil [ Mo, 24 September 2007 19:48 ] [ ID #1828396 ]

Re: How to reject unknown users but still use smart_host and stickyhost

"Emil" <emil.glatz [at] wescoglobal.com> writes:
> I'm using sendmail with spamassassin (spamass_milter) and interscan virus
> wall. It works well in it's current config, except one problem: it doesn't
> reject unknown users immediately. This means that all the messages to
> unknown users are accepted, and then returned when the local user check
> finally takes place. So here's the setup, and the request is for help
> getting the sendmail-receiving.mc in the proper form to reject mail to
> unknown users without accepting the message for delivery. I'm not a
> sendmail guru, so I'll describe as best as possible, but let me know if you
> need more information or if my understanding is incorrect.
>
> Also, I had followed some instructions I found on comp.mail.sendmail, but
> they don't allow for a virtual user table:
> http://groups.google.com/group/comp.mail.sendmail/browse_thr ead/thread/88cc72d7c4d3a6e/ee2a9474b3a4558d.
> That might be the place to start, I couldn't get it expanded to include
> virtual users. FYI, the guts of that thread are included:
> [...]

Take a look at RTCyrus3 and change "verification procedure" to fit your
requirements [no socket map needed].

http://groups-beta.google.com/group/cyrus-sendmail
http://open-sendmail.sourceforge.net/

P.S. The google-group will be terminated october 1st.

--
[pl>en: Andrew] Andrzej Adam Filip : anfi [at] priv.onet.pl : anfi [at] xl.wp.pl
Before You Ask: http://anfi.homeunix.net/sendmail/B4UAsk-Sendmail.html
Homesite of Andrzej Filip: http://anfi.homeunix.net/
Open-Sendmail: http://open-sendmail.sourceforge.net/
Andrzej Filip [ Di, 25 September 2007 17:06 ] [ ID #1829216 ]
Miscellaneous » comp.mail.sendmail » How to reject unknown users but still use smart_host and stickyhost

Vorheriges Thema: sendmail FAQ
Nächstes Thema: Cannot send email to the root account for sendmail server