Сервер правильно принимает / отклоняет логины с помощью механизма аутентификации dovecot, но после этого я могу притворяться кем угодно при отправке писем.
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
я использую этот сайт для тестирования, потому что это удобно и с --verbose показывает мне все сообщение, кроме тела сообщения.
Это журнал связи, очевидно, с цензурой для идентификации и пароля.
> 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@virtualdomainA@example.com succeeded
> MAIL FROM: <userB@example.com>
[250] '2.1.0 Ok'
> RCPT TO: <realremote@example.net>
[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'
Письмо действительно было отправлено так, как будто я был userB@example.com
Вторая вероятная проблема мы видим, что он добавляет реальный домен к виртуальному, хотя append_at_myorigin
следует отключить его. Документы не особо помогли. Они даже не предлагают, на что должна напоминать таблица поиска. Мне пришлось научиться этому откуда-то еще.
Как я вижу, вы ожидаете, что пользователь не сможет отправить имя другого пользователя, потому что вы поместили reject_sender_login_mismatch в smtpd_sender_restrictions
. Да, это должно сработать.
К сожалению, вы положили reject_sender_login_mismatch после allow_sasl_authenticated. Основываясь на логике постфикса, если ваш клиент успешно вошел в систему через SASL, он не будет проверяться на reject_sender_login_mismatch потому что он успешно прошел ограничение allow_sasl_authenticated.
Решение - изменить порядок ограничений согласно официальной документации Postfix.
smtpd_sender_restrictions =
...other restriction...
reject_sender_login_mismatch,
permit_sasl_authenticated,
...other restriction...