Após comentar o @masegaloeh, encontrei uma solução. A idéia é ter um segundo servidor SMTP postfix escutando 10025 com um servidor de políticas para enviar e-mails para o servidor normal (se estiver na lista de permissões) ou para o servidor de quarentena.
A ideia estava começando como sua solução header_checks, em main.cf:
header_checks = regexp:/etc/postfix/header_checks
Em header_checks:
/^(S|s)ubject: .*!!(SPAM|BULK|SUSPECT)!!.*/ FILTER smtp:127.0.0.1:10025
Em master.cf (editado com comentários @masegaloeh):
10025 inet n - n - - smtpd
-o receive_override_options=no_header_body_checks
-o smtpd_recipient_restrictions=${my_switcher_restrictions}
policy unix - n n - 0 spawn user=nobody argv=/etc/postfix/policy-server-switcher
Isso faz com que a segunda instância do postfix substitua o uso de header_checks.
e em main.cf
my_switcher_restrictions = check_policy_service unix:private/policy
E o conteúdo do policy-server-switcher
!/bin/bash
sender=""
recipient=""
while read line
do
key=$(echo $line | cut -f1 -d=)
value=$(echo $line|cut -f2 -d=)
if [ "$key" == "sender" ]
then
sender=${value}
logger -p mail.info -t PolicyServer "Sender is: ${value}"
fi
if [ "$key" == "recipient" ]
then
recipient=${value}
logger -p mail.info -t PolicyServer "Recipient is: ${value}"
fi
if [ "x${recipient}" != "x" ] && [ "x${sender}" != "x" ]
then
if [ "$sender" == "[email protected]" ] && [ "$recipient" == "[email protected]" ]
then
echo "action=FILTER smtp:192.168.1.150"
echo
exit 0
fi
if [ "$sender" == "[email protected]" ] && [ "$recipient" == "[email protected]" ]
then
echo "action=FILTER smtp:192.168.1.150"
echo
exit 0
fi
echo "action=FILTER smtp:192.168.1.151"
echo
exit 0
fi
done
É claro que você precisará programar seu servidor de políticas para carregar a lista de desbloqueio do banco de dados ou LDAP, aqui é apenas um exemplo para obter a idéia.
Mas isso ainda tem algumas ressalvas, suponha que eu envie um e-mail com isso
From: [email protected]
Isto irá para o servidor normal para o alphamikevictor e para o thomas, desde que o último teste contra o servidor de política retorne o FILTER ao normal, mas se você colocar o alphamikevictor na segunda posição então enviará o correio para ambos os destinatários para a quarentena .