OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам

в 21:30, , рубрики: Arch Linux, howto, opensmtpd, ssl/tls, uw imap, Настройка Linux, системное администрирование, метки: , ,

OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 1Почти каждому, у кого есть сервера с привязанными к ним доменами, так или иначе приходится решать вопрос с почтой, как минимум с доступностью адресов вида webmaster/postmaster/abuse@domain.
Кто-то учит M4 и настраивает встроенный sendmail, кто-то использует сторонние сервисы ( например от Google ), кто-то — поднимает стандартную связку postfix+courier-imap+mysql ( ну или аналоги ).

Мне первое было делать лениво, второе — не хотелось по идеологическим причинам, а третье — слишком избыточно. Поэтому я нашел свой «срединный путь», о чем и хочу рассказать в этой статье.

Prerequirements

При написании этого руководства я предполагал, что пользователь способен взаимодействовать с *nix-системами посредством консоли, умеет устанавливать пакеты своего дистрибутива и владеет как минимум одним текстовым редактором для редактирования конфигов. В качестве примера я буду устанавливать пакеты на Arch Linux, поскольку это мой домашний дистрибутив.

Постановка задачи

Прежде чем что-то делать нужно понять, зачем это делать. Описываемая конфигурация имеет смысл в том случае, если:

  • Количество локальных пользователей невелико и для них допустимо создать записи в /etc/passwd
  • Количество обслуживаемых доменов > 1, иначе нас спасает «sendmail по-умолчанию» ИЛИ
  • Нужны какие-то дополнительные вещи, например SSL/TLS или аутентификация ИЛИ
  • Конфигурация сервера недостаточна, чтоб запускать там тяжелые MTA

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

Установка UW IMAP — опциональная часть. Я не ставил его до тех пор, пока у меня не появилось дополнительных пользователей в системе, поскольку сам я без проблем заходил по ssh и делал mutt.

Установка и первичная настройка OpenSMTPD

В Arch Linux установка занимает секунд 5 :-)
OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 2

Конфигурация состоит из одного файла smtpd.conf и опциональных файлов с таблицами. Мой первоначальный конфиг выглядит так:

smtpd.conf
# разрешаем работу только по ipv4
limit mta inet4
# слушаем порт 25 на all, представляемся как server.com
listen on 0.0.0.0 port 25 hostname server.com
# таблицы можно вынести в отдельные файлы. Сейчас они маленькие и умещаются в тексте конфига
table aliases { root = kreon, abuse = kreon, postmaster = kreon, webmaster = kreon }
table domains { server.com, domain1.ru, domain2.net, domain3.in }
# Принимаем почту для указанных алиасов этих доменов и доставляем в локальный почтовый ящик (mbox)
accept from any for domain <domains> alias <aliases> deliver to mbox
# Пересылаем почту, полученную от локальных пользователей ( отправленную командой mail например )
accept from local for any relay
# Все остальное - не принимаем
reject from any for any

Как видите — ничего сложно, любая почта проходит по всем цепочкам reject/accept до тех пор, пока не попадет под какое-либо правило.

Проверка работоспособности

Теперь можно проверить, работает ли почта. Запускаем smtpd -n для проверки конфига и smtpd -d для запуска в foreground с логами в stdin:
OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 3
Пытаемся отправить почту на root@domain1.ru…
OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 4
И смотрим в вывод сервера
OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 5

Mutt подтверждает — почта доставлена!
OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 6
Этой минимальной конфигурации вполне достаточно для приема технической почты для десятка-другого доменов.

SMTPS/TLS, аутентификация и внешняя фильтрация

В opensmtpd аутентифицированный пользователь становится local. Аутентификация включается ключевым словом auth ( или auth-optional ) в строке с listen, но предварительно надо настроить smtps/tls. Дверенный сертификат и можно получить в разных местах, например у StartSSL. В любом случае предполагаем, что у вас есть 3 файла в формате PEM:

  1. server.crt — сертификат сервера
  2. server.key — приватный ключ от сертификата
  3. cachain.crt — цепочтка подтверждающих сертификатов

Теперь мы можем включить smtps/tls и аутентификацию:

smtpd.conf
# указываем где лежит сертификат, ключ и ca
pki server certificate "/etc/ssl/certs/server.crt"
pki server key "/etc/ssl/private/server.key"
pki server ca "/etc/ssl/certs/cachain.crt"

# разрешаем работу только по ipv4
limit mta inet4

# слушаем порт 25 на all, представляемся как server.com, разрешаем startssl и аутентификацию по желанию
listen on 0.0.0.0 port 25 tls pki server hostname server.com auth-optional
# слушаем порт 465 на all, представляемся как server.com, требуем ssl и аутентификацию, прячем в заголовках ip отправителя
listen on 0.0.0.0 port 465 smtps pki server hostname server.com auth mask-source

# таблицы можно вынести в отдельные файлы. Сейчас они маленькие и умещаются в тексте конфига
table aliases { root = kreon, abuse = kreon, postmaster = kreon, webmaster = kreon }
table domains { server.com, domain1.ru, domain2.net, domain3.in }
# Принимаем почту для указанных алиасов этих доменов и доставляем в локальный почтовый ящик (mbox)
accept from any for domain <domains> alias <aliases> deliver to mbox
# Пересылаем почту, полученную от локальных пользователей ( отправленную командой mail например )
accept from local for any relay
# Все остальное - не принимаем
reject from any for any

Теперь клиенты могут отправлять почту наружу с ssl и аутентификацией.

Тестируем

Настраиваем smtp-сервер:
OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 7
Отправляем письмо:
OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 8
Смотрим на output сервера:
OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 9

Mutt (обратите внимание на Received заголовок ):
OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 10

Антиспам и прочее

Например, можно добавить антиспам через spampd.

smtpd.conf

# указываем где лежит сертификат, ключ и ca
pki server certificate "/etc/ssl/certs/server.crt"
pki server key "/etc/ssl/private/server.key"
pki server ca "/etc/ssl/certs/cachain.crt"

# разрешаем работу только по ipv4
limit mta inet4

# слушаем порт 25 на all, представляемся как server.com, разрешаем startssl и аутентификацию по желанию
listen on 0.0.0.0 port 25 tls pki server hostname server.com auth-optional
# слушаем порт 465 на all, представляемся как server.com, требуем ssl и аутентификацию, прячем в заголовках ip отправителя
listen on 0.0.0.0 port 465 smtps pki server hostname server.com auth mask-source
# На этом порту мы получаем почту от spampd - уже фильтрованную
listen on 127.0.0.1 port 10026 tag Filtered

# таблицы можно вынести в отдельные файлы. Сейчас они маленькие и умещаются в тексте конфига
table aliases { root = kreon, abuse = kreon, postmaster = kreon, webmaster = kreon }
table domains { server.com, domain1.ru, domain2.net, domain3.in }

# Принимаем уже отфильтрованную почту и доставляем в mbox
accept tagged Filtered for domain <domains>  alias <aliases> deliver to mbox

# Принимаем почту для указанных алиасов этих доменов и отправляем ее к spampd
accept from any for domain <domains> relay via "smtp://127.0.0.1:10025"

# Остальное по тегу Filtered удаляем - чтоб антиспам случайно кому-то чего-то не послал
reject tagged Filtered

# Пересылаем почту, полученную от локальных пользователей ( отправленную командой mail например )
accept from local for any relay

# Все остальное - не принимаем
reject from any for any

И снова ничего сложного, легко настраивается по аналогии с фаерволом или другим поточным фильтром.

Установка и настройка UW IMAP

Как я уже писал, это часть опциональна, если на сервере один пользователь-сисадмин, то скорее всего imap там и не нужен.

Установка:
OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 11

Настройка:
OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 12
Сначала из ключа, сертификата сервера и сертификатов CA создаем PEM-файл для imapd ( его имя фиксированно ), потом создаем xinetd-unit для xinetd и запускаем xinetd соответственно. Все, ура :-)

Тестируем

Настраиваем почтовый клиент для работы с IMAP
OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 13
Проверяем почту и сравниваем с тем, что было в MUTT
OpenSMTPD + UW IMAP как альтернатива тяжелым почтовым системам - 14

Итого

Мы получили полноценную почтовую систему, с SSL/TLS и аутентификацией, способную работать даже на микроволновке и не требующую при этом часов вдумчивого чтения манов. По желанию можно расширить ее дальше, добавив например DKIM, backup MX, Greylisting и многое другое. В качестве бонуса: OpenSMTPD делает команда OpenBSD, а значит шанс на наличие там критической уязвимости очень и очень мал.

Спасибо за внимание.

Автор: kreon

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js