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");
}
}