Гид по технологиям

Как установить SimpleLogin на Ubuntu и создать анонимные email‑алиасы

7 min read Электронная почта Обновлено 29 Nov 2025
Установка SimpleLogin на Ubuntu — полное руководство
Установка SimpleLogin на Ubuntu — полное руководство

Содержание

  • Подготовка системы
  • Установка 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» можно подтвердить значение по умолчанию или указать ваш домен.

Фото терминала с вариантом Internet Site на установщике Postfix

Убедитесь, что snap core установлен и затем установите certbot:

sudo snap install core
sudo snap install certbot --classic

Откройте порты в брандмауэре (UFW) для почты и веба:

sudo ufw allow 25,80,443/tcp

Important: для почтового сервера требуется корректно настроенный 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.cf
hosts = 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

Рабочая панель SimpleLogin с дашбордом

Создание 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 с кнопкой New Custom Alias

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

Пример письма, отправленного на алиас

Отправка писем из алиаса

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

Кнопка Contacts для создания reverse‑alias

Тесты, приёмка и тестовые случаи

Критерии приёмки

  • Веб‑интерфейс SimpleLogin доступен по HTTPS и отображает форму логина.
  • Postfix принимает SMTP‑соединения на порт 25 и корректно проксирует почту в SimpleLogin (проверка через отправку test@rootdomain).
  • DKIM подписывает исходящую почту, SPF проходит проверку, DMARC не пометает письма как fail.
  • Резервные копии базы данных делаются автоматически по расписанию.

Базовые тесты приёмки

  1. Отправить письмо на созданный алиас с внешнего почтового адреса — письмо должно быть доставлено в ваш аккаунт SimpleLogin.
  2. Скопировать reverse‑alias и отправить письмо от него — получатель видит ваш алиас, а не реальный адрес.
  3. Проверить заголовки письма на наличие DKIM‑подписи и SPF pass.
  4. Убедиться, что 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 сети.

Резервное копирование и восстановление пошагово

План резервного копирования

  1. Дамп базы данных (ежедневно).
  2. Архивация каталога /sl (пользовательские файлы, PGP, uploads).
  3. Экспорт конфигурации nginx и /etc/postfix конфигов.

Восстановление после сбоя

  1. Восстановить файлы конфигурации и /sl каталоги.
  2. Развернуть Postgres и восстановить дамп:
psql -U postgres -d simplelogin -f simplelogin-YYYY-MM-DD.sql
  1. Запустить контейнеры 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

  1. Остановите контейнеры на старом хосте.
  2. Сделайте дамп БД и архив /sl.
  3. Передайте файлы на новый хост (scp/rsync).
  4. Настройте ту же сеть Docker и конфиги.
  5. Восстановите дамп Postgres и запустите контейнеры.
  6. Обновите записи 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.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Knockout-эффект в Photoshop и Illustrator — руководство
Дизайн

Knockout-эффект в Photoshop и Illustrator — руководство

HashTab: проверка контрольных сумм в Windows
Безопасность

HashTab: проверка контрольных сумм в Windows

Экспорт и импорт списков отправителей в Outlook
Почта

Экспорт и импорт списков отправителей в Outlook

Как проверить трафик и выбрать маршрут в Google Maps
Навигация

Как проверить трафик и выбрать маршрут в Google Maps

Microsoft Cruel Solitaire на Windows 10 — как запустить
Игры

Microsoft Cruel Solitaire на Windows 10 — как запустить

Как задать рабочее время и место в Outlook
Инструкции

Как задать рабочее время и место в Outlook