Как поднять свой почтовый сервер
Настройка собственного почтового сервера
Если есть необходимость освежить в памяти как всё это работает, то есть давняя, но актуальная статья об архитектуе почтовых систем.
Есть три основных шага, чтобы установить и настроить собственный почтовый сервер.
Настройка IP и DNS
Выбор и запуск приложения почтового сервера
Добавление своего почтового сервера в белые списки
Настройка IP и DNS
Обеспечение внешнего статического IP-адреса, публичного домена и записи PTR
Это основные требования для запуска собственного почтового сервера.
Публичный статический IP-адрес
IP-адрес почтового сервера должен быть общедоступным и постоянным во времени. Убедиться в этом можно у хостинг или Интернет-провайдера.
Доменное имя указывает на IP
DNS-запись публичного доменного имени почтового сервера должна указывать на этот IP-адрес. Им можно управлять в настройках DNS провайдера доменного имени.
IP указывает на доменное имя
Самое главное, обратная DNS-запись (именуемая PTR) должна указывать на доменное имя почтового сервера по IP-адресу. Можно попросить своего хостинг-провайдера или поставщика интернет-услуг настроить его. Его можно легко проверить по IP-адресу онлайн (например, тут), или с помощью команды ‘nslookup’ в Windows и команды ‘host’ в системах на основе UNIX.
Настройка MX записи в DNS
Запись почтового обмена (MX) указывает почтовый сервер, ответственный за прием сообщений электронной почты от имени домена.
Type
Host
Value
Priority
Priority (приоритет) используется, когда в домене более одного почтового сервера.
TTL (время жизни) можно установить любое предпочтительное значение, а наименьшее значение используется для применения конфигурации DNS как можно скорее при отладке настроек.
Настройка DKIM записи в DNS
Почта, идентифицированная ключами домена (DKIM) — это протокол безопасности электронной почты, который прикрепляет зашифрованную цифровую подпись к электронному письму. Принимающий сервер проверяет его с помощью открытого ключа, чтобы убедиться, что электронное письмо не было подделано.
И запись DNS будет выглядеть так:
Type
Host
Value
selector._domainkey
v=DKIM1; k=rsa; p=public_key
TTL (время жизни) имеет то же значение, что и в предыдущем разделе.
Настройка SPF записи в DNS
Инфраструктура политики отправителя (SPF) — это стандарт проверки подлинности электронной почты, который проверяет IP-адрес отправителя по списку авторизованных IP-адресов владельца домена для проверки входящей электронной почты.
Тут запись DNS будет выглядеть так:
Type
Host
Value
TTL (время жизни) имеет то же значение, что и в предыдущем разделе.
Можно использовать удобный онлайн-генератор записи SPF.
Дополнительные записи DNS
Некоторые поля не обязательны, но желательно иметь.
DMARC
Запись доменной проверки подлинности сообщений, отчетов и соответствия (DMARC) позволяет собственному почтовому серверу декларировать политику того, как другие почтовые серверы должны реагировать на недостоверные сообщения от него.
BIMI
Индикаторы бренда для идентификации сообщений (BIMI) — это новый стандарт, созданный для того, чтобы упростить отображение логотипа рядом с сообщением. Кроме того, BIMI предназначен для предотвращения мошеннических электронных писем и улучшения доставки.
TLS-RPT
TLS-отчетность (TLS-RPT) дает ежедневные сводные отчеты с информацией о электронных письмах, которые не зашифровываются и не доставляются.
Все эти записи кроме MTA-STS могут быть созданы с помощью Power DMARC Toolbox. Конфигурация MTA-STS похожа на Google, также описывалась на habr, и, наконец, может быть проверена с помощью Hardenize.
Выбор и запуск приложения почтового сервера
Конечно, хостинг должен позволять устанавливать программное обеспечение. Можно использовать любое подходящее приложение для почтового сервера. Например, есть бесплатный hMailServer для Windows, который предоставляет все необходимые функции с минимальным использованием ресурсов. Для систем на базе UNIX существует множество бесплатных почтовых серверов, таких как Exim Internet Mailer или iRedMail.
Если вы знаете ещё хорошие программы, то поделитесь ими в комментариях. Подробный обзор выбора такого программного обеспечения, конечно, заслуживает отдельной статьи.
Инициализация
Когда программное обеспечение выбрано и установлено, самое время его настроить.
Домен и пользователи
Нужно добавить домен и начальный набор пользователей почтового сервера.
Безопасность
Чтобы обеспечить соответствующий уровень безопасности, мы должны добавить сертификат SSL для домена. Конфигурацию SSL можно проверить здесь.
Подпись сообщений
Далее, следует настроить DKIM. Нужно указать полученные выше приватный ключ и селектор. Кроме того, методы заголовка и тела должны быть установлены на «расслабленный», алгоритм подписи должен быть установлен на «SHA256», иначе на некоторых SMTP серверах не проходит проверка (например, google).
Защита от спама
Наконец, нужно настроить антиспам-проверку специальными узлами черных списков, такими как spamhaus.org, чтобы защитить пользователей почтового сервера от нежелательных сообщений.
Протоколы электронной почты
Нужно настроить три протокола электронной почты, которые необходимы для её отправки и получения.
SMTP используется для приема входящей и исходящей почты с/на другие почтовые серверы. И это позволяет пользователям домена отправлять свои сообщения.
25 порт
Этот порт необходим для управления входящими подключениями от других почтовых серверов. Метод безопасности следует установить в STARTTLS.
587 порт
Он нужен для почтовых клиентов собственного почтового сервера. Метод безопасности следует установить в STARTTLS.
465 порт
Он не является официальным и может потребоваться для старых почтовых клиентов. И метод безопасности следует установить в SSL/TLS.
POP3, IMAP
POP3 и IMAP используются отдельными почтовыми клиентами, такими как Outlook на ПК или любой почтовый клиент на мобильных телефонах. Это позволяет пользователям домена управлять своими сообщениями.
Также можно настроить порты 143 для IMAP и 110 для POP3, но они не шифруются и сейчас их уже мало кто использует.
Проверка
Итак, когда все настроено, нужно протестировать почтовый сервер, отправив письмо кому-нибудь из списка пользователей. Кроме того, в некоторых почтовых приложениях есть функция самодиагностики (см. ниже пример от hMailServer).
Теперь пора проверить отправку на внешний адрес.
Аккаунт Gmail.com
Если есть учетная запись Gmail.com (что наверняка), можно отправить тестовое письмо на свой адрес Gmail. Затем открываем свою электронную почту в браузере и нажимаем «Показать подробности».
Если есть «подписано: домен», подпись DKIM настроена правильно. Если есть «отправлено по почте: домен», SPF в порядке.
Также, можно убедиться в оригинальных заголовках, что статус проверки пройден.
Также, в Outlook можно видеть те же заголовки в свойствах сообщения.
Специальные онлайн-сервисы
Существует множество онлайн-сервисов, которые могут проверять отправку электронной почты. Ниже приведены некоторые из них.
AppMailDev
Этот сервис позволяет тестировать конфигурацию почтового сервера, такую как DKIM и SPF, отправляя электронное письмо на указанный сгенерированный почтовый адрес. Нужно просто следовать инструкциям на экране и результаты теста будут отображены там же.
DKIMValidator
Предоставляет те же функции, что и предыдущая служба. Результаты тестирования будут отправлены на адрес отправителя.
HAD Email Auth Tester
Чтобы проверить отправку сообщения здесь, нужно отправить специальное сообщение на tester@email-test.had.dnsops.gov. Результаты тестирования будут отправлены на адрес отправителя.
PowerDMARC
Этот сервис предоставляет только облегченную проверку всех атрибутов, но у него есть удобные инструменты, указанные в ссылках выше.
Итак, если всё настроено правильно, но сервер присутствует в чёрных списках спама, нужно внести его в белый список.
Добавление почтового сервера в белые списки
Итак, если всё вышеперечисленное настроено правильно, другие почтовые серверы по-прежнему могут отмечать сообщения как спам и отклонять их. Это бывает, когда IP (или его диапазон) домена попадает в какой-то черный список. Чаще всего причиной этого является использование соседних IP-адресов для рассылки спам-сообщений.
Внесение в белый список в публичных источниках
Итак, сначала проверим IP (и, если необходимо, домен) онлайн на наличие в каких-либо черных списках. Его можно проверить в любом онлайн-чекере, который можно найти через поиск. Например, MXToolBox проверяет самые популярные черные списки. Также, multirbl.valli.org показывает много источников черного списка и доверие к каждому из них.
Затем нужно последовательно просмотреть каждый элемент в результатах и прочитать рекомендации о том, как внести IP-адрес в белый список в конкретном источнике черного списка. Но не все из них могут позволить это сделать бесплатно, например, немецкий UCEPROTECT®-Network.
Внесение в белый список определенных почтовых серверов
Обход черных списков
SendInBlue
Это еще один хороший сервис, который позволяет бесплатно отправлять 9 тысяч писем в месяц с лимитом 200 в день. Но есть нюансы: встроенное отслеживание электронной почты нельзя отключить и высоковатая цена сверх бесплатного лимита.
В каждой службе нужно зарегистрироваться и получить подтверждение почтового домена. После подтверждения, каждый из них дает указания на то, что должно быть настроено для DNS (DKIM, SPF и DMARK) и почтового приложения (адрес сервера ретрансляции SMTP, порт и учетные данные).
Заключение
Итак, теперь можно использовать все преимущества выделенного почтового сервера. Надеюсь, что этот материал поможет наиболее эффективно достичь поставленной цели. Если есть какие-либо вопросы или предложения по этой теме, буду рад обсудить в комментариях.
Строим свой Gmail с куртизанками и преферансом
Вместо предисловия
В один прекрасный, а может и не такой уж и прекрасный, день настигла паранойя и меня. Было принято решение бежать от Google подальше. При чем, бежать куда-нибудь на свою площадку, чтобы быть спокойным за сохранность своих любимых сервисов.
Итак, в этой статье я расскажу о том, как я поднимал и настраивал на своем сервере почту, календарь, контакты, RSS-аггрегатор и, в качестве бонуса, хранилище файлов.
0. Сервер
Прежде чем разворачивать все необходимые сервисы, сперва необходимо решить где они будут жить. Первая мысль, которая приходит в голову — развернуть все на своем домашнем компьютере. Но включенный 24/7 компьютер дома доставляет немало неудобств. К тому же, мы хотим, чтобы наши сервисы были доступны всегда, а с качеством домашнего интернета и электроснабжения это почти невозможно. Да что там говорить о качестве, многие интернет провайдеры запрещают держать какие-либо серверы дома.
1. Почта
После того, как мы развернули сервер и зарегистрировали домен, можно приступать к установке необходимых нам служб. Я еще и ленивая жопа человек ленивый и люблю использовать пакеты, которые работают прямо из коробки. Поэтому для установки почтового сервера я выбрал iRedMail. Бесплатной версии будет вполне достаточно для решения наших задач.
ВНИМАНИЕ: на сайте iRedAdmin написано, что его нужно устанавливать _только_ на свежеустановленную ОС. Я не пробовал устанавливать пакет на «бэушный» сервер, однако, подозреваю, что закончится это все не самым лучшим образом.
Не будем долго задерживаться на этапе установки, эта процедура довольно проста и подробно описана тут, тут и тут. После установки можем пойти на панель управления по адресу example.com/iredadmin и создать нового пользователя. Теперь у нас есть полностью рабочий почтовый сервер.
Но мы пойдем немного дальше и заменим apache на nginx. Сперва, необходимо установить сам веб-сервер. В ubuntu это делается так:
Теперь необходимо настроить его таким образом, чтобы все наши сервисы были доступны. Так как мы хотим, чтобы весь трафик шифровался, то необходимо немного модифицировать дефолтный конфиг, включив шифрование. Подробнее о настройке шифрования в nginx можно почитать тут. Мой глобальный конфиг /etc/nginx/nginx.conf выглядит следующим образом:
Таким образом, я включил шифрование глобально для всех сайтов, которые будет обслуживать nginx. Теперь нужно написать конфиги для необходимых нам сервисов.
Для этого в /etc/nginx/sites-enabled/ создаем новый файл примерно с таким содержанием:
Здесь мы видим правила обслуживания адресов /phpmyadmin и /iredadmin. Так как phpmyadmin написан на вот так неожиданность php, то для его работы необходимо установить php5-fpm. В ubuntu это делается так:
Далее, в конфиге /etc/php5/fpm/pool.d/www.conf прописываем строчку:
Таким образом мы указываем fpm, чтобы он слушал на сокете /var/run/php5-fpm.sock. Именно на этот сокет настроен наш nginx.
iredadmin, в свою очередь, написан на python и для его работы нам понадобится uwsgi. Также, для красивого запуска uwsgi, я использую supervisor. Установим эти пакеты.
Конфиг uwsgi-приложения /etc/uwsgi/iredadmin.ini у меня выглядит следующим образом:
Конфиг супервизора /etc/supervisor/conf.d/iredadmin.conf выглядит так:
Останавливаем apache, запускаем nginx и supervisor:
Идем в браузер и проверяем все ли работает.
2. Контакты и календари
Для того, чтобы наше рабочее окружение было максимально комфортным, нам необходимо поднять сервер контактов и календарей. Сперва мой выбор пал на Baikal. Это замечательное решение, которое разворачивается за считанные секунды и неплохо работает. Но мы ведь хотим, чтобы все наши сервисы также были доступны и через web, а Baikal, к сожалению, не имеет встроенного web-интерфейса. Таким образом, необходимо искать, устанавливать и настраивать еще один продукт. После непродожительного поиска, наткнулся на отличное решение — ownCloud. Это полноценный WebDAV сервер, у которого есть веб-интерфейс и клиенты для разных платформ. Из коробки мы получаем сервер контактов и календарь. Более того, мы получаем свое личное облачное хранилище!
Установка
Интеграция контактов с RoundCubeMail
Для того, чтобы мы могли пользоваться контактами прямо в веб-интерфейсе почтового ящика, необходимо установить плагин для RoundCubeMail. Я использовал этот.
Сначала нужно установить plugin-manager для RoundCube. Видео-инструкция по установке лежит тут. В моем случае оказалось, что iRedMail не выдал всех привилегий пользователю БД roundcube для базы roundcubemail. Убедитесь, что все права выданы, иначе плагин-менеджер не установится. После этого качаем архив с плагином Roundcube-CardDAV, распаковываем его и кладем содержимое в папку /var/www/roundcube/plugins/carddav/. Затем необходимо включить этот плагин в настройках RoundCube в веб-интерфейсе. Теперь в настройках появился новый пункт CardDAV, в котором необходимо прописать адрес нашего CardDAV-сервера.
3. RSS
В завершение осталось поднять только RSS аггрегатор. Для решения этой задачи я использовал Tiny Tiny RSS. Это легкий движок, который прост в установке и настройке и имеет несколько тем оформления.
Установка
Конфиг nginx /etc/nginx/sites-enabled/rss имеет следующий вид:
Для того, чтобы фиды обновлялись автоматически в фоновом режиме, я добавил еще одно приложение для супервизора:
4. Синхронизация с мобильным телефоном
Зачем нам все это без синхронизации с мобильным телефоном? Вот и я думаю, что незачем.
Для синхронизации файлов, у ownCloud есть приложение для Android и iPhone. К сожалению, оно пока не умеет синхронизировать календарь и контакты, потому приходится использовать сторонние синхронизаторы.
На сколько мне известно, для iPhone ничего изобретать не надо, там синхронизация с CardDAV/CalDAV есть из коробки. В случае с Android, необходимо установить приложения, которые будут синхронизировать наши контакты и календари. В Google Play есть несколько приложений подобного рода, мой выбор пал на CalDAV-Sync и CardDAV-Sync.
Для Tiny Tiny RSS существует официальный клиент для Android.
Заключение
В итоге, мы получили хорошую альтернативу Gmail’у, полностью принадлежащую нам. Теперь можно спать спокойно, не опасаясь злых дядь, которые любят читать нашу почту и закрывать любимые сервисы. Как бонус, я обнаружил, что мой Android смартфон теперь живет в 1.5-2 раза дольше от одного заряда. Лишь благодаря отключению синхронизации гугловских календарей и контактов.
Спасибо всем, кто осилил весь этот поток мыслей. Пожелания, предложения и конструктивная критика приветствуются.
Настраиваем домашний почтовый сервер и уходим с «бесплатной» почты
С каждым годом рекламы в интернете становится все больше, а подают ее с каждым разом все навязчивее. Дошло уже до почты: реклама в интерфейсе почтового ящика выглядит как первое непрочитанное письмо, которое машинально хочется открыть. Я не против рекламы, особенно когда она в тему и не сбивает с толку. Но маскировать её под непрочитанное письмо ‒ это перебор. Чувствуется, что следующим шагом рекламу начнут вставлять прямо в тело письма.
Мы уже привыкли, что наша активность в интернете анализируется для подсовывания релевантной рекламы. Но там нет персональных данных в чистом виде: есть пользователь-1 с такими-то привычками, есть пользователь-2 с другими привычками, пользователь-3, 4, 5 и т.д.
Совсем другое дело почта. Обработка почты ‒ это зачастую обработка персональных данных. Все что вы покупаете ‒ квитанции приходят к вам на почту, какими сервисами вы пользуетесь ‒ регистрационные данные и отчеты приходят к вам на почту, купили билеты в отпуск ‒ все данные о вашей поездке у вас в почте. А почта у вас где?
Проблема в том, что вся почта обрабатывается, плюс нет гарантий, что не будет случаев злоупотребления. А реклама в почте ‒ это просто вишенка на торте. Так что если вы неугомонный параноик, то вам давно пора отказаться от «бесплатной» почты.
Но отказаться не так то просто:
Можно завести ящик на другом почтовом сервисе, но там тоже не будет никаких гарантий отсутствия обработки писем.
Можно арендовать виртуальный сервер в интернете и настроить его как почтовый сервер, но без физического доступа ваши письма никогда не станут только вашими.
Можно сделать почту на каком-нибудь зашифрованном protonmail’e, но по этой же причине он стал так популярен у мошенников, что был заблокирован в этой стране.
В голове остается один вариант ‒ делать почтовый сервер прямо дома. Идея на первый взгляд смешная, но если разобраться, то можно получить довольно интересный результат с некоторыми дополнительными бонусами для всей домашней сети. Что у меня из этого вышло ‒ читайте далее.
Домашний сервер
Очевидно, что для почтового сервера нам нужен комп или его аналог, который будет доступен извне 24/7. Можно было бы посмотреть в сторону чего-нибудь компактного и маломощного типа Raspberry Pi, но т.к. мне нужен задел на будущее для других домашних систем, то я отдал предпочтение полноценному компу. На комп устанавливается гипервизор VMWare ESXi, а на нем уже живут виртуальные машины с необходимыми функциями и в том числе почтовый сервер. Такой подход дает дополнительную гибкость при проведении экспериментов и распределении ресурсов, а в случае чего виртуальные машины можно легко перенести на другое железо. Если нет особых требований к скорости работы, то для компа можно взять обычный HDD, т.к. от разделов подкачки виртуальных машин б/ушный SSD может быстро деградировать. Либо делать виртуальные машины без swap. Либо ставить два диска: основной диск виртуальной машины живет на SSD, а раздел подкачки на HDD. Компьютер я выбрал HP ProDesk 600 G2 SFF с процессором i5-6500: компактный корпус, достаточно низкое энергопотребление и ESXi на него устанавливается как родной. Все это хозяйство в режиме простоя потребляет 25 Вт, под нагрузкой 40-45 Вт. В частных объявлениях такой комп вполне реально найти за вменяемые деньги.
ESXi устанавливается со всеми настройками по умолчанию, затем сетевому интерфейсу присваивается статический IP. Более подробно и с картинками см. здесь.
Связь, электричество, бэкапы
Дома, в отличие от датацентра возможны перебои электричества, поэтому нужен ИБП с батареей на несколько часов работы сервера и роутера. От этого же электричества зависит работа оборудования внутридомового провайдера, поэтому ИБП для домашнего сервера не решает проблему отключения провайдерского оборудования и интернета вместе с электричеством. Получается, что на домашний роутер должно быть заведено два провайдера: основной (например, по витой паре или оптике) и резервный (через LTE модем). В разных роутерах процесс настройки выглядит по разному, но суть не меняется. Для резервного интернет-канала я взял LTE модем Huawei E3372-320. Свисток хорош тем, что есть в свободной продаже в разлоченном виде и он оснащен разъемами для внешних антенн, что в некоторых ситуациях может сильно улучшить качество связи.
Однако, с двумя провайдерами у вас будет два разных серых IP адреса, а почтовому серверу нужно нормальное доменное имя и по хорошему белый IP. Выход из ситуации у меня такой: арендуется виртуальный сервер (VPS) за границей, на нем настраивается VPN-сервер, а на почтовом сервере настраивается туннель до VPS. Кроме того, туннель можно поднять прямо с домашнего роутера (если он умеет) и таким образом ликвидируется сразу два зайца: мы получаем статический белый IP не зависящий от локальных провайдеров, а после тюнинга маршрутизации на роутере ‒ централизованный обход блокировок Роскомпозора для всех устройств домашней сети. Схема получается примерно такая:
Будет не очень весело, если жесткий диск домашнего сервера неожиданно накроется вместе со всей почтой. Поэтому необходимость бэкапов сервера даже не обсуждается. О настройке бэкапов поговорим в конце статьи.
Условные обозначения
В статье будут содержаться примеры конфигурации, в которых вам потребуется заменить некоторые значения на свои:
Hostname (имя компьютера) почтового сервера ‒ mail
IP адрес VPS сервера ‒ 1.2.3.4
Локальная домашняя сеть 192.168.1.0 с маской /24 (255.255.255.0) и шлюзом 192.168.1.1
IP адрес почтового сервера в локальной сети ‒ 192.168.1.3
Внутри VPN тунеля IP адрес VPN сервера 192.168.77.1, IP адрес VPN клиента 192.168.77.3
Арендуем VPS, настраиваем VPN сервер
Есть куча разных VPS провайдеров, я выбрал vps2day.com, потому что они не просят персональные данные при регистрации, платить можно криптой, можно выбрать страну, где разместить сервер. Для целей VPN будет достаточно VPS в базовой конфигурации, который обойдется в 5 €/месяц. Сперва я зарегистрировал почтовый ящик на protonmail’e, а затем на него оформил аккаунт в vps2day, закинул крипту и арендовал VPS. В качестве ОС я выбрал Debian 10, через несколько минут после оформления аренды на почту приходит отбойник с IP адресом сервера и учетными данными для SSH подключения.
В качестве решения для VPN я выбрал Wireguard, но для установки на Debian 10 надо добавить его репозиторий в apt:
Создаем каталог для файлов конфигурации (если его вдруг нет), назначаем права доступа туда, переходим в него и генерируем закрытый и открытый ключи:
На выходе получим два файла: privatekey с закрытым ключом и publickey с открытым ключом. Создаем файл конфигурации /etc/wireguard/wg0.conf вида:
Чуть позже мы дополним этот файл, а пока едем дальше.
Регистрация домена, настройка DNS
В редакторе DNS зоны нужно добавить «А» запись с именем mail и с указанием на внешний IP нашего почтового сервера, коим будет являться арендованный VPS:
Запись «MX» с приоритетом 10 и указанием на mail.example.com:
Запись «TXT» с SPF v=spf1 ip4:1.2.3.4 mx
Запись «TXT» DMARC v=DMARC1; p=reject; adkim=s; aspf=s; pct=100; :
Создание виртуальной машины
На ESXi создаем виртуальную машину (ВМ). Диск почтового сервера будем шифровать, поэтому нужно учесть один нюанс. По умолчанию гипервизор создает swap файл, равный размеру оперативной памяти виртуальной машины в каталоге ВМ. Таким образом есть вероятность, что ключ шифрования диска, хранимый в памяти ВМ во время работы окажется в swap файле на гипервизоре, что совсем не здорово. Чтобы этого не случилось, в настройках виртуальной машины нужно зарезервировать всю отведенную под ВМ оперативную память, тогда swap файл будет нулевой длины.
Установка системы и начальная конфигурация
В гостевой ОС вполне можно отказаться от раздела подкачки, особенно если назначить ВМ достаточное количество оперативки, а datastore гипервизора находится на SSD. Я взял Debian 10, процесс установки полностью стандартный за исключением разметки диска. Имя сервера задаем mail, домен example.com. Система ставится в минимальной конфигурации. В разметке дисков я сделал первый раздел под /boot и второй раздел с шифрованием:
Для применения изменений выполняем команду (не забываем здесь заменить название сетевого интерфейса на свое):
IPv6 я тоже отключаю, для этого в конец файла /etc/sysctl.conf добавляю строку:
Чтобы параметр применился выполняем команду:
Проверить, отключился ли IPv6 довольно легко. Для этого нужно просмотреть вывод нижеследующей команды на наличие ipv6 адресов:
Устанавливаем ssh и wget:
Коннектимся к серверу по ssh и едем дальше.
Настройка VPN подключения
Устанавливаем wireguard на почтовом сервере так же как это делали на VPS несколькими шагами выше:
Создаем файл конфигурации /etc/wireguard/wg0.conf следующего содержания:
Теперь идем по SSH на VPS сервер и в файл конфигурации /etc/wireguard/wg0.conf добавляем:
Не забываем сделать файл исполняемым командой chmod +x /etc/network/if-up.d/firewall
На VPS сервере запускаем wireguard:
Возвращаемся на почтовый сервер и запускаем wireguard там:
Настройка почтового сервера
В интернете есть пара отличных гайдов по развертыванию почтового сервера на Debian: e-mail caramel и ispmail. Основная сложность настройки заключается в том, что нужно правильным образом сконфигурировать довольно много файлов и нигде не накосячить. Нужно настроить Apache, PostgreSQL, Postfix, Dovecot, rspamd, sieve, сгенерировать SSL сертификаты и DKIM, выставить права. Со знанием дела весь процесс занимает несколько часов, а у новичков может легко занять пару дней и не факт что все получится с первого раза.
По гайду «e-mail caramel» на выходе получается почтовый сервер с IMAP протоколом для клиентов с обязательным шифрованием STARTTLS и Nextcloud’ом в качестве webmail. Сервер убирает из писем мета-теги User-Agent и Received. Учет почтовых пользователей ведется в БД.
Чтобы не заниматься курением конфигов, а результат был предсказуем ‒ я сделал скрипт, который автоматизирует 90% всего процесса из вышеупомянутого гайда с некоторыми отличиями:
Я не хочу ставить на почтовый сервер ресурсоемкий Nextcloud, вместо него я буду использовать Rainloop
Подрежем еще несколько мета-тегов: X-Mailer, X-Originating-IP, X-PHP-Originating-Script, Mime-Version. При этом в оригинальном гайде фильтрация конфигурируется в master.cf, а у меня в main.cf
Скрипт устанавливает необходимые пакеты, конфигурирует apache, БД, конфигурирует почтовые службы и на выходе получается практически готовый к употреблению почтовый сервер. При этом я пока не стал включать в скрипт генерирование SSL и DKIM, сделаем это руками чуть ниже.
Скрипт пока не тестировался на корректность работы при многократном запуске. Если почтовый сервер у вас развернут как виртуальная машина, то перед выполнением лучше сделать снапшот ВМ.
Скачиваем и распаковываем скрипт:
Всего в каталоге 3 файла:
Генерирование сертификатов, завершение настройки
Генерируем SSL сертификат командой. Не забываем заменить example.com на свой домен:
Генерируем DKIM. В команде ниже вместе example.com ‒ ваш домен, а вместо 20210121 можно взять текущую дату (ггггммдд):
Результатом выполнения команды будет такой текст:
В файл /etc/rspamd/dkim_selectors.map нужно добавить дату, чтобы получилось примерно так:
Идем в редактор DNS зоны у регистратора, добавляем запись «TXT» с именем 20210121._domainkey и значением v=DKIM1; k=rsa; p=. Дата в имени у вас будет своя, параметры перечисляются без двойных кавычек. Примерно так:
Тут есть нюанс. По умолчанию длина ТХТ записи может быть до 255 символов, а т.к. мы сгенерировали 2048 битный DKIM ключ, то его длина выходит за это ограничение и если вы внимательно посмотрите на результат генерации ключа, параметр p разбит на два, каждый из которых в своих двойных кавычках. Если регистратор поддерживает ТХТ записи большей длины, то две части можно просто схлопнуть, убрав кавычки. У GoDaddy, например, максимальная длина TXT записи 1024 символа. А если регистратор не поддерживает больше 255 символов, то ключ записывается в две ТХТ записи. Или можно сгенерировать более короткий ключ на 1024 бита.
И 4 вложенных параметра, начинающихся на «-o». Двойной пробел перед ними нужно сохранить. Последний параметр, возможно нужно будет просто дописать. На всякий случай в архиве со скриптом приложен готовый к употреблению файл master.cf. Должно получиться так:
Теперь заведем первый почтовый ящик. Для этого нужно воспользоваться скриптом mailuser-addnew.sh. Нужно будет ввести короткое имя (слово до @example.com), доменное имя (сам example.com) и пароль два раза. После этого можно попробовать настроить любой почтовый клиент используя созданную учетную запись.
В качестве примера пусть будет oleg@example.com. Для настройки почтового клиента набор параметров будет таким: почтовый адрес oleg@example.com, имя пользователя для IMAP и для SMTP так же oleg@example.com, сервер входящей почты IMAP mail.example.com, исходящей почты тоже mail.example.com, способ подключения везде STARTTLS.
Для проверки корректности настройки DKIM и SPF, можно воспользоваться ресурсом https://dkimvalidator.com, отправив туда тестовое письмо и посмотрев отчет. Все проверки должны быть в статусе pass (пройдено).
Устанавливаем Rainloop webmail
Все необходимые php модули для Rainloop уже были установлены скриптом. Скачиваем актуальную версию проекта, распаковываем, задаем права, включаем vhost на веб-сервере:
Далее добавляем наш почтовый сервер. Идем в раздел Domains, отключаем все прочие почтовые сервера и жмем по кнопке Add Domain:
Вводим параметры нашего домена и жмем Add:
Дополнительно в закладке Login можно так же указать домен:
Теперь можно пробовать заходить в webmail https://mail.example.com используя короткое имя пользователя (без @example.com):
Интерфейс выглядит лаконично, работает быстро, есть возможность настроить внешний вид под себя.
phpPgAdmin
В БД mail_server есть три основные таблицы: alias, sharedmail_boxes, users. Все пользователи с хешами паролей хранятся в users. С помощью таблицы alias можно сделать псевдонимы к уже существующим почтовым ящикам, а с помощью таблицы shared_mailboxes можно сделать доступ к определенным ящикам для нескольких людей. Вход в phpPgAdmin по адресу http://локальный-ip-адрес-сервера/phppgadmin с логином postgres и паролем, который был сгенерирован скриптом.
Если нет нужды ковырять таблицы, то можно отключить сайт с phpPgAdmin вообще:
Бэкапы
Так как почтовый сервер я делал для себя и очень ограниченного круга людей, то много пространства серверу не нужно, емкость всего диска 20 Гб. Схема резервного копирования такая: один раз бэкапится виртуальная машина почтового сервера целиком, чтобы случае чего не настраивать сервер заново. А во вне делается бэкап почтового каталога. Естественно все бэкапы шифруем. Для копий каталога отлично подойдет VPS, у которого целых 25 Гб пространства, бэкапить буду с помощью restic. Но прежде надо настроить ssh подключение до VPS по сертификату.
На почтовом сервере генерируем RSA ключ, на все вопросы мастера просто жмем Enter:
Копируем открытый ключ на VPS:
Создаем репозиторий (копии будут храниться на VPS в каталоге /mnt/mserv-bkp ):
Выполнение команды может занять несколько минут, в конце попросят придумать пароль для шифрования репозитория. Чтобы автоматизировать процесс создания резервных копий, создадим файл с переменными /root/.restic следующего содержания:
Попробуем выполнить резервное копирование почтового каталога:
Проверяем, что в репозитории что-то появилось:
Если есть наш только что созданный снапшот, то двигаемся дальше. Создаем файл /etc/root/restic с содержимым:
Делаем его исполняемым:
И добавляем в /etc/crontab на запуск раз в сутки:
Заключение
Теперь настройку почтового сервера можно считать полностью завершенной.
Как видно, владение своим почтовым сервером стоит некоторых денег. Цена складывается из оплаты регистрации домена, аренды VPS, оплаты второго провайдера дома и в конце концов электричества. В моем случае получается в районе 950 ₽ в месяц за всё. С другой стороны резервный интернет канал и VPN будут полезны для всей домашней сети, но об этом мы поговорим в следующий раз.
Спасибо, что дочитали. Комментарии, вопросы, замечания и пожелания приветствуются!