Назад | Перейти на главную страницу

Как настроить amavisd-new для сканирования только определенных отправителей / серверов?

Я хотел бы знать, как настроить amavisd-new для сканирования только спама на определенных клиентах (IP-адреса, CIDR или имена хостов) или, альтернативно, в домене электронной почты отправителя.

Я знаю, что это можно сделать с почтовым адресом получателя, но не о том, как это сделать с почтовым адресом отправителя. Это даже возможно сделать на IP-адресе получателя с помощью банков политики. Но мой подход должен заключаться в том, чтобы быть независимым от получателя и передавать только отправителю.

Я хочу сканировать только письма, исходящие от Yahoo, Google, Hotmail и других крупных отправителей. Таким образом, легче настроить, каких отправителей следует наблюдать, чем тех, которых не следует.

Я знаю, что этого легче достичь на стороне MTA, но это не часть вопроса, потому что я уже предлагаю решение на стороне MTA. Я хочу сделать это на amavisd-new. И это не помогает знать, как помещать отправителей в белый список, поскольку это все равно означает, что почта проходит все сканирование, но затем получает высокую отрицательную оценку. Почту вообще не следует сканировать, если только ее не отправят крупные игроки.

Итак, какие параметры в amavisd-new являются правильными, чтобы включить сканирование для определенных отправителей и только для них?

Белый список Amavisd для всех, кроме определенного домена

Вам нужен whitelist_sender_map (Вот) с использованием регулярного выражения (Вот)

Добавить в белый список все, кроме Domain.X

@whitelist_sender_maps = ( new_RE(
    qr'@(?!(gmail\.com$|hotmail\.com$|aol\.com$))'i
));

Добавить в белый список все, кроме домена и субдомена X

@whitelist_sender_maps = ( new_RE(
    qr'[@.](?!(gmail\.com$|hotmail\.com$|aol\.com$))'i
));

Изменение

Например, добавление msn.com в исключение из белого списка

@whitelist_sender_maps = ( new_RE(
    qr'[@.](?!(gmail\.com$|hotmail\.com$|aol\.com$|msn\.com$))'i
));

Не нарушайте это правило на несколько правил, это не то, чего вы хотите

Нарушение правил в 2 или более строках внесет ВСЕ В БЕЛЫЙ СПИСОК !!

(Если возможно, я выделю этот раздел красным)

Проще говоря, белый список - это последовательная проверка, по одной строке / правилу за раз.

Давайте посмотрим на следующие НЕПРАВИЛЬНО пример

# DO NOT COPY THIS
@whitelist_sender_maps = ( new_RE(
    qr'@(?!(gmail\.com$|hotmail\.com$))'i,
    qr'@(?!(aol\.com$|msn\.com$))'i
));
# DO NOT COPY THIS
  1. Все, что написано на msn.com, пройдет, потому что первая строка возвращает ПРАВДА, и проверка остановится.
  2. Все данные с gamil.com пройдут, потому что после неудачной первой строки amavisd перейдет на вторую строку, которая вернется ПРАВДА.
  3. А что насчет домена, которого нет в списке? Они пройдут. Это намерение правила!

В итоге вы заносите в белый список всех отправителей !!

Программа тестирования Perl

#!/usr/bin/perl

use strict;

# Reject Domain & Sub-Domain
#my $REGinfo='==Reject Domain & Sub-Domain=='
#my $REG=qr'[@.](?!(gmail\.com$|hotmail\.com$|aol\.com$))'i;

# Exact domain only
my $REGinfo='==Exact Domain Only==';
my $REG=qr'@(?!(gmail\.com$|hotmail\.com$|aol\.com$))'i;

print $REGinfo."\n";
print '$REG='.$REG."\n\n";

my @strTest = (
    'test@hotmail.com',
    'test@gmail.com',
    'test@aol.com',
    'test@msn.com',
    'test@yahoo.com',
    'test@yahoo.aol.com',
    'aol.com@somethingelse.com'
);

for my $i (0 .. $#strTest){
    if ($strTest[$i] =~ $REG) {
        print ("Pass $strTest[$i]\n");
    }
    else {
        print ("Fail $strTest[$i]\n");
    }
}