Почтовые серверы · 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.orgrbl в действии:
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 reloadGet new posts in your inbox
No spam. Unsubscribe anytime.