[exim] Please check my ACLs

Top Page
Delete this message
Reply to this message
Author: Dave Pooser
Date:  
To: exim-users
Subject: [exim] Please check my ACLs
I apologize for the line wraps, but I think in most cases the intent is
clear. My goals:
Postmaster/abuse/hostmaster should receive all email. If the role account is
one of multiple recipients, messages that would otherwise be rejected are
accepted and quarantined.
Mail from greenlisted hosts gets delivered unless it includes a virus
Whitelisted hosts are immune to blacklists, either local or DNSBL, but are
subject to other tests

TIA for any help; Dallas-area responders or those who visit DFW in future
are eligible for gratitude expressed as $BEVERAGE.

=====

acl_smtp_connect = acl_connect
acl_smtp_helo    = acl_helo
acl_smtp_mail    = acl_mail_from
acl_smtp_rcpt    = acl_rcpt_to
acl_smtp_data    = acl_data


av_scanner = clamd:/tmp/clamd

spamd_address = /tmp/spamd

never_users = root

host_lookup = *

# These lists will be used in various ACLs

hostlist greenlisted    =    /usr/exim/files/greenlist_hosts
hostlist whitelisted    =    /usr/exim/files/whitelist_hosts
hostlist block_by_ip    =    /usr/exim/files/blacklist_ip
hostlist block_by_name  =    /usr/exim/files/blacklist_name


######################################################################
#                       ACL CONFIGURATION                            #
######################################################################


begin acl

acl_connect:

accept

# This access control list is used for the HELO or EHLO command in
# an incoming SMTP transaction. The tests are run in order until the
# greeting is either accepted or denied.

acl_helo:

accept


acl_mail_from:

accept



# This access control list is used for every RCPT command in an incoming
# SMTP message. The tests are run in order until the address is either
# accepted or denied.

acl_rcpt_to:

# Accept if the source is local SMTP (i.e. not over TCP/IP). We do this by
# testing for an empty sending host field.

accept hosts = : +greenlisted

# Accept mail to postmaster in any local domain, regardless of the source,
# and without verifying the sender.

  accept  set acl_m0      = Delivered to role account
            local_parts   = postmaster : blacklist-admin : abuse
          domains       = +local_domains


  deny    message        =    Restricted characters in address
        domains        =     +local_domains
        local_parts    =    ^[.] : ^.*[@%!/|]


# Deny unless the sender address can be verified.

  require verify    = sender


# Make sure not to relay

  require message = Relay not permitted
          domains = +local_domains : +relay_to_domains


# Do HELO tests

  deny    message    = Remote host used IP address in HELO/EHLO greeting
    !host        = +whitelisted
    condition   = ${if isip {$sender_helo_name}{true}{false}}



   deny    message    = Remote host used our name in HELO/EHLO greeting.
    !host        = +whitelisted
    condition   = ${if or {match_domain{$sender_helo_name}
{$primary_hostname:+local_domains:+relay_to_domains}}\
                        {eq {${lc:$sender_helo_name}}{12.106.209.189}}
{true}{false}}


# Check local blacklists before doing DNS queries

  deny        message    =    Message rejected because $sender_host_address
is in a local block list; please email <blacklist-admin@???>
with questions.
              !host    =    +whitelisted
              host    =    +block_by_ip


   deny        message    =    Message rejected because $sender_host_address
resolves to a domain in a local block list; please email
<blacklist-admin@???> with questions.
              !host    =    +whitelisted
              host    =    +block_by_name


# Now do DNSBL queries

  deny    message       = Message rejected because $sender_host_address is
in a block list at $dnslist_domain\n$dnslist_text\n Please email
<blacklist-admin@???> with questions.
          dnslists      = sbl-xbl.spamhaus.org : blacklist.alfordmedia.com :
dul.dnsbl.sorbs.net
          !host            = +whitelisted


  # If host in greylist stall 30s
  warn    message       = X-Warning: $sender_host_address is on a suspicious
list at $dnslist_domain
          log_message   = found in $dnslist_domain
          dnslists      = greylist.alfordmedia.com : bl.spamcop.net
          delay            = 30s



# We also require all accepted addresses to be verifiable.

  require    message = Unknown address; see
<http://www.alfordmedia.com/bttb/index.cfm?fuseaction=staff> or email
<postmaster@???>.
              verify = recipient/callout=30s,defer_ok,use_sender



# Sender callout verification

  deny
    message = Message blocked because <$sender_address> does not appear to
be a valid sender address; email <postmaster@???> with
questions.
    !verify = sender/callout


  accept    delay        = 20s


acl_data:

    # Add a header so I can quarantine malware that is accepted because
    # one recipient is postmaster/abuse/whatever


 warn    malware    = *
         message    = This message contains a virus ($malware_name).


# Deny if the message contains a virus.

 deny    malware    = *
          message    = This message contains a virus ($malware_name).
          !condition = ${if {def:acl_m0}}


# We trust the greenlist not to send spam

accept hosts = : +greenlisted

# Add headers to a message if it is judged to be spam.

# All messages get spam headers

  warn message = X-AMS3-Spam-Score: $spam_score ($spam_bar)
       spam    = nobody:true
  warn message = X-Spam-Report: $spam_report
       spam    = nobody:true


# Messages over a certain threshold get flagged as spam for primary MX

  warn message = X-Spam-Level: $spam_bar
       spam    = nobody


# Reject spam scoring 10+

  deny message   = Message blocked by our spam filter; email\
<postmaster@???> with questions.
       spam      = nobody:true
       condition = ${if >{$spam_score_int}{100}{1}{0}}
       !condition = ${if {def:acl_m0}}


# Accept the message.

accept
--
Dave Pooser
Cat-Herder-in-Chief, Pooserville.com
"...Life is not a journey to the grave with the intention of arriving
safely in one pretty and well-preserved piece, but to slide across the
finish line broadside, thoroughly used up, worn out, leaking oil, and
shouting GERONIMO!!!" -- Bill McKenna