Почтовый сервер 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 — это доменное имя, соответствующее ранее заданному имени хоста.
После внесения изменений в конфигурацию необходимо:
- перезапустить службу командой:
sudo systemctl restart opensmtpd
- убедиться в её успешном запуске:
sudo systemctl status opensmtpd
Проверка работы OpenSMTPD
После настройки конфигурации почтового сервера необходимо убедиться в его работоспособности. По умолчанию OpenSMTPD осуществляет доставку писем в формате Maildir, где каждое сообщение хранится в отдельном файле в каталоге ~/Maildir домашней директории пользователя-получателя. Этот каталог требуется создать заранее.
Для осуществления проверки доставки почты выполняют следующие шаги:
- Создание нового пользователя-получателя:
sudo useradd ivanov
- Создание каталога для хранения почты:
sudo -u ivanov mkdir -p /home/ivanov/Maildir
- Определение IP-адреса сервера командой:
ip a
Например, адрес сервера: 192.168.122.12.
- Проверка доставки письма с другого ПК на сервер через службу Telnet:
telnet 192.168.122.12 25
Ожидаемый ответ сервера:
220 mail.rosa.loc ESMTP OpenSMTPD
- Последовательное выполнение команд SMTP-протокола (с обязательным соблюдением синтаксиса):
helo dom.loc
Ожидаемый ответ:
250 mail.rosa.loc Hello dom.loc [192.168.122.1], pleased to meet you
- Следующей командой указывается адрес отправителя письма (следует обратить внимание на необходимость строгого соблюдения RFC 2822 и указания адреса в знаках < >):
mail from:<vasya@domain.loc>
Ожидаемый ответ:
250 2.0.0 Ok
- Указывается получатель письма:
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
- Проверка логов и доставки сообщения:
Просмотр системного журнала командой:
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
- Почтовый сервер определяет домашний каталог пользователя через механизм PAM. Конфигурация PAM для службы OpenSMTPD расположена в файле:
/etc/pam.d/opensmtpd
- Домашний каталог пользователя 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 необходимо выполнить следующие шаги:
- Открыть и перейти в основной конфигурационный файл:
sudo nano /etc/dovecot/conf.d/10-mail.conf
- В файле необходимо найти строку:
#mail_location =
и заменить её на следующую:
mail_location = maildir:~/Maildir
Внесенные опции укажут Dovecot на использование формата хранения Maildir в домашнем каталоге каждого пользователя.
- После внесения изменений необходимо запустить и активировать службу Dovecot командой:
sudo systemctl enable --now dovecot.socket
После выполненных настроек почта будет работать следующим образом:
- OpenSMTPD принимает сообщения по протоколу SMTP и сохраняет их в директорию ~/Maildir пользователя;
- Dovecot предоставляет пользователю доступ к этим сообщениям по протоколу IMAP.
Таким образом можно подключаться к почтовому ящику как по SMTP (для исходящей почты), так и по IMAP (для входящей почты), например, используя удобный почтовый клиент.
По умолчанию как OpenSMTPD, так и Dovecot используют системных пользователей Linux и их пароли для аутентификации. Это обеспечивает интеграцию с PAM и возможность управления учетными записями через стандартные механизмы ОС.
Дополнительные рекомендации по безопасности и интеграции
Для обеспечения безопасной работы почтового сервера OpenSMTP также рекомендуется выполнять следующие настройки Системы:
- Настройка 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. Эти компоненты могут быть развернуты на том же сервере или вынесены на отдельные узлы.
- Настройка 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:
- Открыть файл конфигурации Nftables:
sudo nano /etc/nftables.conf
- Добавить правила в таблицу inet (если такая уже создана) или в существующую filter:
table inet filter {
chain input {
type filter hook input priority 0;
Разрешить входящие подключения к почтовым сервисам
tcp dport {25, 143, 993} accept
}
}
- Применить изменения:
sudo nft flush ruleset
sudo nft -f /etc/nftables.conf
- Проверить применённые правила:
sudo nft list ruleset
Также рекомендуется выполнить следующие меры для обеспечения безопасности подключений почтового сервера:
- ограничить доступ к портам 25/143/993 только с доверенных IP-адресов (например, только адреса организации или VPN);
- при необходимости использовать шифрование для SMTP (порт 465 или STARTTLS на 25) и IMAP (порт 993);
- убедиться, что правила Nftables применяются при каждом запуске Системы командой:
systemctl enable nftables