6 Эффективных советов по блокировке спама электронной почты на SMTP-сервере Postfix |

6 Эффективных советов по блокировке спама электронной почты на SMTP-сервере Postfix

Мануал

В этом уроке я хотел бы поделиться с вами своими 6 советами по блокировке спама электронной почты с помощью SMTP-сервера Postfix.

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

Спам существует, потому что дешево отправлять большой объем писем в Интернете.

Postfix позволяет блокировать спам, прежде чем он попадает в ваш почтовый ящик, чтобы вы могли сэкономить полосу пропускания и дисковое пространство.

Этот пост является результатом моего опыта борьбы со спамом.

Примечание. Если вы планируете запускать свой собственный почтовый сервер, я рекомендую использовать iRedmail, что действительно упрощает процесс настройки почтового сервера. Он также поставляется с правилами защиты от спама. Если вы предпочитаете настраивать почтовый сервер с нуля, ознакомьтесь со статьями о настройке.

Характеристики спама

Ниже то,что я узнал о спаме электронной почты. Этот спам легко блокировать.

  • Их IP-адреса не содержат записей PTR.
  • Спамер не предоставляет действительное имя хоста в предложении HELO / EHLO.
  • Они обманывают сообщение MAIL FROM.
  • Как правило, они не отправляют электронную почту после неудачной доставки электронной почты.

У законных почтовых серверов никогда не должно быть таких характеристик.

Итак, вот мои 6 советов, которые будут блокировать 90% спама.

Совет № 1: Отклонить адрес электронной почты, если SMTP-клиент не имеет записи PTR

Запись PTR сопоставляет IP-адрес доменному имени.

Это аналог записи А.

В Linux вы можете запросить имя домена, связанное с IP-адресом, выполнив следующую команду:

host <IP address>

Например, следующая команда возвращает имя хоста почтового сервера Google.

host 209.85.217.172

Вывод:

172.217.85.209.in-addr.arpa domain name pointer mail-ua0-f172.google.com.

Из-за распространенности спама многие почтовые серверы требуют, чтобы SMTP-клиенты имели действительные записи PTR, связанные с их IP-адресами.

Каждый администратор почтового сервера должен установить запись PTR для своих SMTP-серверов.

Если SMTP-клиент имеет запись PTR, вы можете найти строку в журнале Postfix, как показано ниже.

connect from mail-ua0-f172.google.com[209.85.217.172]

Если у клиента SMTP нет записи PTR, имя хоста будет идентифицировано как неизвестное.

connect from unknown[120.41.196.220]

Чтобы отфильтровать электронные письма без записей PTR, откройте главный файл конфигурации Postfix.

sudo nano /etc/postfix/main.cf

Добавьте следующую строку в smtpd_sender_restrictions.

Эта директива отклоняет электронную почту, если на IP-адресе клиента нет записи PTR.

reject_unknown_reverse_client_hostname

Пример

smtpd_sender_restrictions =
   permit_mynetworks
   permit_sasl_authenticated
   reject_unknown_reverse_client_hostname

Сохраните и закройте файл. Затем перезапустите Postfix, чтобы изменения вступили в силу.

sudo systemctl restart postfix

Совет № 2: Включение ограничений имени хоста HELO / EHLO в Postfix

Некоторые спамеры не предоставляют действительное имя хоста HELO / EHLO в диалоговом окне SMTP.

Они могут быть не полностью квалифицированным доменным именем, или доменное имя не существует или только для внутренней сети.

Например, спамер, использующий экземпляр Amazon EC2 для отправки спама, регистрируется на моем сервере следующим образом:

Aug 16 04:21:13 email postfix/smtpd[7070]: connect from ec2-54-237-201-103.compute-1.amazonaws.com[54.237.201.103]
Aug 16 04:21:13 email policyd-spf[7074]: prepend Received-SPF: None (mailfrom) identity=mailfrom; client-ip=54.237.201.103; helo=ip-172-30-0-149.ec2.internal; envelope-from=superdiem@carpaythe.tk; receiver=<UNKNOWN>

Как вы можете видеть, имя хоста HELO – ip-172-30-0-149.ec2.internal, что действует только в внутренней сети AWS.

Он не имеет действительной записи A или записи MX.

Чтобы включить ограничение имени хоста HELO / EHLO, отредактируйте основной файл конфигурации Postfix.

sudo nano /etc/postfix/main.cf

Используйте следующую строку, чтобы отклонить не полностью определенное имя хоста HELO / EHLO.

reject_non_fqdn_helo_hostname

Чтобы отклонить электронную почту, когда имя хоста HELO / EHLO не имеет ни записи DNS A, ни записи MX, используйте

reject_unknown_helo_hostname

Вот так

smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_non_fqdn_helo_hostname
    reject_unknown_helo_hostname

Сохраните и закройте файл. Затем перезагрузите Postfix.

sudo systemctl reload postfix

Совет № 3: Отклонить адрес электронной почты, если имя хоста SMTP-клиента не имеет действительной записи A

У законного почтового сервера также должна быть действительная запись A для своего имени хоста.

IP-адрес, возвращаемый из записи A, должен соответствовать IP-адресу почтового сервера.

Чтобы отфильтровать электронные письма с хостов, которые не имеют действительной записи A, отредактируйте основной файл конфигурации Postfix.

sudo nano /etc/postfix/main.cf

Добавьте следующую строку в smtpd_sender_restrictions.

reject_unknown_client_hostname

Пример

smtpd_sender_restrictions =
   permit_mynetworks
   permit_sasl_authenticated
   reject_unknown_reverse_client_hostname
   reject_unknown_client_hostname

Сохраните и закройте файл. Затем перезапустите Postfix, чтобы изменения вступили в силу.

sudo systemctl restart postfix

Обратите внимание, что reject_unknown_client_hostname не требует HELO из SMTP-клиента. Он получит имя хоста из записи PTR, затем проверит запись A.

Совет №4: Отклонить адрес электронной почты, если  mail from не имеет ни записи MX, ни записи А

Адрес MAIL FROM также известен как конверт с адреса.

Некоторые спамеры используют несуществующий домен в адресе MAIL FROM.

Если имя домена не имеет записи MX, Postfix найдет запись A основного домена и отправит электронное письмо этому хосту.

Если домен отправителя не имеет записи MX или записи A, Postfix не может отправлять электронную почту в этот домен. Так почему бы не отказаться от писем, на которые вы не можете ответить?

Чтобы отфильтровать этот спам, отредактируйте главный файл конфигурации Postfix.

sudo nano /etc/postfix/main.cf

Добавьте следующую строку в smtpd_sender_restrictions.

Он отклонит адрес электронной почты, если доменное имя адреса, содержащегося в команде MAIL FROM, не имеет ни записи MX, ни записи A.

reject_unknown_sender_domain

Пример

smtpd_sender_restrictions =
   permit_mynetworks
   permit_sasl_authenticated
   reject_unknown_sender_domain
   reject_unknown_reverse_client_hostname
   reject_unknown_client_hostname

Сохраните и закройте файл. Затем перезапустите Postfix, чтобы изменения вступили в силу.

sudo systemctl restart postfix

Обратите внимание, что я установил это ограничение выше других ограничений отклонения писем.

По моему опыту, если он ниже других ограничений отклонения, это не сработает. (Возможно, это происходит только на моем почтовом сервере.)

Совет № 5: включить Greylisting в Postfix

В соответствии с требованиями протокола SMTP любой законный SMTP-клиент должен иметь возможность повторно отправлять электронную почту, если сбой доставки. (По умолчанию Postfix настроен для повторной отправки неудачных писем много раз, прежде чем он сообщает отправителю, что сообщение не может быть доставлено.) Многие спамеры обычно просто отправляют один раз и не будут повторять попытку.

Postgrey – это сервер политики greylisting для Postfix. Вы можете установить postgrey на Ubuntu из репозитория по умолчанию.

sudo apt install postgrey

Он будет автоматически запущен, как показано на рисунке:

sudo systemctl status postgrey

how to block spam mail in postfix

И он прослушивает TCP-порт 10023 на localhost (как IPv4, так и IPv6).

sudo netstat -lnpt | grep postgrey

postfix spam filter

По умолчанию время greylist составляет 300 секунд, что означает, что неизвестный SMTP-клиент должен ждать 5 минут, прежде чем повторно отправить электронное письмо.

Если это очень долго для вас, вы можете изменить его на 60 секунд или 120 секунд. Это можно настроить в файле / etc / default / postgrey.

sudo nano /etc/default/postgrey

Найдите следующую строку.

POSTGREY_OPTS="--inet=10023"

Измените его на

POSTGREY_OPTS="--inet=127.0.0.1:10023 --delay=60"

Сохраните и закройте файл. Затем перезапустите postgrey, чтобы изменения вступили в силу.

sudo systemctl restart postgrey

Затем нам нужно отредактировать основной файл конфигурации Postfix, чтобы он использовал сервер политики greylisting.

sudo nano /etc/postfix/main.cf

Добавьте следующую строку в smtpd_recipient_restrictions.

check_policy_service inet:127.0.0.1:10023

Если вы не знаете, директива check_policy_service unix: private / policyd-spf в приведенном выше скриншоте заставит Postfix проверять запись SPF на отправителя.

Сохраните и закройте файл. Затем перезапустите Postfix.

sudo systemctl restart postfix

Отныне Postgrey отклонит письмо, если триплет отправителя (IP-адрес отправителя, адрес электронной почты отправителя, адрес электронной почты получателя) является новым.

Следующее сообщение журнала в /var/log/mail.log показывает новый триплет отправителя. Действие «greylist» означает, что это сообщение электронной почты было отклонено.

postgrey[1016]: action=greylist, reason=new, client_name=unknown, client_address=117.90.24.148/32, sender=pnccepjeu@rhknqj.net, recipient=xiao@linuxbabe.com

Совет № 6: Использование публичных антиспамовых блэклистов

Есть спам-сообщения, которые отправляются с серверов, которые имеют действительное имя хоста, действительную запись PTR и могут проходить через серый список.

В этом случае вы можете использовать черный список для отклонения спама.

В Интернете много публичных антиспамовых черных списков.

Вы можете использовать несколько черных списков для блокировки спама.

Перейдите на https://www.debouncer.com и mxtoolbox.com, введите домен и IP-адрес спамера, чтобы увидеть, какие черные списки блокируют их, затем вы можете использовать эти черные списки. Например, я обнаружил, что спамеры занесены в черный список одним из следующих черных списков:

  • dbl.spamhaus.org
  • zen.spamhaus.org
  • multi.uribl.com
  • ivmURI
  • InvaluementURI

Поэтому я могу добавить следующие конфигурации в файле /etc/postfix/main.cf.

Для некоторых черных списков требуется ежемесячная плата. Пока я пользуюсь бесплатным сервисом spamhaus.org.

smtpd_recipient_restrictions =
   permit_mynetworks,
   permit_sasl_authenticated,
   reject_rhsbl_helo dbl.spamhaus.org,
   reject_rhsbl_reverse_client dbl.spamhaus.org,
   reject_rhsbl_sender dbl.spamhaus.org,
   reject_rbl_client zen.spamhaus.org

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий

  1. Aleksey

    > reject_rhsbl_helo dbl.spamhaus.org,
    > reject_rhsbl_reverse_client dbl.spamhaus.org,
    > reject_rhsbl_sender dbl.spamhaus.org,
    > reject_rbl_client zen.spamhaus.org

    Вот за такое многие администраторы почтовых серверов будут вас ненавидеть. Попасть в тот список легко, а вот вылезти – ой как непросто. Информация с пикантными подробностями легко гуглится. Вам может попасться забаненый IP-адрес от предыдущего клиента хостинга. Особо одаренные типа barracudacentral тупо заблочили всю сеть digitalocean, на письма не отвечают. Узнал я это когда пытался пожаловаться на спам от клиента одного хостинга, в тот самый момент, когда мне пришло отфутболенное письмо, что я писал в abuse@. Ирония, правда?

    Если правильно делать, то нужно просто учитывать такие списки при присвоении веса, а не тупо блочить.

    Ответить
    1. cryptoparty автор

      << abuse@ хах, действительно иронично Спасибо за дополнение!

      Ответить
    2. Aleksey

      И еще дополню: при использовании таких списков с бесплатным доступом есть ограничение на количество запросов с одного IP-адреса. Если у вас не сильно нагруженный почтовый сервер, то все нормально, но только в том случае, если все запросы идут с вашего IP-адреса. Вспомним, что такие списки проверяются через DNS, а значит адрес будет не ваш, а адрес DNS-сервера вашего хостера. Т.е. все настроенные почтовые сервера вашего хостера будут ломиться через один IP. Если у вашего хостера много клиентов с почтовыми серверами, то такие списки довольно-таки быстро перестанут отвечать на ваши запросы. Выход – поставить свой кэширующий DNS-сервер и сделать соотв. настойку в /etc/resolv.conf. Поверьте, это так. Мало того, я нарвался на то, что даже обычные DNS (не со списками) имеют ограничения на количество запросов, и некоторые проверки типа reject_unknown_sender_domain у меня не проходили (привет megafon.ru!).

      Ответить