Топ-7 эффективных советов по блокированию почтового спама с помощью Postfix на CentOS/RHEL

Топ-7 эффективных советов по блокированию почтового спама с помощью Postfix на CentOS/RHEL

15.12.2023
Автор: HostZealot Team
2 мин.
642

Что же на самом деле представляет собой почтовый спам? Как он работает? Почему вы получаете так много спама?

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

Эффективно бороться со спамом помогают многие инструменты, в том числе и Postfix.

SMTP-сервер Postfix на CentOS/RHEL позволяет блокировать почтовый спам еще до того, как он попадет в почтовый ящик.

Давайте рассмотрим, что такое спам и как с ним бороться с помощью Postfix на CentOS/RHEL.

Что такое спам?

Почтовый спам - это, по сути, нежелательные письма, которые пользователь получает на свой электронный адрес. К сожалению, почтовый спам - это не новая концепция, поскольку он существует уже довольно давно. Ежедневно пользователи получают миллиарды спамерских писем.

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

Существуют распространенные типы почтового спама, в том числе:

  • Коммерческие письма. В таких письмах рекламируются коммерческие товары или услуги за плату от рекламодателя. Почтовый спам может содержать ссылки на сайты с аналогичным содержанием или предложения товаров и услуг, не имеющих прямого отношения к вашим интересам.
  • Вирусы. Вирусы - это вредоносные программы, заражающие операционную систему и похищающие персональную информацию. Вирусы, присылаемые по электронной почте, могут содержать вредоносный код для заражения системы.
  • Фишинговые письма. Фишинг - это рассылка мошеннических писем, цель которых - обманом заставить пользователя раскрыть свою частную или финансовую информацию, чтобы мошенники могли использовать ее в своих целях. Фишинговые письма обычно содержат ссылку на другой сайт.

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

Совет №1: Требуйте PTR-записи для SMTP-клиентов

PTR-записи, или записи Pointer, представляют собой обратные DNS-записи, используемые для поиска DNS.

Система доменных имен (DNS) - это место, где хранятся данные о зарегистрированных доменах. Когда требуется просмотреть реестры, выполняется DNS-поиск. Браузеры обычно делают это, когда пользователи вводят свои адреса электронной почты и таким образом получают IP-адрес почтового сервера. Результатом такого запроса обычно является запись типа A.

Обратный DNS-поиск - это когда сервер получает домен через IP-адрес. Результатом такого запроса является PTR-запись.

Почему же PTR-записи так важны? На пути к почтовому ящику электронная почта проходит через серверы. При этом почтовые провайдеры выполняют прямой и обратный поиски по DNS. Если они не совпадают, письмо классифицируется как спам. Поэтому почтовые провайдеры требуют, чтобы SMTP-клиенты имели правильные PTR-записи; обычно это входит в обязанности администратора SMTP-сервера.

Теперь вы можете самостоятельно выполнить обратный поиск DNS. Для этого на CentOS/RHEL выполните следующую команду, чтобы получить доменное имя и IP-адрес:

host <IP address>

Многие почтовые серверы предъявляют требование о наличии действительных PTR-записей, соответствующих IP-адресам. В таком случае в журнале Postfix (/var/log/maillog) при наличии у SMTP-клиента PTR-записей будет присутствовать следующая строка:

connect from "hostname" [IP-address]

Если IP-адрес SMTP-клиента не имеет PTR-записей, то вместо "hostname" в журнале Postfix будет "unknown".

С помощью Postfix можно отфильтровать письма, не связанные ни с одной PTR-записью. Для этого необходимо открыть файл конфигурации Postfix с помощью следующей команды:

sudo nano /etc/postfix/main.cf

Затем в разделе "smtpd_sender_restrictions" необходимо добавить:

reject_unknown_reverse_client_hostname

Затем необходимо сохранить и перезагрузить Postfix, чтобы изменения применились:

sudo systemctl restart postfix

Совет №2: Внедрите ограничения на имя хоста HELO/EHLO

Процедура EHLO позволяет клиенту представиться SMTP-серверу. HELO очень похожа на EHLO, но несет серверу меньше данных.

Так, иногда в диалоге SMTP указывается несуществующее доменное имя или не полностью функционирующее доменное имя, что, скорее всего, свидетельствует о письме от спамеров. Для активации ограничений HELO/EHLO необходимо отредактировать конфигурационный файл Postfix:

sudo nano /etc/postfix/main.cf

Для того чтобы клиент мог предоставить запрос имени хоста, необходимо следующее:

smtpd_helo_required = yes

Чтобы включить ограничения, добавьте:

smtpd_helo_restrictions =
permit_mynetworks
permit_sasl_authenticated

Если необходимо отклонять клиентов, указавших неверное имя хоста, используйте эту команду:

reject_invalid_helo_hostname

Чтобы отклонить письмо, с которым не ассоциируется реальных записей, используйте команду:

reject_unknown_helo_hostname

Если подвести итог, то все инстанции, от которых можно отказаться, будут выглядеть примерно так:

smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_invalid_helo_hostname
reject_unknown_helo_hostname

Затем сохраните файл и перезагрузите Postfix:

sudo systemctl reload Postfix

Иногда даже легитимные почтовые серверы должны соответствовать стандартам HELO/EHLO. Чтобы избежать ошибок при работе с Postfix, необходимо внести такие серверы в белый список с помощью:

check_helo_access hash:/etc/postfix/helo_access

Затем создайте файл /etc/postfix/helo_access с помощью:

sudo nano /etc/postfix/helo_access

Пример белого списка может выглядеть следующим образом:

optimus-webapi-prod-2.localdomain OK
va-massmail-02.rakutenmarketing.com OK

После добавления серверов в список создайте файл /etc/postfix/helo_access.db:

sudo postmap /etc/postfix/helo_access

Затем перезагрузите Postfix:

sudo systemctl reload Postfix

Совет №3: Проверяйте A-записи для имен хостов SMTP-клиентов

Спам-серверы часто не имеют корректных A-записей для своих IP-адресов. Вы можете отфильтровать IP-адреса с отсутствующими A-записями, отредактировав конфигурационный файл Postfix, как в предыдущих примерах.

Добавьте следующие команды в раздел "smtpd_sender_restrictions":

reject_unknown_reverse_client_hostname reject_unknown_client_hostname

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

Помните, что две упомянутые команды не отклоняют мошеннические имена хостов HELO/EHLO.

Совет №4: Отклоняйте письма с неадекватными MX- или A-записями

MX означает адрес "Mail From", который также называется "envelope from".

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

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

Чтобы отклонять почту от домена с адресом, который не имеет ни MX, ни A-записей, добавьте в раздел "smtpd_sender_restrictions" следующее:

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.

Во избежание проблем лучше поместить команду reject_unknown_sender_domain выше всех остальных команд "reject".

Совет №5: Создание серых списков в Postfix

Создание серых списков - это метод отбраковки почтового спама, который отвергает любой почтовый сервер, не входящий в список. Если сервер-отправитель не является мошенническим, он повторно отправляет письмо. Однако большинство спамеров не отправляют письмо повторно. Таким образом, спам блокируется. Благодаря наличию серых списков серверы, осуществляющие повторную отправку писем, не будут подвергаться перебоям в будущем; в свою очередь, попадание в серый список не позволит серверам, не осуществляющим повторную отправку писем, продолжать свою деятельность.

Чтобы запустить функцию серых списков в Postfix, необходимо получить доступ к службе Postgrey. Для пользователей CentOS/RHEL установка Postgrey доступна из репозитория EPEL. Когда он будет установлен, введите следующую команду:

sudo systemctl start postgrey

и запустите ее:

sudo systemctl enable postgrey

Затем необходимо отредактировать файл конфигурации Postgrey, чтобы он использовал сервер серых списков:

sudo nano /etc/postfix/main.cf

В "smtpd_recipient_restrictions" добавьте следующее:

check_policy_service unix:postgrey/socket

Сохраните и перезагрузите Postfix.

Таким образом, Postgrey будет отклонять доступ с нового IP-адреса отправителя, адреса электронной почты отправителя или адреса электронной почты получателя. Отправка поддельных адресов электронной почты может не остановить случайно сгенерированные адреса. Однако спамеры с поддельными адресами никогда не отправляют письма повторно; в этом случае могут пригодиться серые списки.

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

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

Для блокирования почтового спама можно использовать несколько черных списков. Для этого необходимо посмотреть, какие черные списки блокируют доменные имена спамеров, и использовать их. Чтобы узнать, какие черные списки содержат домены почтовых спамеров, можно обратиться к сайтам MXToolBox и Debouncer.

Чтобы использовать черные списки, в файл /etc/postfix/main.cf добавьте следующее:

smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
check_policy_service unix:private/policyd-spf
check_policy_service unix:postgrey/socket
reject_rhsbl_helo ... (черный список)
reject_rhsbl_reverse_client ... (черный список)
reject_rhsbl_sender ... (черный список)
reject_rbl_client ... (черный список)

Для спамеров, использующих почтовый сервер Google, "reject_rhsbl_helo" будет неэффективен. Для большинства случаев достаточно "reject_rhsbl_sender".

Совет №7: Повышение безопасности с помощью OpenDMARC

Доменная аутентификация, отчетность и соответствие (Domain-based Message Authentication, Reporting, and Conformance, сокращенно DMARC) - это интернет-стандарт, который не позволяет мошенникам использовать чужие домены для рассылки спама.

Для настройки OpenDMARC необходимо иметь верификацию DKIN и OpenDKIM. Далее описывается установка и настройка OpenDMARC на CentOS/RHEL.

Сначала необходимо установить OpenDMARC, что можно сделать из репозитория EPEL:

sudo dnf install epel-release
sudo dnf install opendmarc

Запустите OpenDMARC (1) и убедитесь, что он работает (2):

(1) sudo systemctl start opendmarc
(2) systemctl status opendmarc

Далее откройте и отредактируйте конфигурационный файл:

sudo nano /etc/opendmarc.conf

Измените: "# AuthservID name" на "AuthservID OpenDMARC".

В следующей строке вставьте имя хоста Postfix:

TrustedAuthservIDs mail.yourdomain.com

Затем найдите следующую строку и измените "false" на "true":

# IgnoreAuthenticatedClients false

В следующих строках сделайте то же самое:

# RejectFailures false
# RequiredHeaders false

Сохраните файл и перезапустите OpenDMARC для применения изменений.

Ускорение поиска DNS с помощью локального резольвера

Postfix выполняет поиск DNS-записей, и этот процесс может занять некоторое время. Чтобы ускорить этот процесс, можно запустить локальный DNS-резольвер (поскольку большинство списков DNS имеют ограничения на запросы). В данном примере используется DNS-сервер bind9.

Установите DNS-сервер bind9:

sudo dnf install bind

И запустите его:

sudo systemctl start named

Включите автозапуск при загрузке:

sudo systemctl enable named

Настройка DNS-резольвера по умолчанию для почтового сервера CentOS/RHEL

DNS-резольвер по умолчанию может быть разным, но вам необходимо установить его на 127.0.0.1.

Для начала необходимо узнать имя вашей сети, используя:

ip addr

Далее необходимо отредактировать конфигурационный файл и поместить в него имя сети:

sudo nano /etc/sysconfig/network-scripts/ifcfg-name of your network

Затем найдите параметр DNS и измените его на 127.0.0.1:

DNS1="127.0.0.1"

Сохраните и перезапустите NetworkManager.

Отключение IPv6 в BIND

Чтобы избежать ошибок в журнале BIND, лучше отключить IPv6, если ваш почтовый сервер не имеет публичного IPv6-адреса.

Сначала откройте файл конфигурации.

sudo nano /etc/sysconfig/named

В конец файла добавьте следующее:

OPTIONS="-4"

Сохраните файл и перезапустите систему:

sudo systemctl restart named

Выполните следующую команду:

sudo netstat -lnptu | grep named
# VPS Поделиться:
Статьи по Теме