Linux

Очередь Postfix: команды диагностики, очистки и повторной доставки

Очередь Postfix нельзя обслуживать методом «удалить всё и перезапустить». Ниже — рабочая инструкция: как посмотреть очередь, найти причину задержки, прочитать конкретное письмо, повторить доставку, поставить письмо на hold, снять hold и удалить только то, что действительно нужно.

1. Проверяем состояние Postfix и диска

systemctl status postfix --no-pager
postfix status
df -h
df -i

Если закончился диск или inode, сначала решите эту проблему. Очистка очереди не лечит переполненный раздел.

2. Показываем очередь

postqueue -p
# то же через совместимый интерфейс
mailq

Для Postfix 3.1+ доступен JSON Lines:

postqueue -j | head
postqueue -j | wc -l

Каждая строка postqueue -j — отдельное сообщение. В поле queue_name видно, находится оно в active, deferred, hold и т. п.

3. Считаем deferred и hold

postqueue -j | grep -c '"queue_name": "deferred"'
postqueue -j | grep -c '"queue_name": "hold"'

На разных сборках JSON может форматироваться без пробела после двоеточия, поэтому для автоматизации лучше использовать jq:

postqueue -j | jq -s '[.[] | select(.queue_name=="deferred")] | length'
postqueue -j | jq -s '[.[] | select(.queue_name=="hold")] | length'

4. Берём queue ID и смотрим историю в логах

Предположим, проблемное письмо имеет ID ABC123DEF.

journalctl -u postfix --since '24 hours ago' | grep 'ABC123DEF'

# если дистрибутив пишет в обычный mail.log
grep 'ABC123DEF' /var/log/mail.log 2>/dev/null

По одному queue ID обычно видно приём письма, фильтрацию, попытки доставки и ответ удалённого сервера.

5. Посмотреть содержимое сообщения

postcat -q ABC123DEF

Так можно проверить заголовки, sender/recipient и понять, действительно ли письмо нужно удалять. Не публикуйте вывод postcat целиком: там могут быть персональные данные и содержимое письма.

6. Повторить доставку одного письма

postqueue -i ABC123DEF

Сначала устраните причину defer: DNS, сетевую ошибку, недоступный relayhost, TLS, авторизацию или локальную доставку.

7. Повторить доставку всей очереди

postqueue -f

Не запускайте flush каждую минуту. Postfix сам планирует повторные попытки; частый принудительный flush только создаёт лишнюю нагрузку.

8. Поставить письмо на hold и снять hold

# остановить дальнейшие попытки доставки
postsuper -h ABC123DEF

# вернуть письмо из hold
postsuper -H ABC123DEF

9. Переотправить письмо через очередь заново

postsuper -r ABC123DEF

Requeue заставляет Postfix снова пройти обработку сообщения. Это полезно после изменения transport maps, маршрутизации или фильтров.

10. Удалить одно конкретное сообщение

postsuper -d ABC123DEF

Перед удалением сохраните queue ID и причину проблемы, если это часть расследования.

11. Массовое удаление: только когда вы понимаете последствия

# удалить ВСЮ очередь — крайне опасно
postsuper -d ALL

# удалить только deferred
postsuper -d ALL deferred

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

12. Типовая диагностика deferred

# DNS
dig MX example.net
dig A mx.example.net

# маршрут и соединение
nc -vz mx.example.net 25

# TLS SMTP
openssl s_client -connect mx.example.net:25 -starttls smtp -servername mx.example.net

# текущий relayhost
postconf relayhost

# последние ошибки Postfix
journalctl -u postfix --since '1 hour ago' --no-pager | tail -n 200

13. Если очередь растёт из-за взломанной учётки

  • заблокируйте или смените пароль SMTP-учётки;
  • проверьте SASL auth в логах;
  • остановите источник массовой отправки;
  • только после этого удаляйте спам из очереди;
  • проверьте reputation/IP blocklists и ограничения провайдера.

14. Контроль после исправления

postqueue -p
postqueue -j | wc -l
journalctl -u postfix --since '10 min ago' --no-pager

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *