Я 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 из файла включения белого списка, где я пишу адрес в каждой строке, чтобы иметь:
мой / и т.д. / amavisd / белый список файл следующего содержания:
user1@externaldomain1.tld externaldomain2.tld
и мой amavisd.confС полис банка следующим образом:
… ... read_hash (\% whitelist_sender, '/ etc / amavisd / whitelist'); @whitelist_sender_maps = (\% whitelist_sender);
$ interface_policy {'10024'} = 'ВНЕШНИЙ';
$ policy_bank {'EXTERNAL'} = {log_level => 5, auth_required_release => 0, # не требовать secret_id для amavisd-release bypass_banned_checks_maps => ['@whitelist_sender_maps'],
}; ….
И я отправляю то же письмо, что и в предыдущем примере (внешнее «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
.