Было бы хорошо отклонить входящие электронные письма, которые используют один из моих виртуальных доменов как адрес отправителя не будучи законным моим пользователем.
Я знаю, что могу отклонить входящие электронные письма, которые используют существующее использование псевдонима/имени учетной записи smtpd_sender_restrictions=reject_sender_login_mismatch
, это действительно однако все еще позволяет взломщикам использовать несуществующий emailaddress с одним из моих виртуальных доменов. (Который одобрен в отношении обнаружения спама).
Что лучший способ состоит в том, чтобы отклонить входящую корреспонденцию, которая использует один из моих виртуальных доменов и не аутентифицируется, чтобы сделать так?
SPF, а также DKIM настроен, но настроен к SoftFail, из-за проблем с mailinglists и вперед. Я не ищу SPF или DKIM, но решение для постфиксного сервера, который является 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