Как установить SimpleLogin на Ubuntu и создать анонимные email‑алиасы
Содержание
- Подготовка системы
- Установка SimpleLogin и зависимостей
- Настройка DNS (SPF, DKIM, DMARC)
- Создание и подключение базы данных Postgres
- Конфигурация Postfix и связывание с Postgres
- Запуск контейнеров SimpleLogin в Docker
- Настройка Nginx как SSL‑reverse proxy
- Создание алиасов и отправка писем из алиаса
- Тесты, приёмка и устранение проблем
- Рекомендации по безопасности и эксплуатации
- Альтернативы и когда это не подходит
- Чек‑листы и справочные материалы
Подготовка системы
Требования и уточнения
- Минимум 2 ГБ RAM для VPS. Для серьёзной нагрузки — 4+ ГБ.
- У вас должен быть зарегистрирован домен и доступ к записи DNS у регистратора.
- Эта инструкция рассчитана на Ubuntu (Jammy и похожие сборки).
Обновите систему и установите базовые утилиты
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg lsb-release ca-certificates nano software-properties-commonИмпорт ключа проекта Docker и создание ключевого каталога
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpgДобавьте репозиторий Docker
sudo nano /etc/apt/sources.list.d/docker.listВ файл вставьте строку (для Ubuntu Jammy):
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stableОбновите индексы apt:
sudo apt updateУстановка зависимостей для SimpleLogin
Установим Docker, nginx, dnsutils и Postfix (Postfix будет выполнять роль MTA и проксировать входящую почту в SimpleLogin):
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin nginx dnsutils postfix postfix-pgsqlКогда установщик Postfix запросит тип конфигурации, выберите Интернет‑сайт (Internet Site). На запрос «System mail name» можно подтвердить значение по умолчанию или указать ваш домен.

Убедитесь, что snap core установлен и затем установите certbot:
sudo snap install core
sudo snap install certbot --classicОткройте порты в брандмауэре (UFW) для почты и веба:
sudo ufw allow 25,80,443/tcpImportant: для почтового сервера требуется корректно настроенный DNS — ниже подробно.
Настройка DNS записей
В панели вашего регистратора создайте следующие записи:
- A запись для поддомена, на котором будет работать SimpleLogin, указывающая на IPv4 вашего VPS (например, sl.example.com).
- MX запись для корневого домена, указывающая на этот поддомен (например, priority 10, target sl.example.com).
- TXT запись для SPF на корне домена:
v=spf1 mx ~all- TXT запись для DMARC на поддомене _dmarc.example.com:
v=DMARC1; p=quarantine; adkim=r; aspf=rГенерация пары DKIM ключей и запись публичного ключа в DNS
openssl genrsa -out dkim.key -traditional 1024
openssl rsa -in dkim.key -pubout -out dkim.pub.keyИзвлеките публичный ключ в формат пригодный для TXT записи. Скрипт sed используется для удаления заголовков/хвостов PEM и упаковки в одну строку. Пример:
sed 's/-----BEGIN PUBLIC KEY-----/v=DKIM1; k=rsa; p=/' $(pwd)/dkim.pub.key | sed 's/-----END PUBLIC KEY-----//' | tr -d '\n' | sed -e '$a\'Добавьте TXT запись для селектора dkim._domainkey с полученным значением.
Note: распространённый селектор — просто dkim, но зависимость от конфигурации SimpleLogin и выбранного пути/имён возможна.
Совет по проверке DNS: используйте dig и онлайн‑инструменты для проверки SPF/DKIM/DMARC.
Создание базы данных Postgres для SimpleLogin
SimpleLogin хранит данные алиасов в Postgres. Создадим каталог для персистентных данных и запустим контейнер Postgres.
mkdir -p ~/sl/{pgp,db,upload}Создайте Docker сеть для контейнеров приложения:
sudo docker network create -d bridge --subnet=10.0.0.0/24 --gateway=10.0.0.1 sl-networkЗапустите контейнер Postgres (не забудьте заменить POSTGRES_PASSWORD на надёжный длинный пароль):
sudo docker run -d \
--name sl-db \
-e POSTGRES_PASSWORD=YOUR-RANDOM-PASSWORD-HERE \
-e POSTGRES_USER=postgres \
-e POSTGRES_DB=simplelogin \
-p 127.0.0.1:5432:5432 \
-v $(pwd)/sl/db:/var/lib/postgresql/data \
--restart always \
--network="sl-network" \
postgres:12.1Генерация случайного пароля (пример):
cat /dev/urandom | tr -dc 'A-Za-z0-9' | fold -w 32 | head -n 1После запуска проверьте логи контейнера:
sudo docker logs -f sl-dbКонфигурация Postfix для работы с SimpleLogin
Удалите или переименуйте существующий конфигурационный файл и создайте новый main.cf:
sudo rm /etc/postfix/main.cf && sudo nano /etc/postfix/main.cfВставьте шаблон ниже и обязательно замените SUBDOMAIN.YOUR-ROOT.DOMAIN и YOUR-ROOT.DOMAIN на ваши реальные значения (без <>):
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 2
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_security_level = may
smtpd_tls_security_level = may
alias_maps = hash:/etc/aliases
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.0.0.0/24
mydestination =
myhostname = SUBDOMAIN.YOUR-ROOT.DOMAIN
mydomain = YOUR-ROOT.DOMAIN
myorigin = YOUR-ROOT.DOMAIN
relay_domains = pgsql:/etc/postfix/pgsql-relay-domains.cf
transport_maps = pgsql:/etc/postfix/pgsql-transport-maps.cf
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks,
reject_non_fqdn_helo_hostname,
reject_invalid_helo_hostname,
permit
smtpd_sender_restrictions =
permit_mynetworks,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit
smtpd_recipient_restrictions =
reject_unauth_pipelining,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
permit_mynetworks,
reject_unauth_destination,
reject_rbl_client zen.spamhaus.org=127.0.0.[2..11],
reject_rbl_client bl.spamcop.net=127.0.0.2,
permitПерезагрузите Postfix:
sudo systemctl restart postfixСвязывание Postfix с Postgres
Создайте файл /etc/postfix/pgsql-relay-domains.cf:
sudo nano /etc/postfix/pgsql-relay-domains.cfВставьте конфигурацию (замените DATABASE-PASSWORD на пароль postgres):
hosts = localhost
user = postgres
password = DATABASE-PASSWORD
dbname = simplelogin
query = SELECT domain FROM custom_domain WHERE domain='%s' AND verified=true
UNION SELECT domain FROM public_domain WHERE domain='%s'
UNION SELECT '%s' WHERE '%s' = 'mydomain.com' LIMIT 1;Аналогично создайте /etc/postfix/pgsql-transport-maps.cf:
sudo nano /etc/postfix/pgsql-transport-maps.cfhosts = localhost
user = postgres
password = DATABASE-PASSWORD
dbname = simplelogin
query = SELECT 'smtp:127.0.0.1:20381' FROM custom_domain WHERE domain = '%s' AND verified=true
UNION SELECT 'smtp:127.0.0.1:20381' FROM public_domain WHERE domain = '%s'
UNION SELECT 'smtp:127.0.0.1:20381' WHERE '%s' = 'mydomain.com' LIMIT 1;Перезагрузите postfix после изменений:
sudo systemctl restart postfixУстановка и запуск контейнеров SimpleLogin
Перейдите в домашний каталог и создайте файл окружения simplelogin.env:
cd && nano ./simplelogin.envПример содержимого файла (замените параметры на ваши):
URL=https://SUBDOMAIN.YOUR-ROOT.DOMAIN
EMAIL_DOMAIN=YOUR-ROOT.DOMAIN
SUPPORT_EMAIL=support@YOUR-ROOT.DOMAIN
EMAIL_SERVERS_WITH_PRIORITY=[(10, "SUBDOMAIN.YOUR-ROOT.DOMAIN.")]
DB_URI=postgresql://postgres:DATABASE-PASSWORD@sl-db:5432/simplelogin
FLASK_SECRET=ADD-A-NEW-RANDOM-STRING-HERE
DISABLE_ALIAS_SUFFIX=1
DKIM_PRIVATE_KEY_PATH=/dkim.key
GNUPGHOME=/sl/pgp
LOCAL_FILE_UPLOAD=1
POSTFIX_SERVER=10.0.0.1Генерация значения FLASK_SECRET (пример):
cat /dev/urandom | tr -dc 'A-Za-z0-9' | fold -w 64 | head -n 1Импорт базы данных и инициализация приложения
sudo docker run --rm \
--name sl-migration \
-v $(pwd)/sl:/sl \
-v $(pwd)/sl/upload:/code/static/upload \
-v $(pwd)/dkim.key:/dkim.key \
-v $(pwd)/dkim.pub.key:/dkim.pub.key \
-v $(pwd)/simplelogin.env:/code/.env \
--network="sl-network" \
simplelogin/app:4.6.5-beta alembic upgrade head
sudo docker run --rm \
--name sl-init \
-v $(pwd)/sl:/sl \
-v $(pwd)/simplelogin.env:/code/.env \
-v $(pwd)/dkim.key:/dkim.key \
-v $(pwd)/dkim.pub.key:/dkim.pub.key \
--network="sl-network" \
simplelogin/app:4.6.5-beta python init_app.pyЗапустите сервисы SimpleLogin:
sudo docker run -d \
--name sl-app \
-v $(pwd)/sl:/sl \
-v $(pwd)/sl/upload:/code/static/upload \
-v $(pwd)/simplelogin.env:/code/.env \
-v $(pwd)/dkim.key:/dkim.key \
-v $(pwd)/dkim.pub.key:/dkim.pub.key \
-p 127.0.0.1:7777:7777 \
--restart always \
--network="sl-network" \
simplelogin/app:4.6.5-beta
sudo docker run -d \
--name sl-email \
-v $(pwd)/sl:/sl \
-v $(pwd)/sl/upload:/code/static/upload \
-v $(pwd)/simplelogin.env:/code/.env \
-v $(pwd)/dkim.key:/dkim.key \
-v $(pwd)/dkim.pub.key:/dkim.pub.key \
-p 127.0.0.1:20381:20381 \
--restart always \
--network="sl-network" \
simplelogin/app:4.6.5-beta python email_handler.py
sudo docker run -d \
--name sl-job-runner \
-v $(pwd)/sl:/sl \
-v $(pwd)/sl/upload:/code/static/upload \
-v $(pwd)/simplelogin.env:/code/.env \
-v $(pwd)/dkim.key:/dkim.key \
-v $(pwd)/dkim.pub.key:/dkim.pub.key \
--restart always \
--network="sl-network" \
simplelogin/app:4.6.5-beta python job_runner.pyПроверьте, что контейнеры работают:
sudo docker psНастройка SSL reverse proxy с Nginx
Создайте nginx конфигурацию для поддомена SimpleLogin:
sudo nano /etc/nginx/sites-available/simpleloginПример конфигурации (замените SUBDOMAIN.YOUR-ROOT.DOMAIN):
server {
server_name SUBDOMAIN.YOUR-ROOT.DOMAIN;
location / {
proxy_pass http://127.0.0.1:7777;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}Активируйте сайт и перезапустите nginx:
sudo ln -s /etc/nginx/sites-available/simplelogin /etc/nginx/sites-enabled/
sudo systemctl restart nginxЗарегистрируйте certbot и получите сертификат:
sudo certbot register --agree-tos -m YOUR@EMAIL.ADDRESS
sudo certbot --nginx -d SUBDOMAIN.YOUR-ROOT.DOMAINПосле успешного выпуска сертификата укажите пути к сертификатам в /etc/postfix/main.cf, заменив snakeoil на Let’s Encrypt:
smtpd_tls_cert_file=/etc/letsencrypt/live/SUBDOMAIN.YOUR-ROOT.DOMAIN/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/SUBDOMAIN.YOUR-ROOT.DOMAIN/privkey.pemПерезагрузите Postfix:
sudo systemctl restart postfix
Создание email‑алиасов в SimpleLogin
Подключитесь к базе данных для установки премиум‑статуса (если хотите убрать лимиты):
sudo docker exec -it sl-db psql -U postgres simpleloginВыполните SQL‑запрос, чтобы включить lifetime у пользователя (внимание: этот пример делает всё существующее «пожизненным»; лучше делать это для конкретного пользователя по id или email в реальном окружении):
UPDATE users SET lifetime = TRUE;
\qОткройте веб‑панель SimpleLogin по адресу https://SUBDOMAIN.YOUR-ROOT.DOMAIN и зарегистрируйте аккаунт. Создание алиаса происходит через кнопку New Custom Alias или Random Alias.

Создайте алиас, запомните его и протестируйте, отправив письмо с другого аккаунта.

Отправка писем из алиаса
Для отправки через алиас SimpleLogin использует «reverse‑alias». На странице алиаса нажмите Contacts, создайте контакт и затем Copy reverse‑alias. Отправка на этот адрес будет маскировать ваш реальный адрес.

Тесты, приёмка и тестовые случаи
Критерии приёмки
- Веб‑интерфейс SimpleLogin доступен по HTTPS и отображает форму логина.
- Postfix принимает SMTP‑соединения на порт 25 и корректно проксирует почту в SimpleLogin (проверка через отправку test@rootdomain).
- DKIM подписывает исходящую почту, SPF проходит проверку, DMARC не пометает письма как fail.
- Резервные копии базы данных делаются автоматически по расписанию.
Базовые тесты приёмки
- Отправить письмо на созданный алиас с внешнего почтового адреса — письмо должно быть доставлено в ваш аккаунт SimpleLogin.
- Скопировать reverse‑alias и отправить письмо от него — получатель видит ваш алиас, а не реальный адрес.
- Проверить заголовки письма на наличие DKIM‑подписи и SPF pass.
- Убедиться, что certbot автопролонгация настроена (симуляция продления).
Устранение неполадок
Частые проблемы и решения
- Не доставляется почта: проверьте логи Postfix (/var/log/mail.log), убедитесь, что записи MX указывают на правильный хост и порт 25 открыт.
- DKIM не виден: удостоверьтесь, что DKIM публичный ключ корректно записан в TXT и что путь в simplelogin.env указывает на приватный ключ.
- Certbot не выпускает сертификат: проверьте доступность HTTP (80) для поддомена и корректность A‑записи.
- Контейнеры падают: смотрите логи контейнеров docker logs
.
Полезные команды для диагностики
sudo docker logs sl-app --tail 200
sudo docker logs sl-email --tail 200
sudo journalctl -u postfix -f
dig txt YOUR-ROOT.DOMAIN
dig txt dkim._domainkey.SUBDOMAIN.YOUR-ROOT.DOMAINРекомендации по безопасности и эксплуатации
- Регулярно обновляйте образы Docker и OS.
- Храните приватные ключи (dkim.key) с правами 600 и в надёжном хранилище.
- Используйте fail2ban или аналог для защиты SSH и Postfix от брутфорса.
- Планируйте бэкапы Postgres (psql dump) и каталога /sl. Пример простого бэкапа:
pg_dump -U postgres -h 127.0.0.1 -p 5432 simplelogin > ~/backups/simplelogin-$(date +%F).sql
tar -czf ~/backups/sl-files-$(date +%F).tar.gz ~/sl- Настройте мониторинг контейнеров и дискового пространства (Prometheus, Netdata, UptimeRobot).
- Минимизируйте доступ к базе данных: слушать только на 127.0.0.1 и внутри docker сети.
Резервное копирование и восстановление пошагово
План резервного копирования
- Дамп базы данных (ежедневно).
- Архивация каталога /sl (пользовательские файлы, PGP, uploads).
- Экспорт конфигурации nginx и /etc/postfix конфигов.
Восстановление после сбоя
- Восстановить файлы конфигурации и /sl каталоги.
- Развернуть Postgres и восстановить дамп:
psql -U postgres -d simplelogin -f simplelogin-YYYY-MM-DD.sql- Запустить контейнеры SimpleLogin и проверить логи.
Модель принятия решений и когда это не подходит
Модель: если вам важна полная приватность и контроль над почтой — самостоятельный хостинг SimpleLogin на VPS имеет смысл. Если вы не хотите управлять почтовой инфраструктурой (DNS, DKIM, SPF, настройка Postfix), рассмотрите SaaS‑решения.
Когда это не подходит
- У вас нет времени/знаний на поддержку почтовой инфраструктуры.
- Вы не можете обеспечить стабильный IPv4 и корректные DNS записи.
- Требования к непрерывной доступности высокой, а у вас нет ресурсов для отказоустойчивости.
Альтернативы
- AnonAddy — похожая система алиасов, есть хостинг и open source.
- Proton Mail/Proton Aliases — решение под ключ с сильной приватностью.
- Mail-in-a-Box — если хочется полный почтовый стек (хостинг самой почты).
Чек‑листы по ролям
Администратор
- Настроить DNS: A, MX, SPF, DKIM, DMARC.
- Обеспечить SSL и автопродление certbot.
- Обеспечить резервное копирование и план восстановления.
Оператор
- Мониторить состояние контейнеров и диск.
- Отслеживать логи Postfix и SimpleLogin.
- Выполнять обновления образов Docker в контролируемом окне.
Специалист по безопасности
- Проверять права на приватные ключи.
- Настроить ограничение доступа к Postgres.
- Внедрить fail2ban и регулярные ревизии конфигурации.
Краткий глоссарий
- Aliase (алиас) — альтернативный адрес, пересылающий почту в ваш ящик.
- DKIM — метод подписания исходящей почты для проверки подлинности.
- SPF — правило, какие сервера могут отправлять почту от имени домена.
- DMARC — политика обработки сообщений, не прошедших SPF/DKIM.
Примеры автоматизации рутинных задач
Обновление образов и перезапуск контейнеров (простая playbook‑штука):
sudo docker pull simplelogin/app:4.6.5-beta
sudo docker stop sl-app sl-email sl-job-runner
sudo docker rm sl-app sl-email sl-job-runner
# затем запустить контейнеры по тем же командам, что вышеАвтоматический бэкап базы в cron (ежедневно в 03:00):
0 3 * * * /usr/bin/pg_dump -U postgres -h 127.0.0.1 -p 5432 simplelogin > /root/backups/simplelogin-$(date +\%F).sqlКраткое руководство по миграции на другой VPS
- Остановите контейнеры на старом хосте.
- Сделайте дамп БД и архив /sl.
- Передайте файлы на новый хост (scp/rsync).
- Настройте ту же сеть Docker и конфиги.
- Восстановите дамп Postgres и запустите контейнеры.
- Обновите записи DNS, если меняется IP.
Социальные тексты и предпросмотр
OG title: SimpleLogin на Ubuntu — установка и настройка
OG description: Подробная инструкция по развёртыванию SimpleLogin с Docker, Postgres и Postfix, включая настройку DKIM/SPF/DMARC и рекомендации по безопасности.
Краткое резюме
- SimpleLogin легко разворачивается в Docker на Ubuntu, но требует корректной настройки DNS и MTA.
- Важные компоненты: Postgres, Postfix, Nginx (SSL), certbot и правильные TXT записи для DKIM/SPF/DMARC.
- Обязательно автоматизируйте бэкапы, следите за логами и регулярно обновляйте образы.
Image credit: Lukas Blazek via Unsplash and SimpleLogin Github. Все скриншоты и изменения — Ramces Red.
Похожие материалы
Knockout-эффект в Photoshop и Illustrator — руководство
HashTab: проверка контрольных сумм в Windows
Экспорт и импорт списков отправителей в Outlook
Как проверить трафик и выбрать маршрут в Google Maps
Microsoft Cruel Solitaire на Windows 10 — как запустить