Eu tenho um servidor CentOS6 com Amavis 2.9.1 + Postfix 2.6.6 + clamav 0.99 que eu uso como mail relay (também conhecido como mail gateway ), com rede definida da seguinte forma:
eth0 ( 10.10.132.104 ) como inteface externa
eth1 ( 10.10.133.104 ) como interface interna (onde é enviado correio para usuários internos ou emails de saída)
Eu instalei o postfix com o seguinte master.cf (eu colo apenas partes de rilevant):
#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
Em outras mãos, o amavis no momento só age em emails recebidos da rede externa.
Em main.cf, o amavisfeed é especificado como padrão de filtro:
...
content_filter=amavisfeed:[127.0.0.1]:10024
...
Meu objetivo principal, em amavis, é bloquear todos (além de vírus, cabeçalhos ruins, etc.) arquivos proibidos , incluindo .zip e .rar , mas alguma exceção de remetentes.
Então, no meu amavis.conf, eu mudei $ banned_filename_re, adicionando uma linha para que ela seja lida:
qr'^\.(zip|rar)$'i, # block zip and rar type
O bloco funciona bem, até que eu use um filtro “bypass_” para evitar bloqueio quando alguns e-mails são recebidos de alguns remetentes.
Usando o seguinte banco de políticas (por exemplo, meu domínio é “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( [email protected] [email protected] [email protected] )]],
};
Agora, suponha que usuário externo “ usuá[email protected] ” envie um e-mail para meu usuário interno “ usuário @ teste .mydomain.com ”com um anexo .zip.
Passa com sucesso, mas PORQUE O RECIPIENTE ESTÁ CORRESPONDENTE (e não o SENDER ) ..:
Do log:
….
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:
<[email protected]>, a=rsa-sha256, c=relaxed/relaxed, s=s2014, [email protected]
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] <[email protected]>-> <[email protected]>
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) 2822.From: <[email protected]>
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) lookup_acl([email protected]) matches key ".test.mydomain.com", result=1
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) lookup [local_domains] => true, "[email protected]" matches, result="1", matching_key=".test.mydomain.com"
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) lookup [bypass_virus_checks] => undef, "[email protected]" does not match
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) lookup_acl([email protected]) matches key "[email protected]", result=1
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) lookup => true, "[email protected]" matches, result="1", matching_key="[email protected]"
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) lookup [bypass_spam_checks] => undef, "[email protected]" does not match
Mar 16 14:58:57 test-mailgw amavis[10230]: (10230-01) Extracting mime components from a file
De fato, se eu alterar a linha bypass_banned_checks_maps, leia:
bypass_banned_checks_maps => [[qw( [email protected] [email protected] )]],
e reenviado o mesmo e-mail, o remetente não está na lista de permissões e o e-mail é bloqueado (BANNED e BOUNCED) e colocado em quarentena:
…...
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) Checking: lCsEqup1nnwy EXTERNAL [212.48.25.196] <[email protected]>
-> <[email protected]>
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) 2822.From: <[email protected]>
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) lookup_acl([email protected]) matches key ".test.mydomain.com", result=1
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) lookup [local_domains] => true, "[email protected]" matches, result="1", matching_key=".test.mydomain.com"
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) lookup [bypass_virus_checks] => undef, "[email protected]" does not match
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) lookup_acl([email protected]), no match
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) lookup => undef, "[email protected]" does not match
Mar 16 15:14:57 test-mailgw amavis[10611]: (10611-01) lookup [bypass_spam_checks] => undef, "[email protected]" does not match
…...
Mar 16 15:14:58 test-mailgw postfix/lmtp[10620]: 64B778287E: to=<[email protected]>, 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 <[email protected]>, 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
…….
Pelo contrário, ele continua verificando o endereço de e-mail do destinatário em vez do remetente.
E agora, mais um comportamento mais estranho e mais estranho! Se eu alterar meu policy_bank EXTERNAL, usando read_hash de um arquivo de inclusão da lista de desbloqueio, onde eu escrevo um endereço por linha, para ter:
-
meu arquivo / etc / amavisd / whitelist que lê como segue:
[email protected]
externaldomain2.tld
-
e o banco de políticas do amavisd.conf da seguinte forma:
...
read_hash (\% whitelist_sender, '/ etc / amavisd / whitelist');
@whitelist_sender_maps = (\% whitelist_sender);
$ interface_policy {'10024'} = 'EXTERNAL';
$ policy_bank {'EXTERNAL'} = {
log_level = > 5,
auth_required_release = > 0, # não requer secret_id para o lançamento do amavisd
bypass_banned_checks_maps = > ['@whitelist_sender_maps'],
};
….
E eu envio o mesmo e-mail do exemplo anterior (externo “ [email protected] ” para o meu “ [email protected] ”), eu obtenha:
…...
Mar 16 15:36:32 test-mailgw amavis[11088]: (11088-01) Checking: S6fD-MRTCySL EXTERNAL [212.48.25.196] <[email protected]> -> <[email protected]>
Mar 16 15:36:32 test-mailgw amavis[11088]: (11088-01) 2822.From: <[email protected]>
Mar 16 15:36:32 test-mailgw amavis[11088]: (11088-01) lookup_acl([email protected]) matches key ".test.mydomain.com", result=1
Mar 16 15:36:32 test-mailgw amavis[11088]: (11088-01) lookup [local_domains] => true, "[email protected]" matches, result="1",matching_key=".test.mydomain.com"
Mar 16 15:36:32 test-mailgw amavis[11088]: (11088-01) lookup [bypass_virus_checks] => undef, "[email protected]" 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, "[email protected]" 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, "[email protected]" does not match
…..
... o email passa como Limpar e chega ao seu destino. (Além disso, por que "result =” @ whitelist_sender_maps "?)
Alguém poderia me ajudar e me sugerir onde e por que estou enganando ???
Agradecemos antecipadamente por qualquer ajuda.
Gabo