Почтовые системы · 4 min read · Nov 12, 2025
Как бороться со спамом с помощью конфигурации Postfix
Как бороться со спамом с помощью конфигурации Postfix
В этом руководстве вы узнаете, как настроить стандартное руководство Falko по почте для Postfix (+Auth SMTP + Quota), https://www.howtoforge.com/virtual_postfix_mysql_quota_courier, чтобы лучше бороться со СПАМом и обеспечить некоторую обратную совместимость со старыми системами Qmail.
Итак, давайте начнем…
Руководство HowtoForge отлично подходит для всего, однако если у вас очень загруженный почтовый сервер, работающий с Spam Assasin на 1000 сообщений в минуту, это убивает процессор. Лучший ответ — остановить почту до того, как она попадет в Spam Assasin с помощью ряда RBL (Realtime Blacklists) и RHBL (то же самое, но другое), серой листинга и проверок Helo.
Прежде всего, мы хотим изменить существующие ограничения smtpd и добавить целый ряд новых проверок, чтобы помочь уменьшить количество почты, которую система принимает в /etc/postfix/main.cf
### Проверки для удаления неправильно сформированных электронных писем
smtpd_helo_required = yes
strict_rfc821_envelopes = yes
disable_vrfy_command = yes
unknown_address_reject_code = 554
unknown_hostname_reject_code = 554
unknown_client_reject_code = 554
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, regexp:/etc/postfix/helo.regexp, permit
### При изменении sender_checks этот файл должен быть сгенерирован с помощью postmap , чтобы создать базу данных Berkeley
smtpd_recipient_restrictions =
check_client_access hash:/etc/postfix/helo_client_exceptions
check_sender_access hash:/etc/postfix/sender_checks,
reject_invalid_hostname,
### Может вызвать проблемы с Auth SMTP, будьте осторожны!
reject_non_fqdn_hostname,
##################################
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_mynetworks,
reject_unauth_destination,
# Добавьте исключения RBL здесь, при изменении rbl_client_exceptions этот
файл должен быть сгенерирован с помощью postmap , чтобы создать
базу данных Berkeley
check_client_access hash:/etc/postfix/rbl_client_exceptions,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rhsbl_sender dsn.rfc-ignorant.org,
check_policy_service inet:127.0.0.1:60000
permit Теперь объясним, но сначала нам нужно создать несколько файлов:
Первый файл, который мы хотим создать, это /etc/postfix/helo.regexp, и он будет содержать:
/^subdomain\.host\.com$/ 550 Не используйте мое собственное имя хоста
/^xxx\.yyy\.zzz\.xxx$/ 550 Не используйте мой собственный IP-адрес
/^\[xxx\.yyy\.zzz\.xxx\]$/ 550 Не используйте мой собственный IP-адрес
/^[0-9.]+$/ 550 Ваше программное обеспечение не соответствует RFC 2821
/^[0-9]+(\.[0-9]+){3}$/ 550 Ваше программное обеспечение не соответствует RFC 2821Это само по себе оттолкнет спамеров, пытающихся отправить команду helo и выдавать себя за сервер, принимающий почту по IP или имени хоста, а также оттолкнет некоторую почту, которая не соответствует требованиям RFC 2821.
Далее нам нужно создать /etc/postfix/helo_client_exceptions:
# Эти IP-адреса клиентов могут обходить проверки fqdn
# Некоторые комментарии для идентификации IP-адреса ниже
www.xxx.yyy.zzz OK Этот файл нужен на случай, если плохо себя ведущий почтовый сервер не может отправить правильный helo, и вам нужно разрешить прием почты из этого источника. На моем опыте такие устройства, как автономные устройства, камеры видеонаблюдения, плохо соблюдают стандарты, поэтому вам может понадобиться сделать исключение для этого.
Перед тем как изменения в этом файле станут действительными, вам нужно выполнить
postmap /etc/postfix/helo_client_exceptions
Это создаст файл под названием /etc/postfix/helo_client_exceptions.db
Двигаясь дальше, у нас есть /etc/postfix/sender_checks, который позволяет вам обойти различные проверки FQDN и разрешить определенному отправителю пройти. Это особенно полезно, если компания управляет внутренней почтовой сетью, такой как domain.com, но почта работает на int.domain.com, и DNS не настроен для int.domain.com, это отлично для безопасности, но не очень хорошо, потому что внешний DNS не знает о внутренней структуре, и поэтому postfix отклонит int.domain.com.
[email protected] REJECT
[email protected] OK Еще раз, этот файл после изменения должен иметь созданный файл Berkeley DB, и поэтому мы создаем его с помощью:
postmap /etc/postfix/sender_checks
Далее у нас есть наши проверки RBL. Существует множество веб-сайтов, посвященных RBL, но чтобы сократить длину статьи, просто скажем, что эти списки постоянно обновляются и предоставляют IP-адреса и имена хостов, которые спамеры используют для пересылки почты. Каждый IP, который пытается отправить почту на ваш почтовый сервер, будет проверяться по этим спискам (4 использованных выше), и если IP не указан в RBL, почтовый сервер примет почту. Конечно, серверы часто оказываются в этих списках случайно, или списки требуют 24 часа для удаления черного IP после вспышки спама, поэтому всегда лучше иметь способ обхода этих проверок.
Чтобы сделать это, мы создаем файл под названием /etc/postfix/rbl_client_exceptions:
## Некоторые случайные комментарии
www.xxx.yyy.zzz OK Еще раз, вы должны выполнить postmap, чтобы сгенерировать файл Berkeley DB
postmap /etc/postfix/rbl_client_exceptions
Последняя строка ограничений smtpd — это фильтр серой листинга. Я не буду вдаваться в детали, так как уже существует руководство на howtoforge, https://www.howtoforge.com/greylisting_postfix_postgrey, но если вы не хотите использовать серую листинг, просто опустите строку
check_policy_service inet:127.0.0.1:60000Ограничения smtpd очень легко следовать, пока одна из проверок не даст зеленый свет для сообщения, чтобы пройти в очередь Postfix, большинство ответов не уверены, если не дано явное НЕТ, сообщение будет двигаться вниз по списку проверок.
НАСЛЕДИЕ QMAIL
DJB (Дэн Бернштейн) разработал альтернативу SMTP под названием QMQP. Говорят, что она быстрее и требует меньше ресурсов. Если вы заменяете свои старые Qmail MTA на Postfix, вам может понадобиться включить поддержку QMQP.
Мы делаем это, добавив следующее в /etc/postfix/main.cf
qmqpd_authorized_clients = $mynetworks
qmqpd_error_delay = 5s
qmqpd_timeout = 300s Реалистично вы можете аутентифицироваться против чего угодно, но я решил аутентифицироваться против mynetworks. После того как вы добавили вышеуказанное в main.cf, вам нужно дополнительно изменить /etc/postfix/master.cf и убедиться, что он содержит следующее:
628 inet n - - - 100 qmqpd Теперь все, что вам нужно сделать, это перезапустить Postfix
/etc/init.d/postfix restart
Вы можете проверить ваш новый Postfix, осведомленный о QMQP, набрав:
telnet localhost 628
Аутентификация по IP (Идеально для ретрансляции Smarthost в серверах MS Exchange)
Теперь мы немного изменим руководство, чтобы сделать настройку mynetworks немного проще, чем через плоские файлы, а именно /etc/postfix/main.cf
Создайте следующий файл /etc/postfix/mysql-mynetworks.cf
user = mail_admin
password = password
dbname = mail
table = allowed_hosts
select_field = 'IP'
where_field = IP
hosts = 127.0.0.1
additional_conditions = and active='yes' Вам понадобится следующий SQL на этом этапе
CREATE TABLE allowed_hosts (active enum(‘yes’,’no’) NOT NULL default ‘1’,IP varchar(15) NOT NULL default ‘’,Client varchar(128) NOT NULL default ‘’,Comments text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
В конце концов, давайте активируем это, изменив строку mynetworks в main.cf Postfix на:
mynetworks = 127.0.0.0/8, proxy:mysql:/etc/postfix/mysql-mynetworks.cf Наконец, перезапустите Postfix, чтобы изменения вступили в силу:
chmod o= /etc/postfix/mysql-mynetworks.cf
chgrp postfix /etc/postfix/mysql-mynetworks.cf
/etc/init.d/postfix restart
Get new posts in your inbox
No spam. Unsubscribe anytime.