Почтовые серверы · 5 min read · Sep 22, 2025

Укрепление Postfix для ISPConfig 3

Укрепление Postfix для ISPConfig 3

Автор: Jesús Córdoba
Email: j.cordoba [at] gmx [dot] net
Пользователь форума: pititis

Версия: 1.2

Цель этого руководства — укрепить почтовый сервер postfix, используемый ISPConfig для интернет-почтовых серверов, где доверяются аутентифицированные пользователи. С этой настройкой вы отклоните большое количество спама до того, как он попадет в вашу почтовую очередь, сэкономив много системных ресурсов и сделав ваш почтовый сервер устойчивым к спамерам и спам-ботнетам. Давайте начнем.

Обратный DNS, (DNS PTR Запись)

Чтобы настроить rdns, вы столкнетесь с двумя ситуациями:

  • Ваш провайдер позволяет вам изменить его самостоятельно. Посмотрите в своей панели управления.

  • Ваш провайдер не позволяет вам изменить его. Просто отправьте электронное письмо с вашей просьбой.

Запросите или укажите вашу запись rdns на ваш сервер. т.е.

server.example.com

Вы можете проверить ваш rdns с помощью команды host:

root@server / #  host 149.20.4.69
  69.64-27.4.20.149.in-addr.arpa domain name pointer pub2.kernel.org.

Помните, что dns должен распространить изменения.

SPF для вашего домена (DNS TXT Запись)

SPF — это система проверки электронной почты, предназначенная для предотвращения спама, обнаруживая подделку электронной почты, общую уязвимость, проверяя IP-адреса отправителей.

Чтобы настроить spf, вам нужно будет добавить TXT запись в вашу dns зону, но сначала вы можете сгенерировать вашу запись здесь: http://www.mailradar.com/spf/

Скопируйте результат spf, затем перейдите в ISPConfig -> dns -> зоны -> нажмите на имя вашего домена -> нажмите на вкладку записей -> и нажмите на TXT

Имя хоста -> example.com. (с точкой в конце!)

Текст -> Вставьте сюда результат spf (без “ “).

Пример: v=spf1 a mx ptr ip4:11.222.333.444 -all …и нажмите на Сохранить.

Помните, что dns должен распространить изменения.

Postfix main.cf

Давайте добавим/изменим что-то в /etc/postfix/main.cf

Ограничения Helo:

smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname

Ограничения Helo в действии:

Jan 12 01:57:08 server postfix/smtpd[4687]: NOQUEUE: reject: RCPT from unknown[186.43.77.153]: 450 4.7.1 Client host rejected: cannot find your hostname, [186.43.77.153]; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[186.43.77.153]>
Jan  8 00:32:22 server postfix/smtpd[17504]: NOQUEUE: reject: RCPT from 201-93-87-2.dial-up.telesp.net.br[201.93.87.2]: 504 5.5.2 : Helo command rejected: need fully-qualified hostname; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=

Строгий rfc:

strict_rfc821_envelopes = yes

Ограничения клиентов:

smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_client_hostname, check_client_access mysql:/etc/postfix/mysql-virtual_client.cf

Ограничения получателей:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unknown_recipient_domain

Ограничения данных:

smtpd_data_restrictions = reject_unauth_pipelining

Задержка Smtpd:

smtpd_delay_reject = yes

Не забудьте перезагрузить postfix:

/etc/init.d/postfix reload

Проверка SPF для Postfix (Debian и Ubuntu)

Установите пакет spf:

apt-get install postfix-policyd-spf-python

или

apt-get install postfix-policyd-spf-perl

Добавьте это в /etc/postfix/main.cf:

policy-spf_time_limit = 3600s

и добавьте check_policy_service unix:private/policy-spf в конце smtpd_recipient_restrictions:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination, reject_unknown_recipient_domain, check_policy_service unix:private/policy-spf

Теперь отредактируйте master.cf и добавьте в конце это (для версии на python):

policy-spf  unix  -       n       n       -       -       spawn
     user=nobody argv=/usr/bin/policyd-spf 

или это для версии на perl:

policy-spf  unix  -       n       n       -       -       spawn
     user=nobody argv=/usr/sbin/postfix-policyd-spf-perl

…перезагрузите postfix.

/etc/init.d/postfix reload

Проверка spf в действии:

Jan  4 15:50:11 server postfix/smtpd[19096]: NOQUEUE: reject: RCPT from g230068165.adsl.alicedsl.de[92.230.68.165]: 550 5.7.1 <[email protected]>: Recipient address rejected: Message rejected due to: SPF fail - not authorized. Please see http://www.openspf.org/Why?s=helo;id=paxxxxxn.com;ip=92.230.68.165;[email protected]; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=

Серый список

Серый список — это метод защиты пользователей электронной почты от спама. Агент передачи почты (MTA), использующий серый список, будет “временно отклонять” любую электронную почту от отправителя, которого он не распознает. Если почта легитимна, исходный сервер через некоторое время попробует снова, и, если пройдет достаточное время, электронная почта будет принята.

Установка postgrey (Debian, Ubuntu):

apt-get install postgrey

Опции конфигурации находятся в /etc/default/postgrey (по умолчанию задержка составляет 5 минут).

Отредактируйте main.cf и добавьте check_policy_service inet:127.0.0.1:10023 в конец smtpd_recipient_restrictions:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination, reject_unknown_recipient_domain, check_policy_service unix:private/policy-spf,check_policy_service inet:127.0.0.1:10023

…перезагрузите postfix:

/etc/init.d/postfix reload

Серый список в действии:

Jan 10 17:38:57 server postfix/smtpd[21302]: NOQUEUE: reject: RCPT from mailout-de.gmx.net[213.165.64.22]: 451 4.7.1 <[email protected]>: Recipient address rejected: Greylisting in effect, please come back later; from=<[email protected]> to=<[email protected]> proto=SMTP helo=

DNSBL (DNS Базированный Черный Список/Блокировка)

DNSBL — это список IP-адресов, опубликованный через Интернет-службу доменных имен (DNS) либо в виде файла зоны, который может использоваться программным обеспечением DNS-сервера, либо в виде живой зоны DNS, которая может запрашиваться в реальном времени. DNSBL чаще всего используется для публикации адресов компьютеров или сетей, связанных со спамом; большинство программного обеспечения почтовых серверов может быть настроено на отклонение или пометку сообщений, которые были отправлены с сайта, указанного в одном или нескольких таких списках. Это может включать в себя указание адресов зомби-компьютеров или других машин, используемых для отправки спама, указание адресов провайдеров, которые охотно размещают спамеров, или указание адресов, которые отправили спам в систему-ловушку. Чтобы использовать dnsbl с postix, мы используем reject_rbl_client. Просто добавьте несколько живых зон dns для запросов в файл main.cf.

В моем примере я буду использовать два списка с очень хорошей репутацией (добавлены в конец smtpd_client_restrictions):

smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_client_hostname, check_client_access mysql:/etc/postfix/mysql-virtual_client.cf,  reject_rbl_client cbl.abuseat.org,  reject_rbl_client b.barracudacentral.org

rbl в действии:

Jan 12 01:52:42 server postfix/smtpd[4616]: NOQUEUE: reject: RCPT from 89.pool85-49-26.dynamic.orange.es[85.49.26.89]: 554 5.7.1 Service unavailable; Client host [85.49.26.89] blocked using cbl.abuseat.org; Blocked - see http://cbl.abuseat.org/lookup.cgi?ip=85.49.26.89; from=<[email protected]> to=<[email protected]> proto=SMTP helo=
Jan 11 20:13:58 server postfix/smtpd[29591]: NOQUEUE: reject: RCPT from 93-87-122-56.dynamic.isp.telekom.rs[93.87.122.56]: 554 5.7.1 Service unavailable; Client host [93.87.122.56] blocked using b.barracudacentral.org; http://www.barracudanetworks.com/reputation/?pr=1&ip=93.87.122.56; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=

Postscreen

Примечание: Эта функция доступна в Postfix 2.8 и выше

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

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

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

Сначала добавим строку в main.cf с командой:

postscreen_greet_action = enforce

Во-вторых, добавим postscreen и некоторые новые службы в master.cf Примечание: Эти настройки могут уже существовать, просто раскомментируйте. Также убедитесь, что строка “smtp inet … smtpd”, включая любые параметры, закомментирована (если есть, параметры должны быть перемещены в новую службу smtpd).

# Конфигурационный файл основного процесса Postfix.  Для получения подробной информации о формате
# файла смотрите страницу руководства master(5) (команда: "man 5 master").
#
# Не забудьте выполнить "postfix reload" после редактирования этого файла.
#
# ========================================================================== 
# тип службы  частный  непривилегированный  chroot  пробуждение  maxproc команда + аргументы
#               (да)   (да)   (да)   (никогда) (100)
# ========================================================================== 
#smtp      inet  n       -       -       -       -       smtpd
#          -o ...
smtpd     pass  -       -       n       -       -       smtpd
     -o ... # Параметры перемещены из службы smtp в новую службу smtpd.(если есть)
smtp      inet  n       -       n       -       1       postscreen
tlsproxy  unix  -       -       n       -       0       tlsproxy
dnsblog   unix  -       -       n       -       0       dnsblog

Теперь перезагрузим postfix:

/etc/init.d/postfix reload
Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.