[Настройка Linux, Системное администрирование] Настраиваем домашний почтовый сервер и уходим с «бесплатной» почты
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
С каждым годом рекламы в интернете становится все больше, а подают ее с каждым разом все навязчивее. Дошло уже до почты: реклама в интерфейсе почтового ящика выглядит как первое непрочитанное письмо, которое машинально хочется открыть. Я не против рекламы, особенно когда она в тему и не сбивает с толку. Но маскировать её под непрочитанное письмо ‒ это перебор. Чувствуется, что следующим шагом рекламу начнут вставлять прямо в тело письма.
Мы уже привыкли, что наша активность в интернете анализируется для подсовывания релевантной рекламы. Но там нет персональных данных в чистом виде: есть пользователь-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
Чтобы не углубляться в настройку домашних роутеров, VPN туннель мы будем делать сразу с почтового сервера до VPS и завернем туда весь трафик. Поэтому имеет смысл поменять DNS сервера на публичные. Для этого правим файл /etc/resolv.conf, конечный вид которого примет вид:
nameserver 1.1.1.1
nameserver 1.0.0.1
IPv6 я тоже отключаю, для этого в конец файла /etc/sysctl.conf добавляем несколько параметров. Не забываем, что название сетевого адаптера ens192 у вас может быть другим:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.ens192.disable_ipv6 = 1
Устанавливаем ssh и wget:
apt install ssh wget
Включаю логин по паролю для root по SSH, для этого в файле /etc/ssh/sshd_config добавляем строку PermitRootLogin yes. Перезагружаем сервер и коннектимся уже по 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) и пароль два раза. После этого можно попробовать настроить любой почтовый клиент используя созданную учетную запись.В качестве примера пусть будет 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 будут полезны для всей домашней сети, но об этом мы поговорим в следующий раз.Спасибо, что дочитали. Комментарии, вопросы, замечания и пожелания приветствуются!
===========
Источник:
habr.com
===========
Похожие новости:
- [Настройка Linux, Системное программирование, Серверное администрирование] Релиз серверного дистрибутива Zentyal 7.0 на пакетной базе Ubuntu 20.04 LTS
- [Программирование, C#, Учебный процесс в IT] Как избавиться от if-else при помощи команд и обработчиков (перевод)
- [Настройка Linux, Системное администрирование, Софт, Накопители] Самый актуальный гайд по установке Linux на SSD-накопители в 2021 году
- [Системное администрирование, DevOps, Kubernetes] Аварии как опыт #2. Как развалить Elasticsearch при переносе внутри Kubernetes
- [Системное администрирование, Сетевые технологии, DevOps] В пятницу, 29 января 2020, в 17.00 MSK состоится Online Monitoring Meetup: Нейросети в мониторинге
- [Настройка Linux, Сетевые технологии] Сокеты в ОС Linux
- [Информационная безопасность, Open source, Системное администрирование, Разработка под Linux] Эксперты обнаружили критическую уязвимость в sudo, баг в утилите был с 2011 года
- [Системное администрирование, Резервное копирование, Облачные сервисы] Начните уже бекапить облако, это не страшно
- [Системное администрирование, Программирование, IT-инфраструктура, DevOps] Создание современных процессов CI/CD для бессерверных приложений с Red Hat OpenShift Pipelines и Argo CD. Часть 2 (перевод)
- [Настройка Linux, Информационная безопасность, Сетевые технологии, Сетевое оборудование] IKEv2 туннель между MikroTik и StrongSwan: EAP ms-chapv2 и доступ к сайтам
Теги для поиска: #_nastrojka_linux (Настройка Linux), #_sistemnoe_administrirovanie (Системное администрирование), #_elektronnaja_pochta (электронная почта), #_server (сервер), #_domashnjaja_set (домашняя сеть), #_nastrojka_linux (
Настройка Linux
), #_sistemnoe_administrirovanie (
Системное администрирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 05:58
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
С каждым годом рекламы в интернете становится все больше, а подают ее с каждым разом все навязчивее. Дошло уже до почты: реклама в интерфейсе почтового ящика выглядит как первое непрочитанное письмо, которое машинально хочется открыть. Я не против рекламы, особенно когда она в тему и не сбивает с толку. Но маскировать её под непрочитанное письмо ‒ это перебор. Чувствуется, что следующим шагом рекламу начнут вставлять прямо в тело письма. Мы уже привыкли, что наша активность в интернете анализируется для подсовывания релевантной рекламы. Но там нет персональных данных в чистом виде: есть пользователь-1 с такими-то привычками, есть пользователь-2 с другими привычками, пользователь-3, 4, 5 и т.д.Совсем другое дело почта. Обработка почты ‒ это зачастую обработка персональных данных. Все что вы покупаете ‒ квитанции приходят к вам на почту, какими сервисами вы пользуетесь ‒ регистрационные данные и отчеты приходят к вам на почту, купили билеты в отпуск ‒ все данные о вашей поездке у вас в почте. А почта у вас где? Нет гарантий, что почта не обрабатывается и что нет случаев злоупотребления. Так что если вы неугомонный параноик, то вам давно пора отказаться от «бесплатной» почты.Но отказаться не так то просто:
Будет не очень весело, если жесткий диск домашнего сервера неожиданно накроется вместе со всей почтой. Поэтому необходимость бэкапов сервера даже не обсуждается. О настройке бэкапов поговорим в конце статьи.Условные обозначенияВ статье будут содержаться примеры конфигурации, в которых вам потребуется заменить некоторые значения на свои:
apt update && apt upgrade
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 [Interface]
PrivateKey = сюда вставляем значение ключа из файла privatekey Address = 192.168.77.1/24 ListenPort = 51820 MTU = 1380 Запись "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 nameserver 1.1.1.1
nameserver 1.0.0.1 net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 net.ipv6.conf.ens192.disable_ipv6 = 1 apt install ssh wget
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 [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 # mail server
[Peer] PublicKey = значение ключа из файла publickey с почтового сервера AllowedIPs = 192.168.77.3/32 #! /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 systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0 systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0 Настройка почтового сервераВ интернете есть пара отличных гайдов по развертыванию почтового сервера на Debian: e-mail caramel и ispmail. Основная сложность настройки заключается в том, что нужно правильным образом сконфигурировать довольно много файлов и нигде не накосячить. Нужно настроить Apache, PostgreSQL, Postfix, Dovecot, rspamd, sieve, сгенерировать SSL сертификаты и DKIM, выставить права. Со знанием дела весь процесс занимает несколько часов, а у новичков может легко занять пару дней и не факт что все получится с первого раза.По гайду "e-mail caramel" на выходе получается почтовый сервер с IMAP протоколом для клиентов с обязательным шифрованием STARTTLS и Nextcloud'ом в качестве webmail. Сервер убирает из писем мета-теги User-Agent и Received. Учет почтовых пользователей ведется в БД.Чтобы не заниматься курением конфигов, а результат был предсказуем ‒ я сделал скрипт, который автоматизирует 90% всего процесса из вышеупомянутого гайда с некоторыми отличиями:
wget https://github.com/alexmdv/mailserver-autosetup/archive/main.zip
unzip main.zip chmod +x -R ./mailserver-autosetup-main cd ./mailserver-autosetup-main
#!/bin/bash
pgadmpass="PASSWORD" certbot certonly --apache --agree-tos --email admin@example.com --no-eff-email --domain mail.example.com
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" ) ; example.com 20210121
Тут есть нюанс. По умолчанию длина ТХТ записи может быть до 255 символов, а т.к. мы сгенерировали 2048 битный DKIM ключ, то его длина выходит за это ограничение и если вы внимательно посмотрите на результат генерации ключа, параметр p разбит на два, каждый из которых в своих двойных кавычках. Если регистратор поддерживает ТХТ записи большей длины, то две части можно просто схлопнуть, убрав кавычки. У GoDaddy, например, максимальная длина TXT записи 1024 символа. А если регистратор не поддерживает больше 255 символов, то ключ записывается в две ТХТ записи. Или можно сгенерировать более короткий ключ на 1024 бита.Последнее что нужно сделать ‒ поправить файл /etc/postfix/master.cf. Необходимо раскомментировать строку: #submission inet n - - - - smtpd
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 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 Вводим параметры нашего домена и жмем Add: Дополнительно в закладке Login можно так же указать домен: Теперь можно пробовать заходить в webmail https://mail.example.com используя короткое имя пользователя (без @example.com): Интерфейс выглядит лаконично, работает быстро, есть возможность настроить внешний вид под себя. В качестве небольшого тюнинга безопасности Apache добавим пару строк в файл /etc/apache2/apache2.conf. Это скроет данные о версии веб-сервера: ServerSignature Off
ServerTokens Prod a2dissite lanhost
service apache2 reload ssh-keygen -t rsa -b 4096
cat ~/.ssh/id_rsa.pub | ssh root@192.168.77.1 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
apt install restic
restic -r sftp:192.168.77.1:/mnt/mserv-bkp init
export RESTIC_REPOSITORY="sftp:192.168.77.1:/mnt/mserv-bkp"
export RESTIC_PASSWORD="Пароль придуманный на прошлом шаге" source /root/.restic
restic backup /var/vmail
restic snapshots
#!/bin/bash
source /root/.restic restic backup /var/vmail chmod +x /root/restic
0 1 * * * root /root/restic
=========== Источник: habr.com =========== Похожие новости:
Настройка Linux ), #_sistemnoe_administrirovanie ( Системное администрирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 05:58
Часовой пояс: UTC + 5