Rejeitar e-mails recebidos que usam seu próprio domínio como remetente

6

Seria bom rejeitar os e-mails recebidos que usam um dos meus domínios virtuais como endereço do remetente, mesmo não sendo um usuário legítimo.

Sei que posso rejeitar os e-mails recebidos que usam um nome de conta / alias existente usando smtpd_sender_restrictions=reject_sender_login_mismatch , mas isso ainda permite que invasores usem um endereço de e-mail inexistente em um dos meus domínios virtuais. (O que é favorecido em relação à detecção de spam).

Qual é a melhor maneira de rejeitar e-mails recebidos que usam um dos meus domínios virtuais e não estão autenticados para isso?

O SPF e o DKIM são configurados, mas configurados para o SoftFail, devido a problemas com listas de correio e encaminhamentos. Não estou procurando SPF ou DKIM, mas uma solução para o servidor de pós-instalação que é o MX dos domínios acima mencionados.

    
por Zulakis 05.05.2015 / 16:14

4 respostas

7

Eu encontrei dois métodos possíveis, mas talvez haja uma maneira melhor.

1º método:

smtpd_sender_restrictions =
    reject_sender_login_mismatch,
    permit_sasl_authenticated,
    permit

Agora modifiquei meu smtpd_sender_login_maps para retornar uma entrada de admin se o domínio existir na tabela de domínios. Dessa forma, um registro é retornado, mesmo quando o emailadress não existe como maibox / alias, mas não quando um domínio externo é o endereço de saída.

table = domain
query = SELECT username AS allowedUser FROM mailbox WHERE username="%s" AND deleted_at IS NULL \
UNION SELECT goto FROM alias WHERE address="%s" AND active = 1 \
UNION select 'admin' from domain where domain = '%d'

2º método:

Essa abordagem usa uma pesquisa check_sender_access que retorna uma ação de rejeição se o domínio for virtual e o usuário não for sasl_authenticated .

smtpd_sender_restrictions =
    reject_sender_login_mismatch,
    permit_sasl_authenticated,
    check_sender_access proxy:mysql:$config_directory/mysql_reject_virtual_domains.cf,
    permit

mysql_reject_virtual_domains.cf :

table = domain
query = select 'Reject 530 SMTP authentication is required' from domain where domain = '%d'

3º método (graças a masegaloeh ):

smtpd_sender_restrictions =
    reject_sender_login_mismatch,
    permit_sasl_authenticated
    reject_unlisted_sender,
    permit

Não sei quantas consultas de carga de código / SQL reject_unlisted_sender geram, pois verifica muitas coisas:

Solicite que o servidor SMTP Postfix rejeite e-mails de endereços de remetentes desconhecidos, mesmo quando nenhuma restrição explícita de reject_unlisted_sender for especificada. Isso pode retardar uma explosão de e-mails forjados de worms ou vírus.

Um endereço é sempre considerado "conhecido" quando corresponde a um alias virtual (5) ou a um mapeamento canônico (5).

  • O domínio do remetente corresponde a $ mydestination, $ inet_interfaces ou $ proxy_interfaces, mas o remetente não está listado em $ local_recipient_maps e $ local_recipient_maps não é nulo.
  • O domínio do remetente corresponde a $ virtual_alias_domains, mas o remetente não está listado em $ virtual_alias_maps.
  • O domínio do remetente corresponde a $ virtual_mailbox_domains, mas o remetente não está listado em $ virtual_mailbox_maps e $ virtual_mailbox_maps não é nulo.
  • O domínio do remetente corresponde a $ relay_domains, mas o remetente não está listado em $ relay_recipient_maps e $ relay_recipient_maps não é nulo.
por 06.05.2015 / 10:58
1

Ainda outro primeiro método com consulta separada sem sindicatos:

virtual_sender_mailbox_maps.cf

query = SELECT '%s' AS email FROM domains WHERE name='%d' AND active=TRUE

main.cf

smtpd_sender_login_maps = ${proxysql}virtual_sender_mailbox_maps.cf
smtpd_sender_restrictions =
    reject_sender_login_mismatch,
    permit_sasl_authenticated,
    permit
    
por 15.11.2015 / 19:48
0

A maneira correta é configurar o SPF para o seu domínio e ativar o SPF no MTA. Em seguida, você obterá proteção não apenas para o seu próprio forjamento de domínio, mas também para todos os outros domínios com o SPF ativado.

    
por 05.05.2015 / 16:49
0

Você deve tentar implementar pelo menos um dos seguintes (ambos são melhores):

por 05.05.2015 / 16:55