Сделать постфикс, отклонить входящую почту, подделанную как от моего собственного домена
У меня есть сервер postfix, правильно настроенный, чтобы разрешить входящую почту в мой домен и требовать аутентификацию для отправки почты в любую другую сеть.
У большого количества спама, который я получаю, есть поддельный адрес "от" несуществующих пользователей в моем собственном домене. SPF может остановить это, и у меня настроен SPF в DNS, но я не уверен, что хочу пойти по пути полной блокировки всех сбоев SPF на уровне SMTP.
Могу ли я добавить элемент конфигурации быстрого постфикса, который бы отклонял входящую электронную почту FROM mydomain и не проходил аутентификацию?
Чтобы быть очень конкретным, это мой постфиксный conf:
smtpd_relay_restrictions = permit_sasl_authenticated, reject_unauth_destination
smtpd_recipient_restrictions =
permit_sasl_authenticated,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_rhsbl_sender dbl.spamhaus.org,
permit
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_helo_restrictions = reject_unknown_helo_hostname, reject_invalid_helo_hostname
все еще можно подключиться к порту 25 и
MAIL FROM: foo@mydomain.com
RCPT TO: bar@mydomain.com
без аутентификации.
3 ответа
Если вы включите службу отправки сообщений Postfix (на порту 587), вы можете отделить "отправку сообщения от ретранслятора сообщений, позволяя каждой службе работать в соответствии со своими собственными правилами (для безопасности, политики и т. Д.)" ( RFC 4409).
При такой конфигурации, поскольку законные пользователи должны аутентифицироваться, чтобы использовать порт 587 для отправки сообщений, вы можете безопасно отклонять поддельную, не прошедшую проверку подлинности почту, отправленную через порт 25.
Чтобы включить (аутентифицированную SASL) отправку сообщений через порт 587, добавьте следующий раздел в master.cf Postfix:
submission inet n - n - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_sender_login_maps=hash:/etc/postfix/virtual
-o smtpd_sender_restrictions=reject_sender_login_mismatch
-o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject
( Источник)
Затем создайте таблицу доступа Postfix (в /etc/postfix/access), указав, как Postfix должен отвечать определенным отправителям:
allow_this_for_some_reason@mydomain.com OK
keep_in_hold_queue@mydomain.com HOLD
mydomain.com REJECT
Увидеть access
Страница man для деталей.
Бежать postmap
в файле доступа (для создания индексированной таблицы поиска):
postmap /etc/postfix/access
Добавьте соответствующие ограничения отправителя в main.cf:
smtpd_sender_restrictions = permit_sasl_authenticated,
check_sender_access hash:/etc/postfix/access
Наконец, перезагрузите новую конфигурацию. В системах на основе Debian это делается с помощью:
sudo service postfix reload
Могу ли я добавить элемент конфигурации быстрого постфикса, который бы отклонял входящую электронную почту FROM mydomain и не проходил аутентификацию?
Не так быстро, но вы можете реализовать простую политику SMTPd и выбрать sender
а также sasl_username
и проверьте, приходит ли первый из вашего домена, а второй существует и также из вашего домена, если да, верните DUNNO
, иначе, REJECT
, Таким образом вы гарантируете, что для любой входящей почты, если она от ваших пользователей, она должна быть аутентифицирована SASL.
Чтобы быть очень конкретным, это мой постфиксный conf:
Есть несколько дополнительных предметов, которые вы можете добавить в свой smtpd_recipient_restrictions
Политика, чтобы попытаться остановить спам и в то же время улучшить вашу безопасность:
smtpd_sender_restrictions =
permit_mynetworks
reject_unknown_sender_domain
reject_sender_login_mismatch
reject_unauth_pipelining
reject_non_fqdn_sender
permit
Что означает, что каждый может быть найден на странице параметров конфигурации Postfix.
Есть несколько дополнительных элементов, которые вы можете включить, чтобы остановить спам:
SPF
является одним из них, но я согласен с тем, что блокирование любого несоответствующего теста довольно тяжело, учитывая, что некоторые плохо реализованные почтовые списки отправляют электронные письма с оригинальным адресом отправителя со своих серверов, поэтому они терпят неудачу.DKIM
также очень мощный (проверьтеOpenDKIM
).SpamAssassin
может быть очень полезным в этом случае. Он не будет блокировать почту, но будет добавлен заголовок спама и, следовательно, будет классифицирован так.Вы не предоставили сообщение Postfix об одной из этих поддельных попыток, но вы можете проверить, исходят ли они с одного и того же IP-адреса или хотя бы с конкретного адреса CIDR, и поместить их в черный список с помощью
smtpd_client_restrictions
параметр.То же самое может быть применено к
HELO/EHLO
сообщение и может быть помещено вsmtpd_helo_restrictions
,
Как видите, есть много способов, может быть, вы сможете найти их комбинацию, которая подходит для вашего случая, и остановить все поддельные попытки.
Я нашел один способ ее решить, хотя мне любопытно, есть ли у кого-то более прямой / простой ответ.
Я использовал reject_sender_login_mismatch
установка так, чтобы, если postfix мог найти сопоставление от адреса "FROM" к имени пользователя, он требует, чтобы это имя пользователя было аутентифицировано.
Затем задача состоит в том, чтобы создать карту, которая обрабатывает все адреса @mydomain, но которая правильно позволяет локальным пользователям отправлять почту для своего адреса.
На моей конкретной конфигурации я использую
virtual_alias_maps = sqlite:/etc/postfix/db-public-alias.cf pcre:/etc/postfix/db-public-alias-regex.cf
сопоставить адреса с реальными пользователями.
Я добавил другую адресную базу pcre:/etc/postfix/db-sender-logins-fallback.cf
который имеет регулярное выражение из всех моих доменов для моего основного пользователя. Итак, теперь в сочетании:
smtpd_sender_login_maps = sqlite:/etc/postfix/db-public-alias.cf pcre:/etc/postfix/db-public-alias-regex.cf pcre:/etc/postfix/db-sender-logins-fallback.cf
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_sender_login_mismatch
каждый псевдоним может быть отправлен только от пользователя, которому он направлен, а все остальные адреса в моих доменах могут быть отправлены только из моей основной учетной записи пользователя, и поэтому любой спамер пытается отправить FROM: мой домен не будет выполнен, потому что они не зарегистрированы во как я.
Хотя это хорошее улучшение в настройке моей почты (локальные пользователи больше не могут выдавать себя за другого), оно может быть слишком сложным для людей с очень продвинутыми настройками учетных записей пользователей. Мне все еще интересно, есть ли способ просто сказать "для этих доменов в FROM: пользователь должен войти в систему".
Мой раздел аутентификации conf. Работает хорошо:
smtpd_sender_restrictions =
reject_non_fqdn_sender
reject_sender_login_mismatch
reject_unknown_sender_domain
reject_unauth_pipelining
reject_non_fqdn_sender
reject_unlisted_sender
reject_unverified_sender
permit_sasl_authenticated
reject_unknown_reverse_client_hostname
reject_unknown_client_hostname
smtpd_recipient_restrictions =
permit_sasl_authenticated
reject_unauth_destination
reject_rbl_client zen.spamhaus.org
reject_rhsbl_reverse_client dbl.spamhaus.org
reject_rhsbl_helo dbl.spamhaus.org
reject_rhsbl_sender dbl.spamhaus.org
smtpd_relay_restrictions =
permit_sasl_authenticated
reject_unauth_destination
smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_sasl_authenticated
reject_invalid_helo_hostname
reject_non_fqdn_helo_hostname
reject_unknown_helo_hostname