Почтовый сервер OpenSMTPD

OpenSMTPD представляет собой почтовый сервер, развиваемый проектом OpenBSD и предназначенный для простой, безопасной и надежной замены таких решений, как Sendmail. Данный сервер обеспечивает минимальную конфигурацию при сохранении всех необходимых функций.

Для установки OpenSMTPD необходимо выполнить следующую команду:

sudo dnf install opensmtpd

Рекомендуется ознакомиться с составом пакета, включая список доступных руководств (man-страниц):

rpm -ql opensmtpd

Запуск службы осуществляется командой:

sudo systemctl start opensmtpd

Для проверки состояния службы используется:

sudo systemctl status opensmtpd

Журнал работы службы просматривается командой:

sudo journalctl -u opensmtpd

Для проверки используемых интерфейсов и портов следует выполнить:

sudo ss -ntulp | grep smtpd

По умолчанию служба прослушивает порт 25 на локальном интерфейсе (127.0.0.1).

При успешном запуске службы необходимо добавить её в автозапуск:

sudo systemctl enable opensmtpd

Настройка OpenSMTPD

Для корректной работы почтового сервера следует задать его доменное имя, например:

sudo hostnamectl set-hostname mail.rosa.loc

В приведённом примере в качестве имени хоста используется mail.rosa.loc, что подразумевает обслуживание почтовых адресов вида user@rosa.loc (где rosa.loc — домен второго уровня).

Файл конфигурации OpenSMTPD расположен по адресу /etc/opensmtpd/smtpd.conf.

Для редактирования файла конфигурации нужно выполнить:

sudo nano /etc/opensmtpd/smtpd.conf

По умолчанию в конфигурации задано значение, которое определяет, что служба smtpd будет слушать только соединения, приходящие с локального компьютера:

listen on localhost

Данный параметр регламентирует:

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

Если предполагается доступность почтового сервера из внешней сети, следует заменить эту опцию на следующую:

listen on 0.0.0.0

Для указания домена для обслуживания в файле конфигурации необходимо над строкой:

match for local action "local"

добавить строку, определяющую домен:

match from any for domain "rosa.loc" action "local"

где rosa.loc — это доменное имя, соответствующее ранее заданному имени хоста.

После внесения изменений в конфигурацию необходимо:

  1. перезапустить службу командой:
sudo systemctl restart opensmtpd
  1. убедиться в её успешном запуске:
sudo systemctl status opensmtpd

Проверка работы OpenSMTPD

После настройки конфигурации почтового сервера необходимо убедиться в его работоспособности. По умолчанию OpenSMTPD осуществляет доставку писем в формате Maildir, где каждое сообщение хранится в отдельном файле в каталоге ~/Maildir домашней директории пользователя-получателя. Этот каталог требуется создать заранее.

Для осуществления проверки доставки почты выполняют следующие шаги:

  1. Создание нового пользователя-получателя:
sudo useradd ivanov
  1. Создание каталога для хранения почты:
sudo -u ivanov mkdir -p /home/ivanov/Maildir
  1. Определение IP-адреса сервера командой:
ip a

Например, адрес сервера: 192.168.122.12.

  1. Проверка доставки письма с другого ПК на сервер через службу Telnet:
telnet 192.168.122.12 25

Ожидаемый ответ сервера:

220 mail.rosa.loc ESMTP OpenSMTPD
  1. Последовательное выполнение команд SMTP-протокола (с обязательным соблюдением синтаксиса):
helo dom.loc

Ожидаемый ответ:

250 mail.rosa.loc Hello dom.loc [192.168.122.1], pleased to meet you
  1. Следующей командой указывается адрес отправителя письма (следует обратить внимание на необходимость строгого соблюдения RFC 2822 и указания адреса в знаках < >):
mail from:<vasya@domain.loc>

Ожидаемый ответ:

250 2.0.0 Ok
  1. Указывается получатель письма:
rcpt to:<ivanov@rosa.loc>

Ожидаемый ответ:

250 2.1.5 Destination address valid: Recipient ok

Ввод:

data

В ответ приходит приглашение начать ввода письма. Необходимо ввести текст:

Message-ID: <x01@dom.loc>
Subject: Test
Privet
.

Ожидаемый ответ:

250 2.0.0 <message_id> Message accepted for delivery
  1. Проверка логов и доставки сообщения:

Просмотр системного журнала командой:

journalctl -u opensmtpd
- Убедиться, что письмо сохранено в директории пользователя:
cat /home/ivanov/Maildir/new/*

Пример содержимого доставленного сообщения:

Return-Path: <vasya@domain.loc>
Delivered-To: ivanov@rosa.loc
Received: from dom.loc (hp-xfce [192.168.122.1])
by mail.rosa.loc (OpenSMTPD) with SMTP id df9164e0
for <ivanov@rosa.loc>;
Sat, 10 Dec 2022 20:13:31 +0000 (UTC)
Message-ID: <x01@dom.loc>
Subject: Test
Privet
  1. Почтовый сервер определяет домашний каталог пользователя через механизм PAM. Конфигурация PAM для службы OpenSMTPD расположена в файле:
/etc/pam.d/opensmtpd
  1. Домашний каталог пользователя ivanov был получен через PAM. Конфигурация PAM для службы OpenSMTPD расположена в файле:
/etc/pam.d/opensmtpd

Это позволяет использовать как локальные, так и доменные (например, LDAP) учетные записи для получения почты.

Интеграция OpenSMTPD с Dovecot

Для организации полноценного почтового сервера, обеспечивающего как приём сообщений (SMTP), так и их выдачу пользователям (IMAP), целесообразно использовать связку OpenSMTPD и Dovecot. В данной конфигурации OpenSMTPD будет принимать почту и сохранять её в формате Maildir, а Dovecot — предоставлять доступ к этой почте по IMAP.

Для установки Dovecot с необходимыми зависимостями следует выполнить команду:

sudo dnf install dovecot

Для настройки Dovecot необходимо выполнить следующие шаги:

  1. Открыть и перейти в основной конфигурационный файл:
sudo nano /etc/dovecot/conf.d/10-mail.conf
  1. В файле необходимо найти строку:
#mail_location =

и заменить её на следующую:

mail_location = maildir:~/Maildir

Внесенные опции укажут Dovecot на использование формата хранения Maildir в домашнем каталоге каждого пользователя.

  1. После внесения изменений необходимо запустить и активировать службу Dovecot командой:
sudo systemctl enable --now dovecot.socket

После выполненных настроек почта будет работать следующим образом:

  • OpenSMTPD принимает сообщения по протоколу SMTP и сохраняет их в директорию ~/Maildir пользователя;
  • Dovecot предоставляет пользователю доступ к этим сообщениям по протоколу IMAP.

Таким образом можно подключаться к почтовому ящику как по SMTP (для исходящей почты), так и по IMAP (для входящей почты), например, используя удобный почтовый клиент.

По умолчанию как OpenSMTPD, так и Dovecot используют системных пользователей Linux и их пароли для аутентификации. Это обеспечивает интеграцию с PAM и возможность управления учетными записями через стандартные механизмы ОС.

Дополнительные рекомендации по безопасности и интеграции

Для обеспечения безопасной работы почтового сервера OpenSMTP также рекомендуется выполнять следующие настройки Системы:

  1. Настройка TLS/SSL. Для обеспечения защищённой передачи писем рекомендуется настроить TLS/SSL на OpenSMTPD и Dovecot.

В smtpd.conf можно активировать STARTTLS или слушать SMTPS (порт 465), задав путь к сертификатам и ключам:

listen on 0.0.0.0 port 587 tls pki mail.rosa.loc

где pki mail.rosa.loc — определение сертификата в конфигурации OpenSMTPD.

Можно сгенерировать самоподписанные сертификаты либо использовать сервис Let’s Encrypt (центр сертификации, предоставляющий бесплатные криптографические сертификаты X.509 для шифрования передаваемых через интернет данных HTTPS и других протоколов, используемых серверами в Интернете).

Для IMAP рекомендуется настроить Dovecot на порт 993 (IMAPS), в файле /etc/dovecot/conf.d/10-ssl.conf указав:

ssl = required
ssl_cert = </etc/letsencrypt/live/mail.rosa.loc/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.rosa.loc/privkey.pem

В результате пароли пользователей будут передаваться по защищённому каналу.

Для защиты пользователей почты рекомендуется интеграция со спам-фильтрами и антивирусными решениями. В качестве антиспам-решения может быть установлен rspamd или SpamAssassin. Для проверки вложений на наличие вирусов можно интегрировать ClamAV.

В цепочке обработки писем OpenSMTPD настраивается фильтр с помощью filter-директив, перенаправляющий почту через rspamd или amavis. Эти компоненты могут быть развернуты на том же сервере или вынесены на отдельные узлы.

  1. Настройка SPF, DKIM и DMARC:
  • SPF настраивается через публикацию DNS-записи типа TXT, в которой перечисляются IP-адреса отправителей, например:
v=spf1 ip4:192.168.122.12 -all
  • DKIM предполагает установку пакета opendkim и генерацию пары ключей, после чего публичный ключ публикуется в DNS;
  • DMARC задаётся также через TXT-запись в DNS и позволяет указать, как обрабатывать письма, не прошедшие SPF/DKIM.

Эти механизмы совместно снижают риск попадания писем в папки спама у получателей.

Настройка ротации логов. Журналы работы OpenSMTPD и Dovecot могут со временем занимать значительный объём, для их ротации используется система logrotate. В стандартных пакетах уже предусмотрены конфигурации в каталоге /etc/logrotate.d/. При необходимости можно настроить собственные параметры, например: частоту ротации, количество архивных копий и алгоритм сжатия. Регулярная ротация позволяет не переполнить файловую систему логами.

Рекомендуется регулярно выполнять резервное копирование:

  • конфигурационных файлов (/etc/opensmtpd/, /etc/dovecot/);
  • почтовых ящиков пользователей (~/Maildir);
  • базы пользователей (если используется внешняя БД).

Для автоматизации можно применять rsync, borg, tar в связке с cron.

Настройка межсетевого экранирования (Nftables) для почтовых сервисов.

Для обеспечения доступности SMTP и IMAP/IMAPS из внешней сети необходимо настроить правила в системе сетевого экранирования Nftables, разрешив входящие соединения на соответствующие порты:

  • 25 — SMTP (OpenSMTPD);
  • 143 — IMAP (Dovecot);
  • 993 — IMAPS (если используется шифрование).

Пример добавления правил для OpenSMTP в Nftables:

  1. Открыть файл конфигурации Nftables:
sudo nano /etc/nftables.conf
  1. Добавить правила в таблицу inet (если такая уже создана) или в существующую filter:
table inet filter {
chain input {
type filter hook input priority 0;
Разрешить входящие подключения к почтовым сервисам
tcp dport {25, 143, 993} accept
}
}
  1. Применить изменения:
sudo nft flush ruleset
sudo nft -f /etc/nftables.conf
  1. Проверить применённые правила:
sudo nft list ruleset

Также рекомендуется выполнить следующие меры для обеспечения безопасности подключений почтового сервера:

  • ограничить доступ к портам 25/143/993 только с доверенных IP-адресов (например, только адреса организации или VPN);
  • при необходимости использовать шифрование для SMTP (порт 465 или STARTTLS на 25) и IMAP (порт 993);
  • убедиться, что правила Nftables применяются при каждом запуске Системы командой:
systemctl enable nftables