В этой статье мы разберем типичные проблемы, из-за которых почтовый сервер Postfix может медленно отвечать на соединения по порту 25 (SMTP), и дадим пошаговые инструкции по диагностике и устранению неполадок. Все примеры приведены на базе FreeBSD 14. Названия хостов и IP-адреса заменены на вымышленные.
Проблема: задержка при соединении с SMTP-сервером
Почтовый сервер (например, mail.example.com
) долго отвечает на входящие SMTP-соединения — до 5-10 секунд перед выдачей приветствия 220
. Это может замедлить доставку писем и вызвать проблемы у отправителей.
Причины задержек:
1. postscreen_greet_wait
Postfix может быть сконфигурирован на намеренную задержку перед приветствием клиента, чтобы защититься от спам-ботов:
postconf postscreen_greet_wait
postscreen_greet_wait = ${stress?{2}:{6}}s
Если включён postscreen
, то задержка 6 секунд по умолчанию — это нормально. Отключается или настраивается параметром postscreen_greet_wait
в /usr/local/etc/postfix/main.cf
.
2. Медленный запуск smtpd-процесса
Если master.cf
ограничивает число smtpd
, и они заняты, Postfix ждёт освобождения:
smtpd unix n - n - 10 smtpd
Параметр maxproc
указывает максимум одновременно работающих smtpd
. Повышается в /usr/local/etc/postfix/master.cf
.
Проверь текущую загрузку:
ps ax | grep smtpd
3. Chroot-среда и отсутствие /dev/urandom или /etc/resolv.conf
Если smtpd
работает в chroot
, но внутри окружения нет необходимых файлов:
/dev/urandom
— нужен для TLS/SSL/etc/resolv.conf
— нужен для DNS-запросов
Решение:
Убедитесь, что эти файлы доступны внутри
/var/spool/postfix
.Либо отключите chroot для
smtpd
:
smtpd unix n - n n - smtpd
4. Ошибка DNS
Postfix использует системный DNS, указанный в /etc/resolv.conf
. Пример:
nameserver 8.8.8.8
nameserver 1.1.1.1
Если DNS работает нестабильно или отдает неверные записи, это вызывает задержки на этапе RCPT TO
или при проверке HELO.
Проверь работу DNS:
dig mx domain.com
host domain.com
Проверь запросы в tcpdump
:
tcpdump -i em0 port 53
Ошибки в логах и их значение
Пример логов:
(connect to mail.remotehost.com[104.21.16.1]:25: Operation timed out)
Причина: Postfix не смог разрешить MX-запись домена remotehost.com
и использовал A-запись, которая не принимает почту.
Решение: Проверь DNS-записи домена:
dig mx remotehost.com
Если вместо MX есть только A-запись, то Postfix пробует доставку на неё. Если там нет SMTP-сервера — будет timeout
или connection refused
.
Как посмотреть очередь Postfix
postqueue -p
Показанные ошибки могут быть:
Connection refused
— удалённый сервер не принимает соединенияOperation timed out
— удалённый сервер недоступенRelay access denied
— отказ из-за политики
Как увидеть, кто слушает порт 25
sockstat -4 -l | grep :25
Или с netstat
:
netstat -an | grep ".25"
Как узнать, какие DNS использует Postfix
Postfix не указывает явно DNS-сервер в логах. Но он использует системные из /etc/resolv.conf
. Убедитесь, что они рабочие:
cat /etc/resolv.conf
Проверь DNS-запросы с tcpdump
:
tcpdump -i em0 port 53 -n
Как включить отладку Postfix по домену
postconf -e 'debug_peer_list = example.com'
postconf -e 'debug_peer_level = 2'
postfix reload
После этого появятся подробные логи при работе с указанным хостом.
Заключение
Задержка на SMTP-порте может быть вызвана разными причинами: от защиты Postfix до проблем с DNS или нехваткой ресурсов. Используйте системные инструменты FreeBSD и расширенное логирование Postfix, чтобы поэтапно диагностировать проблему. Внимание к деталям — залог стабильной почтовой системы.
Комментарии
Отправить комментарий