С чего начать Первые шаги трек · 15 ступеней
Linux Labs

Postfix — почтовый сервер

4 мин Ubuntu 24.04 · Postfix

Отправка и приём почты — конфиг, очередь, логи, типичная отладка доставки.

Шпаргалка

7 команд Версия для печати
  • postconf -n действующий конфиг
  • mailq что в очереди
  • postqueue -f форс отправки очереди
  • postcat -q <QUEUEID> посмотреть письмо в очереди
  • journalctl -u postfix или /var/log/mail.log
  • sudo postmap /etc/postfix/sasl_passwd && sudo systemctl reload postfix
  • echo "test" | mail -s "тема" you@example.com тестовое письмо

Обзор

Postfix — MTA (агент пересылки почты): отправляет, принимает и маршрутизирует email по SMTP. Часто ставят просто для исходящих уведомлений с сервера. Служба postfix под systemd; конфиг /etc/postfix/main.cf.

bash
systemctl status postfix
postconf -n                        # действующая конфигурация (только изменённое от дефолта)
ss -tlnp | grep -E ':25|:587'      # слушает ли SMTP (см. ss)

Конфигурация

bash
postconf -n                        # текущие настройки (изменённые)
postconf inet_interfaces mynetworks relayhost   # конкретные параметры
sudo postconf -e 'myhostname=mail.example.com'  # изменить параметр
sudo postconf -e 'relayhost=[smtp.provider.com]:587'   # слать через смартхост
sudo systemctl reload postfix

# очередь писем
mailq                              # = postqueue -p — что застряло и почему
postqueue -f                       # форсировать повторную отправку всей очереди
postqueue -i <QUEUEID>             # один конкретный элемент
postcat -q <QUEUEID>               # посмотреть содержимое письма в очереди
sudo postsuper -d ALL              # удалить ВСЁ из очереди (осторожно!)
sudo postsuper -d ALL deferred     # только отложенные
echo "test" | mail -s "тема" you@example.com   # тестовое письмо (пакет mailutils)

Рецепты

1

Релей через смартхост

Типовой кейс «сервер шлёт уведомления через внешний SMTP» (main.cf):

relayhost = [smtp.provider.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
bash
echo '[smtp.provider.com]:587 user:pass' | sudo tee /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd      # собрать .db (после ЛЮБОЙ правки map!)
sudo systemctl reload postfix

Неполадки

5

Письма не уходят / висят в очереди

mailq покажет причину рядом с каждым письмом. Лог: journalctl -u postfix или /var/log/mail.log. Частое: получатель отверг, нет обратного DNS (PTR), порт 25 закрыт провайдером (тогда слать через relayhost:587).

Relay access denied

Postfix не пересылает чужую почту (anti-relay). Для своих сетей — mynetworks; для аутентифицированных — SASL. Не делай открытый релей (спам/блок-листы).

Письма попадают в спам

Нужны SPF/DKIM/DMARC-записи в DNS и корректный PTR (rDNS). Без них крупные провайдеры режут.

Поменял map, а не применилось

После правки sasl_passwd/transport/virtual всегда postmap файл (пересобрать .db) и reload.

Connection refused на 25

Слушает только localhost (inet_interfaces = loopback-only) или порт закрыт (firewall). Проверь ss -tlnp | grep :25 и postconf inet_interfaces.

Опасно

Опасно. postsuper -d ALL безвозвратно удаляет все письма из очереди, включая те, что ещё можно было бы доставить — сначала посмотри mailq и удаляй точечно по ID или ограничивай выборку (ALL deferred). Открытый релей (пересылка чужой почты без ограничения mynetworks/SASL) быстро приводит к попаданию сервера в спам-листы — восстановление репутации IP занимает недели.

См. также

  • dns-resolv — Как имя превращается в IP — resolv.conf, systemd-resolved, /etc/hosts, dig.
  • journalctl — Чтение журнала systemd (journald) — фильтры по службе, времени, приоритету.
  • ss — Кто слушает порты и какие соединения открыты — современная замена netstat.
Загрузка…