Статья давно не обновлялась, поэтому информация могла устареть.
Содержание
- 1 Установка почтового сервера
- 2 Описание настроек почтового сервера hMailServer
- 2.1 Status
- 2.2 Domains
- 2.3 Rules
- 2.4 Settings
- 2.5 Utilities
Установка почтового сервера
В качестве почтового сервера на ОС Windows будем использовать бесплатный почтовый сервер hMailServer. Заходим на сайт Hmailserver в разделе Download скачиваем последнюю доступную версию для установки. Запускаем установку сервера. На пункте выбора типа установки выбираем полную. Выбираем тип сервера баз данных, если планируется большое количество почтовых ящиков и критична их сохранность, выбираем Use external database Engine (MSSQL, MySQL or PostgreSQL) Устанавливаем пароль администратора, обязательно запомните его. После установки возникнет окошко соединения с сервером. Для удобства запуска приложения, установите опцию «Automatically connect on start-up» и нажмите «Connect». На приветственном окне нажимаем кнопку Add domain… Так же добавлять домены можно в разделе Domains-Add…
Добавляем домен
Выделяем домен и в разделе Accounts добавляем почтовый аккаунт
Данных настроек уже достаточно для того, чтобы пользоваться почтой.
Описание настроек почтового сервера hMailServer
Status
В разделе Status-Server мы можем увидеть текущий статус сервера, посмотреть версию сервера и тип используемого сервера баз данных. Так же там отображаются ошибки конфигурации.
В разделе Status-Status собрана статистика сервера, uptime сервера, количество обработанных писем, обнаруженных вирусов и спам-сообщений. Так же в этом разделе отображается количество активных SMTP, POP3, IMAP-сессий.
В разделе Status-Logging можно включить логирование и в прямом “эфире” наблюдать подключения к почтовому серверу. В разделе Status-Delivery Queue находится почтовая очередь, в этом же разделе почтовую очередь можно очистить.
Domains
В разделе Domains можно удалять, добавлять, редактировать настройки домена. Рассмотрим подробнее настройки домена.
В разделе General можно включать/выключать почтовый домен. В разделе Names можно добавить alias для почтового домена. В разделе Signatures можно добавить подпись для писем, отправляемых с ящиков указанного почтового домена. Можно определить условия использования подписи:
- Для всех ящиков, у которых нет подписи
- Перезаписывать подпись почтового ящика
- Добавлять подпись к подписи почтового ящика
Можно добавить текстовую и/или html-подпись.
В разделе Limits устанавливаются лимиты. Maximum Size (Mb) — устанавливает лимит по размеру на все почтовые сообщения во всех почтовых ящиках домена. Maximum message size (Kb) — если значение задано, то hMailServer будет отвергать сообщения больше указанного значения. Если параметр не задан, то будет использоваться значение, указанное в настройках SMTP. Max size of accounts (Mb) — если значение задано, то администратор не сможет добавлять аккаунты с общим объемом, превышающим значение. Так же в этом разделе можно настроить максимальное количество аккаунтов, алиасов и списков рассылок.
В разделе DKIM Signing можно настроить DKIM-подпись. Для формирования подписи и ключа рекомендую воспользоваться ресурсом dkim-wizzard В Pivate key file указываем файл с приватным ключом. В пункте Selector указываем селектор, который должен соответствовать записи в DNS. Например, если ваша запись DNS называется myselector._domainkey.example.net, вы должны ввести «myselector» в качестве селектора (без кавычек).
В разделе Advanced можно настроить адрес для пересылки почты, которая присылается на все несуществующие почтовые ящики, включить, так называемый “Plus addressing” и указать для него символ. Можно включить/выключить greylisting.
В разделе Domains-Accounts производятся настройки каждого конкретного почтового ящика. На вкладке General находятся главные настройки аккаунта. Адрес, пароль и размер почтового ящика. Также можно указать уровень доступа пользователя к серверу:
- User- может менять настройки аккаунта, например пароль.
- Domain — пользователь может изменять базовые настройки домена и пользователей в домене. Может добавлять пользователей, алиасы, листы рассылок, удалять объекты, увеличивать лимиты аккаунтов.
- Server — пользователь может менять настройки сервера и всех доменов в нем.
Дата последней авторизации в аккаунте, если пользователь никогда не авторизовался, то будет показана дата создания аккаунта. Также на вкладке General можно включить/выключить аккаунт.
На вкладке Auto-reply можно настроить автоответчик, указать тему и сообщение автоответчика, а также дату, до которой автоответчик включен.
Во вкладке Forwarding можно настроить адрес для пересылки почты. Во вкладке Signature настраивается подпись для аккаунта, так же как и для домена, можно настроить txt и html-подпись. Во вкладке External accounts можно настроить hMailServer для скачивания почты с других почтовых серверов, используя протокол POP3, после того, как сообщение будет скачано, к нему будут применены все настройки сервера, после этого сообщение будет доставлено в локальный аккаунт. Во вкладке Rules настраиваются правила, которые работают так же как глобальные правила, но применяются только к сообщениям. Подробнее смотрите раздел Rules. Во вкладке Active Directory можно подключить аккаунт Active Directory. Когда пользователь подключится к серверу hMailServer, будет использовать Active Directory для валидации пароля пользователя. Во вкладке Advanced можно указать Имя и Фамилию пользователя (эти данные не используются hMailServer). Можно отредактировать IMAP-папки, очистить содержимое всех IMAP-папок.
Во вкладке Domains-Aliases настраиваются алиасы для почтовых ящиков.
В Domains — Distribution lists производится настройка списка рассылки. Address — адрес рассылки, сообщения, посланные на этот адрес, будут пересланы всем в списке рассылки. Существует 3 режима:
- Public — любой может слать письма.
- Membership — только члены списка могут спать письма.
- Announcements — сообщения могут отправляться только с определенного почтового ящика.
Require SMTP Authentication — если установлен этот флаг, то hMailServer потребует аутентификации SMTP для доставки по списку рассылки. Если выбран этот параметр , только пользователи с учетными записями на сервере будут иметь возможность отправлять электронную почту в список рассылки. На вкладке Members можно добавлять почтовые адреса. Поддерживается добавление адресов из hMailServer (Select…) и импорт из текстового файла (Import…).
Rules
В разделе Rules можно включить правила, основанные на содержимом письма, например, можно удалять письма с определенной строкой, или пересылать письма больше определенного размера. Каждое правило имеет критерий и действие. Когда вы создаете правило, вы добавляете критерий, который определяет к какому сообщению будет применено правило. Например, можно добавить критерий, который будет действовать на письма с определенным Message-ID-header. После добавления критерия, добавляем действие. Действие описывает, что должен делать hMailServer с сообщением, если оно соответствует критерию. Например, можно переслать, удалить сообщение или поместить его в определенную папку.
Settings
В разделе Settings производятся настройки протоколов. Можно настроить антиспам, антивирус (Clamav, требуется дополнительная установка), включить логирование. В Settings-Advanced производятся настройки Auto-ban, SSL-сертификата, портов и Ip-адресов почтового сервера.
Utilities
В разделе Backup можно сделать бэкап настроек, доменов, сообщений, также там указан скрипт, который можно добавить в ежедневное задание. В этом разделе также можно восстановить данные из бэкапа. В разделе MX-query можно произвести диагностику MX-записи почтового сервера (аналог dig MX) В разделе Server sendout можно отправить сообщение на локальный почтовый адрес. Diagnostics — еще один инструмент диагностики, проверяет подключение по 25 порту, MX-записи домена.
Настраиваем домашний почтовый сервер и уходим с «бесплатной» почты
Время на прочтение15 мин
Количество просмотров359K
С каждым годом рекламы в интернете становится все больше, а подают ее с каждым разом все навязчивее. Дошло уже до почты: реклама в интерфейсе почтового ящика выглядит как первое непрочитанное письмо, которое машинально хочется открыть. Я не против рекламы, особенно когда она в тему и не сбивает с толку. Но маскировать её под непрочитанное письмо ‒ это перебор. Чувствуется, что следующим шагом рекламу начнут вставлять прямо в тело письма.
Мы уже привыкли, что наша активность в интернете анализируется для подсовывания релевантной рекламы. Но там нет персональных данных в чистом виде: есть пользователь-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
-
Домен ‒ example.com
-
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 подключения.
Логинимся, обновляемся:
apt update && apt upgrade
В качестве решения для VPN я выбрал Wireguard, но для установки на Debian 10 надо добавить его репозиторий в apt:
echo 'deb http://deb.debian.org/debian buster-backports main contrib non-free' > /etc/apt/sources.list.d/buster-backports.list
apt update
apt install wireguard
Создаем каталог для файлов конфигурации (если его вдруг нет), назначаем права доступа туда, переходим в него и генерируем закрытый и открытый ключи:
mkdir /etc/wireguard
chmod 700 /etc/wireguard
cd /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey
На выходе получим два файла: privatekey
с закрытым ключом и publickey
с открытым ключом. Создаем файл конфигурации /etc/wireguard/wg0.conf
вида:
[Interface]
PrivateKey = сюда вставляем значение ключа из файла privatekey
Address = 192.168.77.1/24
ListenPort = 51820
MTU = 1380
Чуть позже мы дополним этот файл, а пока едем дальше.
Регистрация домена, настройка DNS
При регистрации домена в зоне .RU нужно предоставлять паспортные данные, а делать этого не очень хочется… В международной зоне список необходимых для регистрации данных скромнее. Для регистрации можно указать все тот же ящик с protonmail’a. В качестве примера представим, что мы зарегистрировали домен example.com.
В редакторе DNS зоны нужно добавить «А» запись с именем mail и с указанием на внешний IP нашего почтового сервера, коим будет являться арендованный VPS:
Запись «MX» с приоритетом 10 и указанием на mail.example.com:
Запись «TXT» с SPF v=spf1 ip4:1.2.3.4 mx ~all
:
Запись «TXT» DMARC v=DMARC1; p=reject; adkim=s; aspf=s; pct=100;
:
Создание виртуальной машины
На ESXi создаем виртуальную машину (ВМ). Диск почтового сервера будем шифровать, поэтому нужно учесть один нюанс. По умолчанию гипервизор создает swap файл, равный размеру оперативной памяти виртуальной машины в каталоге ВМ. Таким образом есть вероятность, что ключ шифрования диска, хранимый в памяти ВМ во время работы окажется в swap файле на гипервизоре, что совсем не здорово. Чтобы этого не случилось, в настройках виртуальной машины нужно зарезервировать всю отведенную под ВМ оперативную память, тогда swap файл будет нулевой длины.
Установка системы и начальная конфигурация
В гостевой ОС вполне можно отказаться от раздела подкачки, особенно если назначить ВМ достаточное количество оперативки, а datastore гипервизора находится на SSD. Я взял Debian 10, процесс установки полностью стандартный за исключением разметки диска. Имя сервера задаем mail, домен example.com. Система ставится в минимальной конфигурации. В разметке дисков я сделал первый раздел под /boot и второй раздел с шифрованием:
После установки системы я делаю несколько базовых вещей. Удаляю созданного при установке пользователя командой deluser <username> --remove-home
.
Задаю статический адрес, если это не было сделано во время установки. Для этого правим файл /etc/network/interfaces
. Обратите внимание, что сетевой адаптер вашего сервера может называться по другому, в моем примере ens192
. Секция файла с настройкой сетевого адаптера должна получиться такой:
allow-hotplug ens192
iface ens192 inet static
address 192.168.1.3/24
gateway 192.168.1.1
Для применения изменений выполняем команду (не забываем здесь заменить название сетевого интерфейса на свое):
ifdown ens192 && ifup ens192
Чтобы не углубляться в настройку домашних роутеров, VPN туннель мы будем делать сразу с почтового сервера до VPS и завернем туда весь трафик. Поэтому имеет смысл поменять DNS сервера на публичные. Для этого правим файл /etc/resolv.conf
, конечный вид которого примет вид:
nameserver 1.1.1.1
nameserver 1.0.0.1
IPv6 я тоже отключаю, для этого в конец файла /etc/sysctl.conf
добавляю строку:
net.ipv6.conf.all.disable_ipv6 = 1
Чтобы параметр применился выполняем команду:
sysctl -p
Проверить, отключился ли IPv6 довольно легко. Для этого нужно просмотреть вывод нижеследующей команды на наличие ipv6 адресов:
ip a
Устанавливаем ssh и wget:
apt install ssh wget
Включаю логин по паролю для root по SSH, для этого в файле /etc/ssh/sshd_config
добавляем строку PermitRootLogin yes
. Применяем изменения:
service ssh restart
Коннектимся к серверу по ssh и едем дальше.
Настройка VPN подключения
Устанавливаем wireguard на почтовом сервере так же как это делали на VPS несколькими шагами выше:
echo 'deb http://deb.debian.org/debian buster-backports main contrib non-free' > /etc/apt/sources.list.d/buster-backports.list
apt update
apt install wireguard
mkdir /etc/wireguard
chmod 700 /etc/wireguard
cd /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey
Создаем файл конфигурации /etc/wireguard/wg0.conf
следующего содержания:
[Interface]
PrivateKey = значение ключа из файла privatekey
Address = 192.168.77.3/32
MTU = 1380
[Peer]
PublicKey = значение ключа из файла publickey с VPS сервера
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820
PersistentKeepalive = 20
Теперь идем по SSH на VPS сервер и в файл конфигурации /etc/wireguard/wg0.conf
добавляем:
# mail server
[Peer]
PublicKey = значение ключа из файла publickey с почтового сервера
AllowedIPs = 192.168.77.3/32
На VPS сервере в файл /etc/sysctl.conf
добавляем строку net.ipv4.ip_forward = 1
, чтобы разрешить форвардинг трафика, а чтобы применить эту настройку без перезагрузки, даем команду sysctl -w net.ipv4.ip_forward = 1
.
На VPS создаем небольшой скрипт фаерволла, который будет срабатывать при каждом включении сетевого адаптера. Создаем файл /etc/network/if-up.d/firewall
, содержимое файла спрятал под спойлер.
/etc/network/if-up.d/firewall
#! /bin/sh
EXT_IP="1.2.3.4"
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# Разрешаем пинги в разумных пределах
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT --match limit --limit 5/second
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT --match limit --limit 5/second
# Разрешаем SSH
iptables -A INPUT -d $EXT_IP -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -d 192.168.77.1 -p tcp --dport 22 -j ACCEPT
# Established connections
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
# DNS
iptables -A INPUT -i eth0 -p udp -d $EXT_IP --sport 53 -j ACCEPT
# Wireguard
iptables -A INPUT -i eth0 -d $EXT_IP -p udp --dport 51820 -j ACCEPT
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -A FORWARD -o wg0 -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Выход в интернет для почтового сервера через VPS
iptables -t nat -A POSTROUTING -s 192.168.77.3 -j SNAT --to-source $EXT_IP
# Проброс портов к почтовому серверу через туннель
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 80 -j DNAT --to-destination 192.168.77.3
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 443 -j DNAT --to-destination 192.168.77.3
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 25 -j DNAT --to-destination 192.168.77.3
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 587 -j DNAT --to-destination 192.168.77.3
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 143 -j DNAT --to-destination 192.168.77.3
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 993 -j DNAT --to-destination 192.168.77.3
Не забываем сделать файл исполняемым командой chmod +x /etc/network/if-up.d/firewall
На VPS сервере запускаем wireguard:
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
Возвращаемся на почтовый сервер и запускаем wireguard там:
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
Состояние подключения можно посмотреть командой wg show
. Если хоть какие-то данные в обоих направления пошли, значит все ОК и можно двигаться дальше:
Настройка почтового сервера
В интернете есть пара отличных гайдов по развертыванию почтового сервера на 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, сделаем это руками чуть ниже.
Скрипт пока не тестировался на корректность работы при многократном запуске. Если почтовый сервер у вас развернут как виртуальная машина, то перед выполнением лучше сделать снапшот ВМ.
Скачиваем и распаковываем скрипт:
wget https://github.com/alexmdv/mailserver-autosetup/archive/main.zip
unzip main.zip
chmod +x -R ./mailserver-autosetup-main
cd ./mailserver-autosetup-main
Всего в каталоге 3 файла:
-
mailserver-setup.sh
— основной скрипт конфигурирования сервера -
mailuser-addnew.sh
— скрипт создания почтового юзера -
mailuser-setpass.sh
— скрипт смены пароля для существующего почтового юзера
Запускаем mailserver-setup.sh
. Скрипт попросит ввести следующие данные: имя хоста почтового сервера (в этом гайде это просто mail), имя домена, который был ранее зарегистрирован (например, example.com), IP адрес почтового сервера в локальной сети. Имя хоста + домен как раз образуют полное имя mail.example.com. По завершению работы скрипта почтовые сервисы остаются в выключенном состоянии, т.к. перед запуском надо сгенерировать SSL сертификаты и DKIM. Так же по завершению будет отображен админский пароль от БД. Этот пароль нужно вставить в скрипты mailuser-addnew.sh
и mailuser-setpass.sh
вместо слова PASSWORD, см в файлах вторую строку:
#!/bin/bash
pgadmpass="PASSWORD"
Генерирование сертификатов, завершение настройки
Генерируем SSL сертификат командой. Не забываем заменить example.com на свой домен:
certbot certonly --apache --agree-tos --email admin@example.com --no-eff-email --domain mail.example.com
Генерируем DKIM. В команде ниже вместе example.com ‒ ваш домен, а вместо 20210121 можно взять текущую дату (ггггммдд):
rspamadm dkim_keygen -b 2048 -d example.com -s 20210121 -k /var/lib/rspamd/dkim/example.com.20210121.key
Результатом выполнения команды будет такой текст:
20210121._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAumOhUcY3anZV4tGF1+VsYDD9bTZ0rqiFCm8FPdDHVB0U+ZPfZ2Cxf+x+jIFYXfO/jWEoAw2uYFz3Mt1ImvRQzU9oMx0t/0HtMKS4m3AhOBM5SkkhvoAaJkoIt3gTQ4KQyiBsZemihAw6V/gsex8K6M76m4WkbT92+tg192EGXBUDo0k7kk1rDOld0G9X2P0IxkVfqKqfwg+fI+0Im"
"AOFC1gBCIm18XPEGZA2oOoNbkWO95bD8Rj20yv8639bMA27+B08v4/aPXQb9HZLEwpsz8Qa/WgEZFGJzd6kUaYWHTfMmbgBXnET5N+tjXGvkjtnLbx25ru/PZTeckGjE/komQIDAQAB"
) ;
В файл /etc/rspamd/dkim_selectors.map
нужно добавить дату, чтобы получилось примерно так:
example.com 20210121
Идем в редактор DNS зоны у регистратора, добавляем запись «TXT» с именем 20210121._domainkey
и значением v=DKIM1; k=rsa; p=...
Дата в имени у вас будет своя, параметры перечисляются без двойных кавычек. Примерно так:
Тут есть нюанс. По умолчанию длина ТХТ записи может быть до 255 символов, а т.к. мы сгенерировали 2048 битный DKIM ключ, то его длина выходит за это ограничение и если вы внимательно посмотрите на результат генерации ключа, параметр p
разбит на два, каждый из которых в своих двойных кавычках. Если регистратор поддерживает ТХТ записи большей длины, то две части можно просто схлопнуть, убрав кавычки. У GoDaddy, например, максимальная длина TXT записи 1024 символа. А если регистратор не поддерживает больше 255 символов, то ключ записывается в две ТХТ записи. Или можно сгенерировать более короткий ключ на 1024 бита.
Последнее что нужно сделать ‒ поправить файл /etc/postfix/master.cf
. Необходимо раскомментировать строку:
#submission inet n - - - - smtpd
И 4 вложенных параметра, начинающихся на «-o». Двойной пробел перед ними нужно сохранить. Последний параметр, возможно нужно будет просто дописать. На всякий случай в архиве со скриптом приложен готовый к употреблению файл master.cf. Должно получиться так:
submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o cleanup_service_name=header_cleanup
Перезагружаем сервер.
Теперь заведем первый почтовый ящик. Для этого нужно воспользоваться скриптом 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 на веб-сервере:
wget http://www.rainloop.net/repository/webmail/rainloop-community-latest.zip
unzip rainloop-community-latest.zip -d /var/www/webmail
cd /var/www/webmail
chmod 644 .
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chown -R www-data:www-data .
a2ensite webmail
service apache2 reload
Логинимся в админку rainloop по адресу https://mail.example.com/?admin
с логином admin
и паролем 12345
. Пароль естественно надо будет сменить, это делается в разделе Security.
Далее добавляем наш почтовый сервер. Идем в раздел Domains, отключаем все прочие почтовые сервера и жмем по кнопке Add Domain:
Вводим параметры нашего домена и жмем Add:
Дополнительно в закладке Login можно так же указать домен:
Теперь можно пробовать заходить в webmail https://mail.example.com
используя короткое имя пользователя (без @example.com):
Интерфейс выглядит лаконично, работает быстро, есть возможность настроить внешний вид под себя.
В качестве небольшого тюнинга безопасности Apache добавим пару строк в файл /etc/apache2/apache2.conf
. Это скроет данные о версии веб-сервера:
ServerSignature Off
ServerTokens Prod
Для применения изменений перезагрузим Apache командой service apache2 reload
.
phpPgAdmin
В БД mail_server есть три основные таблицы: alias, sharedmail_boxes, users. Все пользователи с хешами паролей хранятся в users. С помощью таблицы alias можно сделать псевдонимы к уже существующим почтовым ящикам, а с помощью таблицы shared_mailboxes можно сделать доступ к определенным ящикам для нескольких людей. Вход в phpPgAdmin по адресу http://локальный-ip-адрес-сервера/phppgadmin с логином postgres и паролем, который был сгенерирован скриптом.
Если нет нужды ковырять таблицы, то можно отключить сайт с phpPgAdmin вообще:
a2dissite lanhost
service apache2 reload
Бэкапы
Так как почтовый сервер я делал для себя и очень ограниченного круга людей, то много пространства серверу не нужно, емкость всего диска 20 Гб. Схема резервного копирования такая: один раз бэкапится виртуальная машина почтового сервера целиком, чтобы случае чего не настраивать сервер заново. А во вне делается бэкап почтового каталога. Естественно все бэкапы шифруем. Для копий каталога отлично подойдет VPS, у которого целых 25 Гб пространства, бэкапить буду с помощью restic. Но прежде надо настроить ssh подключение до VPS по сертификату.
На почтовом сервере генерируем RSA ключ, на все вопросы мастера просто жмем Enter:
ssh-keygen -t rsa -b 4096
Копируем открытый ключ на VPS:
cat ~/.ssh/id_rsa.pub | ssh root@192.168.77.1 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Устанавливаем Restic
apt install restic
Создаем репозиторий (копии будут храниться на VPS в каталоге /mnt/mserv-bkp
):
restic -r sftp:192.168.77.1:/mnt/mserv-bkp init
Выполнение команды может занять несколько минут, в конце попросят придумать пароль для шифрования репозитория. Чтобы автоматизировать процесс создания резервных копий, создадим файл с переменными /root/.restic
следующего содержания:
export RESTIC_REPOSITORY="sftp:192.168.77.1:/mnt/mserv-bkp"
export RESTIC_PASSWORD="Пароль придуманный на прошлом шаге"
Подхватываем файлик:
source /root/.restic
Попробуем выполнить резервное копирование почтового каталога:
restic backup /var/vmail
Проверяем, что в репозитории что-то появилось:
restic snapshots
Если есть наш только что созданный снапшот, то двигаемся дальше. Создаем файл /etc/root/restic
с содержимым:
#!/bin/bash
source /root/.restic
restic backup /var/vmail
Делаем его исполняемым:
chmod +x /root/restic
И добавляем в /etc/crontab
на запуск раз в сутки:
0 1 * * * root /root/restic
Заключение
Теперь настройку почтового сервера можно считать полностью завершенной.
Как видно, владение своим почтовым сервером стоит некоторых денег. Цена складывается из оплаты регистрации домена, аренды VPS, оплаты второго провайдера дома и в конце концов электричества. В моем случае получается в районе 950 ₽ в месяц за всё. С другой стороны резервный интернет канал и VPN будут полезны для всей домашней сети, но об этом мы поговорим в следующий раз.
Спасибо, что дочитали. Комментарии, вопросы, замечания и пожелания приветствуются!
Оригинал статьи в моем блоге.
-
Star
(83)
You must be signed in to star a gist -
Fork
(18)
You must be signed in to fork a gist
-
Clone this repository at <script src="https://gist.github.com/raelgc/6031306.js"></script>
- Save raelgc/6031306 to your computer and use it in GitHub Desktop.
Clone this repository at <script src="https://gist.github.com/raelgc/6031306.js"></script>
Setup a Local Only Email Server (Windows Only)
1 — Install hMailServer
Download hMailServer from here: http://www.hmailserver.com/index.php?page=background_download_file&downloadid=207.
- In setup, select internal db engine.
- Now you have a service called hMailServer and an administration program on the Windows start menu (hMailServer Administrator).
2 — Create a domain
- Open hMailServer Administrator program.
- Click on «Domains» and then «add domain».
- At «domain name» put a fake domain to test. Use «localhost.com» (without the quotes): hMailServer requires a fully qualified domain, so, we cannot use @localhost.
- Make sure to add your domain (localhost.com) to hosts file: C:\windows\system32\drivers\etc\hosts
3 — Change server name
- Expand Settings > Protocols > SMTP -> Delivery of e-mail
- At «Host name» put «localhost» (without the quotes).
- Check if TCP Port is 25.
4 — Create an account
- Go to «Domains», click on the created domain, and then click on «accounts», then «add account».
- At «address», create your account name, here I use «rael» (without the quotes), and put a password.
- Change «Administration level» to «Server».
5 — Configure «catch-all» address
- Enabling this, you can use any email address ending with you fake domain. Example: here, my unique account is rael@localhost.com. But while testing systems, I can use any address like joe@localhost.com, foo@localhost.com, etc, because all will be redirected to rael@localhost.com
- Open «Domains», click on your domain, open Advanced tab, fill field «catch-all address» with account created on previous step.
6 — Configure an Email client
- At Windows, you can use Windows Live Email (http://explore.live.com/windows-live-essentials-other-programs?T1=t2).
- Of course, you can use any email client.
- While configuring
- Incoming Server is POP3, and the username is the full email address (like rael@localhost.com), and the password is raw text (no encrypt).
- POP3 and SMTP server are «localhost» (without the quotes).
- Outgoing server do not require authentication.
- Don’t use the email client and the hMailServer Administration application at the same time!
hMailServer это бесплатный open-source почтовый сервер для Windows окружения. hMailServer – можно установить на любую редакцию Windows (на десктопные версии начиная с Windows XP и до Windows 11 или Windows Server от 2003 до 2022). Дистрибутив hMailServer всего около 5 мб (!!!). Почтовые сообщения хранятся на диске в формате MIME файлов.
Основные возможности hMailServer:
- Интеграция с Active Directory;
- Простая настройка;
- Поддержка SMTP алиасов;
- Встроенный антивирус clamav;
- Настраиваемые правила обработки почты (позволяет настроить автоответы, пересылки, фильтрацию почты и т.д.);
- Поддержка антиспам фильтров на безе SPF, DNS, Helo, DMARC, gray listing;
- Поддержка TSL сертификатов и DKIM (можно использовать совместно с сертификатами let’s encrypt);
- Встроенное резервное копирование.
В этом примере мы покажем, как развернуть hMailServer на Windows Sever 2019.
Перед установкой hMailServer нужно установить .Net Framework 3.5 (включает 2.0) и 3.0:
Install-WindowsFeature Net-Framework-Core
Затем скачайте установочный файл (https://www.hmailserver.com/download) и запустите установку. При установке выберите режим Full installation (Server + Administrative tools).
Выберите базу данных, в которой будет хранится конфигурация. В качестве встроенной базы данных можно использовать бесплатный SQL Server Compact Edition (CE). Или внешнюю БД на PostgreSQL, MySQL или полноценном SQL Server.
При установке нужно указать пароль администратора hMailServer. На этому установка завершена.
Сервер запускается в виде службы Windows hmailserver.
Для управления hMailServer используется локальная консоль сервера (в качестве веб интерфейса управления можно отдельно установить PHPWebAdmin). Подключитесь к вашей конфигурации с помощью пароля администратора, который вы задали ранее.
Добавьте ваш почтовый домен, который будет обслуживать ваш сервер. Но перед этим нужно настроить MX записи для вашего домена у вашего регистратора.
Откройте порты в Windows Firewall, которые будут использовать ваши клиенты. Обычно это:
- 25 (SMTP), 465 (Secure SMTP)
- 110 (POP3), 995 (Secure POP3)
- 143 (IMAP), 993 (Secure IMAP)
В разделе Settings -> Protocols -> SMTP укажите публичное имя вашего хоста. Проверьте, что ваш хосту доступен снаружи:
telnet mail.vmblog.ru 25
После этого перейдите в раздел Accounts и создайте почтовые ящики.
Можно привязать ящики к учетным записям Active Directory. Перейдите на вкладку Active Directory и укажите имя домена и пользователя, который соответствует этому ящику.
Почтовый сервер – это устройство, при помощи которого происходит доставка электронных сообщений от отправителя к получателю. Собственно, это и следует из его названия. В данной статье рассмотрим, как происходит установка и базовая настройка почтового сервера на VPS с операционной системой семейства Windows Server, а также на виртуальном сервере, работающем на Ubuntu 20.04.
Установка сервера SMTP на Windows Server
На серверах, работающих под управлением операционных систем Windows, для передачи почтовых сообщений часто используется протокол SMTP. В Windows Server служба SMTP является одним из компонентов операционной системы.
Для корректной отправки почтового сообщения от имени домена, к которому будет привязан сервер SMTP, нам необходимо иметь доменное имя. При этом в настройках домена должна быть указана A-запись, содержащая IP-адрес VPS. В нашем примере мы будем использовать имя домена my-domain.host
.
Установку почтового сервера нужно будет начать именно с добавления необходимых компонентов. Для этого запустите Server Manager
, перейдите Manage
→ Add Roles and Features
.
В открывшемся окне нажмите Next
.
Далее выберите опцию Role-based or feature-based installation
, после чего нажмите Next
.
В следующем окне укажите сервер, на который будет производиться установка новых компонентов, либо просто нажмите Next
, если в вашем пуле серверов одна-единственная запись.
На следующем шаге активируйте строку Web Server (IIS)
, после чего нажмите Add Features
.
Далее нажмите Next
.
После чего отметьте строку SMTP Server
и нажмите Add Features
.
И нажмите Next
.
Далее ещё раз нажмите Next
.
В следующем окне снова нажмите Next
.
Для запуска установки выбранных компонентов нажмите Install
.
Настройка сервера SMTP
На следующем этапе необходимо будет настроить сервер SMTP. Для чего в Server Manager
перейдите Tools
→ Internet Information Services (IIS) 6.0 Manager
.
В открывшемся окне менеджера IIS раскройте ветку вашего сервера и на строке SMTP Virtual Server
нажмите правую кнопку мыши, после чего перейдите в Properties
.
Далее в строке IP address:
необходимо выбрать IP-адрес вашего сервера и активировать опцию Enable logging
.
Во вкладке Access
нажмите кнопку Authentication...
В открывшемся окне активируйте опцию Anonymous access
. Активация данной опции нужна, чтобы пользователи и приложения смогли бы использовать сервер SMTP анонимно. Позже можно будет настроить более безопасную аутентификацию, пока же нажмите OK
.
Далее в разделе Connection control
нажмите кнопку Connection...
В окне Connection
установите переключатель на Only the list below
и при помощи кнопки Add...
добавьте IP-адрес вашего VPS. После чего нажмите OK
.
Точно такую же настройку необходимо проделать в разделе Relay restrictions
. Для чего нажмите кнопку Relay...
и добавьте IP-адрес вашего сервера установив переключатель в Only the list below
.
После чего перейдите во вкладку Delivery
и нажмите Advanced...
Здесь в строку Fully-qualified domain name:
необходимо внести имя вашего домена, в нашем примере это – my-domain.host
.
Для того, чтобы проверить корректность данной настройки, нажмите кнопку Check DNS
.
Далее сохраните все внесённые в настройки изменения при помощи кнопки OK
.
Также необходимо указать корректное имя домена в ветке Domains
.
На следующем шаге нужно активировать функцию автоматического запуска сервера SMTP. Для этого запустите командную строку PowerShell и выполните следующие команды для запуска службы:
set-service smtpsvc -StartupType Automatic
start-service smtpsvc
Чтобы убедиться, что служба запущена, необходимо выполнить ещё одну команду:
get-service smtpsvc
Вывод данной команды должен выглядеть примерно следующим образом:
Теперь там же, в командной строке PowerShell, при помощи следующей команды отправьте сообщение на свою электронную почту:
Send-MailMessage -SmtpServer my-domain.host -To your@email.address -From mail@my-domain.host -Subject "Message Subject" -Body "Message Body"
Здесь:
my-domain.host
– имя домена, с которого будет производиться отправка сообщения;your@email.address
– адрес электронной почты, на который будет отправлено сообщение;mail@my-domain.host
– этот электронный адрес будет указан в сообщении как адрес отправителя;Message Subject
– тема письма;Message Body
– тело письма.
После чего проверьте свою почту, на которую должно прийти сообщение от вашего почтового сервера.
Установка и настройка Postfix на Ubuntu 20.04
Для операционной системы Ubuntu существует довольно популярный почтовый сервер – Postfix. Для установки Postfix мы будем использовать виртуальный сервер, работающий на Ubuntu 20.04. При этом на VPS должны быть произведены работы по первоначальной настройке, описанные в соответствующей статье нашего справочника.
Также, для работы Postfix нужен домен с привязанной A-записью, которой является IP-адрес вашего виртуального сервера.
Плюс ко всему, необходимо соотнести имя домена с именем сервера и его IP-адресом. Для этого запустите следующую команду:
$ sudo hostnamectl set-hostname ubuntu-server
Здесь, ubuntu-server
– имя нашего сервера, вместо которого вы можете использовать своё.
Теперь при помощи текстового редактора откройте файл /etc/hosts
:
$ sudo nano /etc/hosts
В данный файл добавьте строку:
XXX.XXX.XXX.XXX my-domain.host ubuntu-server
В данном случае:
XXX.XXX.XXX.XXX
– IP-адрес вашего сервера;my-domain.host
– имя вашего домена;ubuntu-server
– имя вашего сервера.
Теперь запустите установку Postfix
и почтового пакета mailutils
:
$ sudo apt install postfix mailutils
В процессе установки система попросит вас выбрать тип конфигурации. Необходимо указать Internet Site
:
Также установщик попросит согласиться с именем домена, в отношении которого производится настройка почтового сервера. В нашем случае это будет my-domain.host
.
По окончании установки можно попробовать с нашего почтового сервера отправить тестовое сообщение. Команда для отправки сообщения выглядит следующим образом:
$ echo "Message Body" | mail -s "Message Subject" your@email.address
В данной команде:
Message Body
– тело письма;Message Subject
– тема письма;your@email.address
– адрес электронной почты, на который будет отправлено сообщение.
Проверьте свой почтовый ящик (в нашем примере это – your@email.address
), на который должно прийти отправленное из Postfix
сообщение.