Jan - 
I have a client that needed the essential features you were looking for.
Essentially, allowing through banned attachments based on a sender+recipient 
pair.

I'm sure it's possible to extend Amavis to do that - but it really looked as 
though it was a "feature" that was not looked upon with favor. So, even if I 
wrote it, it wouldn't get integrated into the code, and would need maintenance 
as Amavis changed etc - and that would be entirely on my shoulders.

My approach was to handle it all externally. I have amavis configured to; for 
all banned files, send a report to a mailbox.
I then pull those report messages from the mailbox and process them.
I pull the details from the report [sender, recipient, sender IP etc]
I then do a lookup in a simple text file and start matching.


As I'm sure you're aware, sender addresses are trivially spoofed - and many 
readers of this list are probably having siezures right this second, at the 
thought of someone using them as criteria for allowing banned files through. :)

And they're right - it's not a fool-poof method. But it works for my client 
well enough.
And we don't *have* to only rely on the sender address, it's a pairing of 
sender+recipient.
And I can also trust the sender domain or IP address. [Which isn't trivially 
forged.]

[I can also control the types of attachments allowed - so really, it's a match 
of source-ip/domain + sender + recipient + attachment-type.]

I setup the script to run every few minutes and the system releases any 
quarantined messages to the original recipients. [So, there's some delay - in 
our case, a few minutes between runs. But it's pretty minimal.]

All the other messages stay in quarantine, and are purged via cron once they're 
30+d old. That way if something isn't auto-released but we still need, we can 
manually do so.

We've been running this for years now, and by and large we're pretty happy. I 
*think* we've had a case or two recently, where one of those senders was 
infected with some malware/virus and it sent attachments that were forwarded 
through to an end user via this system - so it does have its risk. But, IMO, 
it's far better than the alternatives - No attachments at all, manual release 
of everything OR allow all attachments all the time. [I'm not the guy who 
manages the mail system day-to-day - so I should probably verify that it 
actually happened, rather than saying it did - but in any case it is a possible 
outcome. In our case, other layers caught those attachments and prevented any 
harm.]

-Greg


EJ> Hi Dominic,

EJ> thank you for your quick reply.

EJ> I've tried your proposal using the
EJ> $per_recip_whitelist_sender_lookup_tables
EJ> but unfortunately it only seems to affect the spam checking. The 
virus/banned/header
EJ> checks were still active after setting this variable.

EJ> I've tried using the following configuration:

EJ> $per_recip_whitelist_sender_lookup_tables = {
EJ>   '[email protected]'  => ['[email protected]']
EJ> };

EJ> Cheers
EJ> Jan

EJ> ----- Original Message -----
EJ> | From: "Dominic Raferd" <[email protected]>
EJ> | To: [email protected]
EJ> | Sent: Tuesday, January 8, 2019 9:47:59 AM
EJ> | Subject: Re: Whitelisting specific sender addresses for specific 
recipient addresses

EJ> | On Tue, 8 Jan 2019 at 08:37, Engels, Jan <[email protected]> wrote:

|>> Hi everyone,

|>> I'm currently trying to setup amavisd-new for whitelisting emails **from** a
|>> specific sender address **to** a specific recipient address (under CentOS 
7).
|>> By whitelist I mean no virus/banned/header checks and no spam tagging. The
|>> whitelisting should however only apply for specific senders on a 
per-recipient
|>> basis.

|>> Using the @score_sender_maps I can easily assign custom spam scores on a
|>> per-recipient basis, as shown in the default amavisd.conf:

|>>     @score_sender_maps = ({ # a by-recipient hash lookup table,
|>>                             # results from all matching recipient tables 
are summed

|>>     ## per-recipient personal tables  (NOTE: positive: black, negative: 
white)
|>>     # '[email protected]'  => [{'[email protected]' => 10.0}],
|>>     # '[email protected]'  => [{'.ebay.com'                 => -3.0}],
|>>     # '[email protected]'  => [{'[email protected]' => -7.0,
|>>     #                           '.cleargreen.com'           => -5.0}],
|>>     #...
|>>     });

|>> The problem is that using the *_lovers_maps variables does not work using 
the
|>> same syntax, i.e. I've tried for example:

|>>     @virus_lovers_maps = ({ # a by-recipient hash lookup table,
|>>       '[email protected]'  => [{'[email protected]' => 1}],
|>>     });

|>>     @banned_files_lovers_maps = ({ # a by-recipient hash lookup table,
|>>       '[email protected]'  => [{'[email protected]' => 1}],
|>>     });

|>>     @bad_header_lovers_maps = ({ # a by-recipient hash lookup table,
|>>       '[email protected]'  => [{'[email protected]' => 1}],
|>>     });

|>> or using the bypass_*checks_maps variables:

|>>     @bypass_virus_checks_maps = ({
|>>       '[email protected]'  => [{'[email protected]' => 1}],
|>>     });

|>>     @bypass_banned_checks_maps = ({
|>>       '[email protected]'  => [{'[email protected]' => 1}],
|>>     });

|>>     @bypass_header_checks_maps = ({
|>>       '[email protected]'  => [{'[email protected]' => 1}],
|>>     });

|>> and the result in both variants is that **all** emails sent to 
[email protected]
|>> get whitelisted (not only the ones coming from [email protected]).

|>> Is there some way to get the same behaviour using the *_lovers_maps or 
bypass_*
|>> variables as with the @score_sender_maps variable (i.e on a per-recipient
|>> basis)?

|>> Any help would be greatly appreciated.
EJ> | 
EJ> | I think you want: $per_recip_whitelist_sender_lookup_tables (although
EJ> | it is marked as deprecated)

Reply via email to