Даже если у вас давно нет своего почтового сервера, MTA на машине почти наверняка есть и работает. Через него уходят отчеты cron, предупреждения smartd, письма от unattended-upgrades, логи fail2ban. Задача этого урока - научиться понимать, как почта вообще движется между машинами, кто такие псевдонимы и форварды, как заглянуть в очередь и отправить тестовое письмо. Это базовый уровень администратора: не настроить публичный релей с DKIM, а уверенно разбираться, почему системные уведомления уходят или застревают.

Как это работает
Почта в Unix живет на трех ролях. MUA (mail user agent) - это то, чем пишет человек: mutt, Thunderbird, веб-клиент. MTA (mail transfer agent) - сервер, который принимает письмо и тащит его дальше по сети: Postfix, Exim, Sendmail. MDA (mail delivery agent) - кладет письмо в конечный ящик пользователя: procmail, maildrop или встроенный local-агент самого MTA. На экзамене важно различать эти три буквы и не путать роли.
Транспорт между серверами - это протокол SMTP, обычно порт 25 между MTA, и порты 587 (submission) или 465 (submission over TLS) для отправки от клиента. MTA берет домен из адреса после знака at, спрашивает у DNS запись MX этого домена, узнает имя принимающего сервера и открывает к нему SMTP-соединение. Если доставить прямо сейчас не вышло (сервер недоступен), письмо не теряется - оно ложится в локальную очередь и MTA повторяет попытки по нарастающему интервалу несколько суток.
Псевдонимы (aliases) - это таблица переадресации на стороне сервера, файл /etc/aliases. Строка вида root: admin означает: все, что адресовано локальному root, доставлять пользователю admin. Псевдоним может указывать на другого пользователя, на внешний адрес, на список адресов через запятую, на файл или на программу через канал. Псевдонимы общесистемные, их правит администратор.
Важная деталь: MTA читает не сам текстовый /etc/aliases, а его скомпилированную хэш-базу /etc/aliases.db. Поэтому после правки текста надо пересобрать базу командой newaliases (это псевдоним для sendmail -bi). Забыли пересобрать - изменения не применились, классические грабли.
Форвард (~/.forward) - это та же идея, но в руках самого пользователя и без прав root. Файл лежит в домашнем каталоге, содержит адреса или каналы, и пользователь сам решает, куда пересылать свою почту. Пересборка базы тут не нужна, MTA читает .forward на лету при доставке.
Команды и примеры
Что популярно в 2026. Postfix - фактический стандарт и дефолт почти везде (Debian, Ubuntu, RHEL ставит его при выборе mail-сервера). Exim - дефолт в Debian для некоторых конфигураций и очень популярен на хостингах с cPanel. Sendmail - легаси: исторический прародитель, еще встречается на старых RHEL-системах, но новые установки на нем почти не делают. Ключевая идея совместимости: все три понимают команду sendmail и ключи -bp, -bi, -t, поэтому базовые навыки переносимы.
Псевдонимы и пересборка базы:
Код: Выделить всё
# правим таблицу
sudoedit /etc/aliases
# строка, например:
# root: ops@example.com
# пересобираем хэш-базу (любой из вариантов)
sudo newaliases
sudo sendmail -bi
Код: Выделить всё
# от своего имени, в своем домашнем каталоге
echo "myaccount@gmail.com" > ~/.forward
chmod 600 ~/.forward
# можно копию оставлять локально - адрес с обратным слешем перед логином:
# \khovanskiy, backup@example.com
Код: Выделить всё
mailq # самый короткий
sendmail -bp # то же самое, классический ключ
postqueue -p # если MTA - именно Postfix
Код: Выделить всё
exim -bp # очередь
exiqgrep -i # только ID писем в очереди
exim -M ID # принудительно протолкнуть письмо
Код: Выделить всё
# Debian/Ubuntu
sudo apt install mailutils
# RHEL/Fedora
sudo dnf install s-nail
echo "test body" | mail -s "Тема теста" you@example.com
Код: Выделить всё
sendmail -v you@example.com <<'EOF'
Subject: lpic test
From: root@$(hostname)
Письмо-пробник.
EOF
Частые грабли
- Правили /etc/aliases, но не запустили newaliases - MTA продолжает читать старую .db. Изменения молча игнорируются.
- ~/.forward с правами доступными группе или others, или принадлежащий не тому пользователю - MTA из соображений безопасности его проигнорирует. Нужны владелец-пользователь и режим 600 или 644.
- Цикл пересылки: alias A шлет на B, а .forward у B - обратно на A. Письмо отбивается с ошибкой loops back to myself.
- Думают, что MTA вообще не установлен, а на машине стоит local-only Postfix, слушающий только 127.0.0.1 - наружу письма не уходят, копятся в очереди.
- Путают submission (587) с релеем на 25. С нынешними правилами провайдеров письмо с динамического IP по 25 порту почти гарантированно не примут.
- mailq показывает скопившиеся письма с пометкой deferred - это не доставка, а застрявшая очередь; смотрите причину в выводе и в логе, а не радуйтесь, что письма ушли.
- Проверьте, какой MTA установлен: which sendmail и затем ls -l на этот путь (увидите ссылку на postfix, exim или sendmail.sendmail).
- Добавьте в /etc/aliases строку перенаправления для root на вашего обычного пользователя и выполните newaliases.
- Создайте ~/.forward от имени обычного пользователя, положите туда внешний адрес, выставьте chmod 600.
- Отправьте тестовое письмо на root командой mail и убедитесь по очереди и логу, что сработал alias.
- Посмотрите очередь тремя командами: mailq, sendmail -bp и postqueue -p (или exim -bp) - сравните вывод.
- Отправьте письмо с ключом sendmail -v и прочитайте SMTP-диалог; найдите соответствующие строки в journalctl или /var/log/mail.log.
- Уберите .forward и alias, снова пересоберите базу, проверьте, что почта root опять приходит локально.
- Чем роль MTA отличается от MDA и MUA, и какой компонент кладет письмо в конечный ящик?
- Какую запись DNS запрашивает MTA, чтобы узнать, куда доставлять письмо для домена?
- Почему после редактирования /etc/aliases изменения не вступают в силу до newaliases, и что эта команда делает физически?
- Чем ~/.forward принципиально отличается от записи в /etc/aliases по правам и по необходимости пересборки?
- Тремя командами можно посмотреть почтовую очередь - назовите их и скажите, какая работает только с Postfix.
- Что означает статус deferred у письма в выводе mailq и где искать причину?