Сделать постфикс, отклонить входящую почту, подделанную как от моего собственного домена

У меня есть сервер 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
Другие вопросы по тегам