Было бы неплохо отклонять входящие электронные письма, которые используют один из моих виртуальных доменов в качестве адреса отправителя, не являясь моим законным пользователем.
Я знаю, что могу отклонять входящие электронные письма, в которых используется существующий псевдоним / имя учетной записи, используя smtpd_sender_restrictions=reject_sender_login_mismatch
, однако это по-прежнему позволяет злоумышленникам использовать несуществующий адрес электронной почты с одним из моих виртуальных доменов. (Что предпочтительнее в отношении обнаружения спама).
Как лучше всего отклонять входящую почту, которая использует один из моих виртуальных доменов и не аутентифицируется для этого?
SPF и DKIM настроены, но настроены на SoftFail из-за проблем со списками рассылки и пересылками. Я ищу не SPF или DKIM, а решение для сервера postfix, который является MX вышеупомянутых доменов.
Я нашел два возможных метода, но, возможно, есть способ получше.
1-й способ:
smtpd_sender_restrictions =
reject_sender_login_mismatch,
permit_sasl_authenticated,
permit
Теперь я изменил свой smtpd_sender_login_maps
вернуть запись admin
если домен существует в таблице доменов. Таким образом, запись возвращается, даже если адрес электронной почты не существует как maibox / псевдоним, но не тогда, когда внешний домен является адресом отправителя.
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-й способ:
В этом подходе используется check_sender_access
поиск, который возвращает действие отклонения, если домен является виртуальным, а пользователь не 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-й способ (спасибо Masegaloeh):
smtpd_sender_restrictions =
reject_sender_login_mismatch,
permit_sasl_authenticated
reject_unlisted_sender,
permit
Я не знаю сколько cpu-load / SQL-запросов reject_unlisted_sender генерирует, поскольку проверяет довольно много вещей:
Запросить, чтобы SMTP-сервер Postfix отклонял почту от неизвестных адресов отправителя, даже если нет явного reject_unlisted_sender
ограничение доступа указано. Это может замедлить распространение поддельной почты от червей или вирусов.
Адрес всегда считается "известным", если он соответствует виртуальному (5) псевдониму или каноническому (5) отображению.
Вы должны попытаться реализовать хотя бы одно из следующего (лучше оба):
Правильный способ - настроить SPF для вашего домена и включить SPF в MTA. Тогда вы получите защиту не только для вашего собственного домена, но и для всех других доменов с включенным SPF.
Еще один 1-й метод с отдельным запросом без объединений:
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