Lista de permissões do Amavisd, exceto alguns domínios
O que você precisa é whitelist_sender_map ( aqui ) com expressão regular regex ( aqui )
Coloque na lista de permissões todas, exceto Domain.X
@whitelist_sender_maps = ( new_RE( qr'@(?!(gmail\.com$|hotmail\.com$|aol\.com$))'i ));
Lista branca, exceto o domínio e o subdomínio de X
@whitelist_sender_maps = ( new_RE( qr'[@.](?!(gmail\.com$|hotmail\.com$|aol\.com$))'i ));
Modificando
Por exemplo, adicionar msn.com à exceção da lista de permissões
@whitelist_sender_maps = ( new_RE( qr'[@.](?!(gmail\.com$|hotmail\.com$|aol\.com$|msn\.com$))'i ));
NÃO QUEBRE ESTA REGRA MÚLTIPLA, NÃO É O QUE VOCÊ QUER
Quebrando as regras em 2 ou mais linhas, WHITELIST TUDO !!
(vou colocar esta seção em vermelho, se possível)
Em termos simples, a lista branca é uma verificação sequencial, uma linha / regra por vez.
Vamos analisar o seguinte exemplo WRONG
# 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
- Qualquer coisa do msn.com passará, porque a primeira linha retorna TRUE e o check stop.
- Qualquer coisa do gamil.com passará, porque depois de falhar a primeira linha, o amavisd passa para a segunda linha, que retornará TRUE .
- E quanto ao domínio que não está na lista? Eles vão passar. Essa é a intenção da regra!
Você acaba colocando todos os remetentes na lista de permissões !!
Programa de teste 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 = ( '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]' ); for my $i (0 .. $#strTest){ if ($strTest[$i] =~ $REG) { print ("Pass $strTest[$i]\n"); } else { print ("Fail $strTest[$i]\n"); } }