O seu servidor de E-mails já está pronto.
Mas, seria muito bom criar alguns filtros básicos de corte de lixo eletrônico:
Todos os filtros anti-Spam, nós devemos criar usando os arquivos de eventos (regras) do Selor.
# cd /usr/local/selor
BLACKLIST mundial e SPF
Crie o arquivo referente ao evento Event.from (
/usr/local/selor/rules_from) e coloque o seguinte conteúdo:
Auth? Stop!
Ip? "127.0.0.1" Stop!
Ip? "192.168.0.0/24" Stop!
# -- Fazendo teste de SPF --
Spf_test!
Spf_resp? "3" Reply! "550 Recusado por nao passar no SPF" Deny!
Spf_resp? "4" Reply! "550 Recusado por nao passar no SPF" Deny!
# -- Checando por BLACKLIST mundial --
Rbl_test! "b.barracudacentral.org zen.spamhaus.org"
Itest? "%R>0" Reply! "550 Voce esta listado em %R Blacklists. Resp: %T" Deny!
# ---- FIM DO ARQUIVO ---
Para maiores explicações do que é cada opção, dê uma olhada na documentação do Selor.
Testes no Helo/Ehlo
Primeiro você precisa ter em mente, qual é o IP do seu servidor na Internet. No exemplo abaixo, vou supor que o IP do meu servidor seja
240.240.240.240 e seu nome seja
srv1.meuservidordemails.com.
Abra o arquivo referente ao evento Event.connection (
/usr/local/selor/rules_connection) e coloque o seguinte conteúdo no FINAL do arquivo:
!Ip? "240.240.240.240" !Ip? "127.0.0.1" Find_str? "%h:127.0.0.1" Deny!
!Ip? "240.240.240.240" !Ip? "127.0.0.1" Find_str? "%h:srv1.meuservidordemails.com" Deny!
Limitar e-mails nulos
A regra é: remetente nulo não pode enviar um E-mail para mais de um destinatário.
Crie o arquivo referente ao evento Event.rcpt (
/usr/local/selor/rules_rcpt) e coloque o seguinte conteúdo:
From? "" Itest? "%n>1" Reply! "550 Muitos destinatarios para um remetente anonimo" Deny!
Controlar quem pode especificar um domínio interno:
Pense o seguinte: quando algum host que não se autenticou e não pertence a nossa rede local ou de servidores, conecta-se em nosso servidor SMTP para entregar uma mensagem e diz que o endereço do remetente é justamente uma conta do NOSSO servidor, a probabilidade disso ser um Spam é 99,99%.
Podemos fazer o Selor cortar isso, testando se o endereço do remetente é interno e se não foi um IP da rede local ou autenticado que está tentando enviá-lo:
Digamos que a rede dos meus servidores sejam 240.240.240.0/24.
Coloque a linha abaixo antes das regras de SPF (as que você adicionou mais acima) do arquivo
/usr/local/selor/rules_from:
Internal_from? !Auth? !Ip? "127.0.0.1" !Ip? "192.168.0.0/24" !Ip? "240.240.240.0/24" Reply! "550 Voce precisa autenticar-se" Deny!
A regra acima, primeiro testa se o remetente é um domínio interno, se for, o Selor vai testar se a conexão NÃO é autenticada. Depois, se não partiu do 127.0.0.1, se não partiu da rede 192.168.0.0/24 e se não partiu da rede de meus servidores 240.240.240.0/24 e então, responde que ele precisa se autenticar para poder
enviar.
Acreditem. Isto corta bastante lixo.
Obs.: nos arquivos de eventos (regras), todas as opções terminadas com "?", são CONDIÇÕES e as terminadas com "!", são AÇÕES. Mas, a "!" logo na frente de cada CONDIÇÃO, na verdade é um NEGADOR, ele inverte o sentido do teste, ou seja, "Auth?" é verdadeira se a conexão É autenticada e "!Auth?" é verdadeira se a conexão NÃO é autenticada.
Você pode usar as condições e ações do Selor para fazer qualquer coisa, se quiser, pode até fazer um Log de tudo que foi cortado e o motivo, usando a ação "Log!" e executar programas externos com a ação "Exec!". Consulte a documentação do Selor e seu fórum.
O Selor tem mecanismos de defesa contra DoS também, através do evento
Event.Limit, mas não vou especifica-lo aqui, para não estender muito o artigo, consulte na documentação do projeto caso você sofra esse tipo de ataque.