6

У меня есть сервер 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 ответа3

7

Могу ли я добавить элемент конфигурации быстрого постфикса, который бы отклонял входящую электронную почту 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 .

Как вы можете видеть, есть много способов, возможно, вы сможете найти комбинацию из них, которая подходит для вашего случая и остановить все поддельные попытки.

4

Если вы включите службу отправки сообщений 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 странице справочного руководства для получения подробной информации.

Запустите 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
0

Я нашел один способ ее решить, хотя мне любопытно, есть ли у кого-то более прямой / простой ответ.

Я использовал параметр 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: пользователь должен войти в систему".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .