whitelist sender domain
Martin Johannes Dauser
mdauser at cs.sbg.ac.at
Wed Feb 21 11:21:39 CET 2018
On Sat, 2018-02-17 at 09:49 +0000, Dominic Raferd wrote:
> On 16 February 2018 at 21:05, Dauser Martin Johannes
> <mdauser at cs.sbg.ac.at> wrote:
> > Well this topic is quite old, still when searching for hard
> > whitelisting with amavisd-new you'll find this solution on
> > different
> > sites.
> >
> > Dominic Raferd wrote on Dec 11 2016
> >
> > I use a whitelist with amavis: I have a file
> > /etc/amavis/whitelist
> > which contains on each line either a comment (starting with
> > hash #),
> > full email address or just a domain, and then in
> > /etc/amavis/conf.d/50-user I have lines like this:
> >
> > # whitelist some senders to save time and avoid false positives
> > # - you can list full addresses or domains, one per line
> > # idea from http://www.iredmail.org/forum/topic4681-iredmail-su
> > pport
> > -solved-how-to-bypass-amavisd-for-some-senders.html
> > # This policy will perform virus checks only.
> > read_hash(\%whitelist_sender, '/etc/amavis/whitelist');
> > @whitelist_sender_maps = (\%whitelist_sender);
> >
> > $interface_policy{'10026'} = 'VIRUSONLY';
> > $policy_bank{'VIRUSONLY'} = {
> > bypass_spam_checks_maps => [ '@whitelist_sender_maps']
> > ,
> > bypass_banned_checks_maps => ['@whitelist_sender_maps'],
> > bypass_header_checks_maps => ['@whitelist_sender_maps'],
> > };
> >
> >
> > The problem is, I've got the impression that this policy_bank is
> > set
> > wrong and doesn't serve the intended purpose to whitelist SENDERS
> > --
> > neither incoming nor outgoing. Actually it seems to state nonsense.
> > Here are my thoughts and I gladly accept corrections:
> >
> > To make it more clearly I moved the bypass_spam_checks_maps out of
> > the
> > hash/associative array:
> >
> > @bypass_spam_maps = ( '@whitelist_sender_maps') ;
> >
> > + First, and this took for me a while to fully realise, @*_maps
> > just
> > tells the subroutine 'lookup' where and with which method (SQL,
> > LDAP,
> > hash, access control list, regexp, constant) it should search. [1]
> >
> > + Second, if it is not stated otherwise it searches for the
> > RECIPIENT's
> > envelope address. And I couldn't find anywhere that this very map
> > is
> > meant to search for senders:
> >
> > Documentation for whitelisting [2] is talking about senders but
> > only in
> > conjunction with the lookup tables @whitelist_sender_maps,
> > @blacklist_sender_maps and
> > $per_recip_blacklist_sender_lookup_tables.
> >
> > But the same Document [3] states: "Using configuration variables
> > @bypass_virus_checks_maps, @bypass_banned_checks_maps,
> > @bypass_header_checks_maps and @bypass_spam_checks_maps each
> > RECIPIENT
> > ... may suggest that certain tests are not needed ... . Although
> > the
> > @bypass_*_checks_maps PERTAIN TO INDIVIDUAL RECIPIENTS, ...
> > Suggestion
> > by some of the RECIPIENTS that certain check ... is to be bypassed
> > ...
> > does not guarantee the test will not be performed. "
> >
> > So you can't set whitelisted senders with @bypass_*_maps.
> >
> > + Third, looking at my code line above @bypass_spam_maps is an
> > array/"list" containing one member, which is a STRING '@whitelist_s
> > ende
> > r_maps'. This means the subroutine interprets this as a constant
> > and
> > returns this very string '@whitelist_sender_maps' as a value, which
> > doesn't make any sense in this context as it is neither an email
> > address nor a domain. -- Perl itself won't complain as the syntax
> > is
> > still correct and there won't be a hit ever.
> >
> > @bypass_spam_maps = (\%whitelist_sender);
> >
> > or within the policy bank I guess:
> >
> > bypass_spam_maps => [\%whitelist_sender],
> >
> > would search for email addresses within the file
> > /etc/amavis/whitelist,
> > I think. But as noted at my second point, those are sender
> > addresses,
> > not the expected recipients.
> >
> >
> > Ah, global hard whitelisting of senders. How might it be done then.
> > (Be
> > aware of the caveats of whitelisting!)
> >
> > read_hash(\%whitelist_sender, '/etc/amavis/whitelist');
> > @whitelist_sende
> > r_maps = (\%whitelist_sender);
> >
> > And content of /etc/amavis/whitelist:
> >
> > some.trustworthy at doma.in #full email address
> > some.trustworthy@ #full local part
> > in.domain.we.trust #full email domain
> > .we.trust #accepting sub domains
> >
> >
> > It should even be possible to set a sender whitelist within a
> > policy
> > bank:
> >
> > $policy_bank{'WHITELIST'} = {
> > whitelist_sender_maps => [
> > read_hash('/etc/amavis/whitelist') ],
> > }
> >
> >
> > As already noted, these are my thoughts and I gladly accept
> > corrections.
> >
> > Martin Johannes Dauser
> >
> >
> > 1 https://www.ijs.si/software/amavisd/README.lookups.txt
> >
> > 2 https://www.ijs.si/software/amavisd/amavisd-new-docs.html#wblist
> >
> > 3 https://www.ijs.si/software/amavisd/amavisd-new-docs.html#checks
>
> I defer to your greater understanding of amavis and perl, but at a
> practical level the whitelist settings that I suggested above do work
> for me.
That's no surprise to me as the first lines of your proposal do the
work, whereas @bypass_banned_checks_maps within your policy bank
probably does nothing but consuming a little bit of CPU time ;D
I successfully use now:
read_hash(\%whitelist_sender, '/etc/amavis/whitelist');
$policy_bank{'INCOMMING'} = {
# set incomming mails as NOT-originating
originating => 0,
# mails from trusted envelope senders
# are whitelisted by Spamassassin
whitelist_sender_maps => [ \%whitelist_sender ],
...
};
And /etc/amavis/whitelist just contains one full email address.
More information about the amavis-users
mailing list