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

13752
dataless

У меня есть сервер 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 без аутентификации.

6

3 ответа на вопрос

7
nKn

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

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

2
ThatGuy

Если вы включите службу отправки сообщений 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
dataless

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

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

Похожие вопросы