O postfix SMTP autenticado pode enviar como qualquer um

4

O servidor aceita / rejeita corretamente os logins através do mecanismo de autenticação do dovecot, mas depois disso eu posso fingir ser alguém ao enviar e-mails.

smtpd_sender_login_maps = texthash:/etc/postfix/permmap
append_at_myorigin=no

smtpd_helo_restrictions =
     permit_mynetworks,
     reject_non_fqdn_helo_hostname,
     reject_invalid_helo_hostname,
     #reject_unknown_helo_hostname,
     permit

smtpd_sender_restrictions =
     permit_sasl_authenticated,
     permit_mynetworks,
     reject_sender_login_mismatch,
#     reject_non_fqdn_sender,
     reject_unknown_sender_domain,
     permit

smtpd_client_restrictions =
     permit_mynetworks,
     permit_sasl_authenticated,
     reject_unauth_pipelining,
     reject_rbl_client bl.spamcop.net,
     reject_rbl_client zen.spamhaus.org,
     permit

Eu uso este site para teste, porque é conveniente e com --verbose me mostra o toda a comunicação, exceto o corpo da mensagem.

Este é o log de comunicação, obviamente com identificação de material e senha censurada

> EHLO localhost
[250] 'example.com'
[250] 'PIPELINING'
[250] 'SIZE 104857600'
[250] 'ETRN'
[250] 'AUTH PLAIN LOGIN'
[250] 'ENHANCEDSTATUSCODES'
[250] '8BITMIME'
[250] 'DSN'
AUTH method (PLAIN LOGIN): using LOGIN
> AUTH LOGIN
[334] 'VXNlcm5hbWU6'
> dXNlckFAdmlydHVhbGRvbWFpbkE=
[334] 'UGFzc3dvcmQ6'
> dGhlcGFzc3dvcmQ=
[235] '2.7.0 Authentication successful'
Authentication of userA@[email protected] succeeded
> MAIL FROM: <[email protected]>
[250] '2.1.0 Ok'
> RCPT TO: <[email protected]>
[250] '2.1.5 Ok'
> DATA
[354] 'End data with <CR><LF>.<CR><LF>'
[250] '2.0.0 Ok: queued as 73519140287'
> QUIT
[221] '2.0.0 Bye'

O email foi realmente enviado como se eu fosse [email protected]

O segundo problema provável que vemos lá, é que ele anexa seu domínio real ao virtual, mesmo que append_at_myorigin deva desativá-lo. Os documentos não ajudaram muito. Eles nem sequer sugerem o que a tabela de consulta deve se assemelhar. Eu tive que aprender isso de outro lugar.

    
por coladict 20.12.2014 / 14:33

1 resposta

8

Como posso ver, sua expectativa é de que o usuário não possa enviar outro usuário porque você colocou reject_sender_login_mismatch em smtpd_sender_restrictions . Sim, isso deve funcionar.

Infelizmente, você coloca reject_sender_login_mismatch após permit_sasl_authenticated . Com base na lógica do postfix, se o seu cliente efetuar login com êxito por meio do SASL, ele não será verificado em relação ao reject_sender_login_mismatch porque ele passará com êxito a restrição permit_sasl_authenticated .

A solução é reordenar as restrições de acordo com a documentação oficial do Postfix .

smtpd_sender_restrictions = 
    ...other restriction...
    reject_sender_login_mismatch,
    permit_sasl_authenticated,
    ...other restriction...
    
por 20.12.2014 / 16:11