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

Проблемы с добавлением отправителей в белый список в Amavis-new

Я CentOS6 сервер с Amavis 2.9.1 + Postfix 2.6.6 + clamav 0.99, который я использую как почтовый ретранслятор (он же почтовый шлюз), с сетью, установленной следующим образом: eth0 (10.10.132.104) так как внешний интерфейс eth1 (10.10.133.104) так как внутренний интерфейс (откуда он доставляет почту внутренним пользователям или откуда приходит исходящая почта)

Я установил postfix со следующим файлом master.cf (вставляю только нужные части):

#smtp   inet    n       -       y       -       -       smtpd
10.10.133.104:smtp      inet    n       -       y       -       -       smtpd
  -o smtpd_client_restrictions=permit_mynetworks,reject
  -o cleanup_service_name=no-headerchecks
  -o content_filter=
127.0.0.1:smtp  inet    n       -       y       -       -       smtpd
   -o smtpd_client_restrictions=permit_mynetworks,reject
   -o cleanup_service_name=no-headerchecks
   -o content_filter=
10.10.132.104:smtp      inet    n       -       y       -       -       smtpd

127.0.0.1:10025 inet n    -       y       -       -     smtpd
   -o content_filter=
   -o smtpd_delay_reject=no
   -o smtpd_client_restrictions=permit_mynetworks,reject
   -o smtpd_helo_restrictions=
   -o smtpd_sender_restrictions=
   -o smtpd_recipient_restrictions=permit_mynetworks,reject
   -o smtpd_data_restrictions=reject_unauth_pipelining
   -o smtpd_end_of_data_restrictions=
   -o smtpd_restriction_classes=
   -o mynetworks=127.0.0.0/8,10.0.0.0/8
   -o smtpd_error_sleep_time=0
   -o smtpd_soft_error_limit=1001
   -o smtpd_hard_error_limit=1000
   -o smtpd_client_connection_count_limit=0
   -o smtpd_client_connection_rate_limit=0
   -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters,no_address_mappings
   -o local_header_rewrite_clients=
   -o smtpd_milters=
   -o local_recipient_maps=
   -o relay_recipient_maps=
….
….
amavisfeed unix    -       -       n        -      2     lmtp
   -o lmtp_data_done_timeout=1200
   -o lmtp_send_xforward_command=yes
   -o disable_dns_lookups=yes
   -o max_use=20

С другой стороны, amavis на данный момент работает только с почтой, поступающей из внешней сети. В main.cf amavisfeed указан как фильтр по умолчанию:

...
content_filter=amavisfeed:[127.0.0.1]:10024
...

Моя основная цель в amavis - заблокировать все (кроме вирусов, плохих заголовков и т. Д.) запрещенные файлы, включая .zip и .rar, но исключение для некоторых отправителей.

Итак, в моем amavis.conf я изменил $ banned_filename_re, добавив строку так, чтобы она гласила:

  qr'^\.(zip|rar)$'i,                            # block zip and rar type 

Блокировка работает нормально, пока я не использую какой-нибудь фильтр «bypass_», чтобы избежать блокировки, когда некоторые письма приходят от некоторых отправителей. Используя следующий банк полисов (например, мой домен - test.mydomain.com):

read_hash(\%whitelist_sender, '/etc/amavisd/whitelist');
@whitelist_sender_maps = (\%whitelist_sender);

$interface_policy{'10024'} = 'EXTERNAL';

# regular incoming mail, originating from anywhere (usually from outside)
$policy_bank{'EXTERNAL'} = {
  # # just use global settings, no special overrides
  log_level => 4,
  auth_required_release => 0,  # do not require secret_id for amavisd-release
   bypass_banned_checks_maps => [[qw( recip1@example.com user@libero.it user@test.mydomain.com )]],
};

Теперь предположим, что внешний пользователь «user@libero.it"Отправляет письмо на мой внутренний пользователь «user@test.mydomain.com»С вложением .zip. Он проходит успешно, но ПОТОМУ ЧТО ПОЛУЧИТЕЛЬ СООТВЕТСТВУЕТ (и не ОТПРАВИТЕЛЬ) ..: Из журнала:

….
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) dkim: public key s=s2014 d=libero.it k=rsa, 2048-bit key
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) dkim: VALID Author+Sender+MailFrom signature by d=libero.it, From:
<user@libero.it>, a=rsa-sha256, c=relaxed/relaxed, s=s2014, i=@libero.it
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) Original mail size: 5472196; quota set to: 524288000 bytes (fmin=5,
fmax=500, qmin=102400, qmax=524288000)
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) Checking: xeO-t6yJ68dS EXTERNAL [212.48.25.196] <user@libero.it>-> <user@test.mydomain.com>
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) 2822.From: <user@libero.it>
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) lookup_acl(user@test.mydomain.com) matches key ".test.mydomain.com", result=1
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) lookup [local_domains] => true,  "user@test.mydomain.com" matches, result="1", matching_key=".test.mydomain.com"
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) lookup [bypass_virus_checks] => undef, "user@test.mydomain.com" does not match
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) lookup_acl(user@test.mydomain.com) matches key "user@test.mydomain.com", result=1
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) lookup => true,  "user@test.mydomain.com" matches, result="1", matching_key="user@test.mydomain.com"
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) lookup [bypass_spam_checks] => undef, "user@test.mydomain.com" does not match
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) Extracting mime components from a file

Фактически, если я изменю строку bypass_banned_checks_maps, чтобы читать:

   bypass_banned_checks_maps => [[qw( recip1@example.com user@libero.it )]],

и я повторно отправляю то же письмо, отправитель не в белом списке, а почта заблокирован (ЗАПРЕЩЕНО и ЗАПРЕЩЕНО) и помещено в карантин:

…...
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) Checking: lCsEqup1nnwy EXTERNAL [212.48.25.196] <user@libero.it> 
-> <user@test.mydomain.com>
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) 2822.From: <user@libero.it>
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) lookup_acl(user@test.mydomain.com) matches key ".test.mydomain.com", result=1
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) lookup [local_domains] => true, "user@test.mydomain.com" matches, result="1", matching_key=".test.mydomain.com"
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) lookup [bypass_virus_checks] => undef, "user@test.mydomain.com" does not match
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) lookup_acl(user@test.mydomain.com), no match
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) lookup => undef, "user@test.mydomain.com" does not match
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) lookup [bypass_spam_checks] => undef, "user@test.mydomain.com" does not match
…...
Mar 16 15:14:58 test-mailgw postfix/lmtp[10620]: 64B778287E: to=<user@test.mydomain.com>, relay=127.0.0.1[127.0.0.1]:10024, delay=2.1, delays=0.63/0.01/0.01/1.4, dsn=2.5.0, status=sent (250 2.5.0 Ok <user@test.mydomain.com>, DSN was sent (554 5.7.0 Bounce, id=10611-01 - BANNED: .pdf,joomla_15_quickstart.pdf))
Mar 16 15:14:58 test-mailgw postfix/qmgr[631]: 64B778287E: removed
…….

По сути, он продолжает проверять почтовый адрес получателя, а не отправителя….

А теперь еще одно странное поведение! Если я изменю свой EXTERNAL policy_bank, используя read_hash из файла включения белого списка, где я пишу адрес в каждой строке, чтобы иметь:

И я отправляю то же письмо, что и в предыдущем примере (внешнее «user@libero.it"К моему внутреннему"user@test.mydomain.com" ), Я получил:

…...
Mar 16 15:36:32 test-mailgw amavis[11088]: (11088-01) Checking: S6fD-MRTCySL EXTERNAL [212.48.25.196] <user@libero.it> -> <user@test.mydomain.com>
Mar 16 15:36:32 test-mailgw amavis[11088]: (11088-01) 2822.From: <user@libero.it>
Mar 16 15:36:32 test-mailgw amavis[11088]: (11088-01) lookup_acl(user@test.mydomain.com) matches key ".test.mydomain.com", result=1
Mar 16 15:36:32 test-mailgw amavis[11088]: (11088-01) lookup [local_domains] => true,  "user@test.mydomain.com" matches, result="1",matching_key=".test.mydomain.com"
Mar 16 15:36:32 test-mailgw amavis[11088]: (11088-01) lookup [bypass_virus_checks] => undef, "user@test.mydomain.com" does not match
Mar 16 15:36:32 test-mailgw amavis[11088]: (11088-01) lookup: (scalar) matches, result="@whitelist_sender_maps"
Mar 16 15:36:32 test-mailgw amavis[11088]: (11088-01) lookup => true, "user@test.mydomain.com" matches, result="@whitelist_sender_maps", matching_key="(constant:@whitelist_sender_maps)"
Mar 16 15:36:32 test-mailgw amavis[11088]: (11088-01) lookup [bypass_spam_checks] => undef, "user@test.mydomain.com" does not match
…..

… Письмо проходит как Чистый, и прибывает в пункт назначения. (Кроме того, почему «result =» @ whitelist_sender_maps?)

Может ли кто-нибудь мне помочь и подсказать, где и почему я ошибаюсь ???

Заранее благодарю за любую помощь. Габо

Кажется, это невозможно сделать только в amavis. Альтернативой могло бы быть использование отдельного банка политик, в котором отключена проверка имен запрещенных файлов, и позволить Postfix направлять электронные письма с адресов отправителей из белого списка в этот банк политик.

Базовая реализация может быть выполнена следующим образом:

Добавьте в amavisd.conf следующее:

$interface_policy{'10026'} = 'NOBANNED';

$policy_bank{'NOBANNED'} = {
  # # just use global settings, no special overrides
  log_level => 4,
  auth_required_release => 0,
  bypass_banned_checks_maps => [1],
};

Создать файл /etc/postfix/whitelist_filter, с содержанием вроде:

whitelisted@sender.com  FILTER smtp:[127.0.0.1]:10026

Создайте хеш-файл для этого файла:

postmap hash:/etc/postfix/whitelist_filter

И добавляем строку

check_client_access hash:/etc/postfix/whitelist_filter

где-то в smtpd_recipient_restrictions в /etc/postfix/main.cf.