Власне розміщено

Початок роботи

Наше рішення для самостійного розміщення електронної пошти, як і всі наші продукти, на 100% має відкритий вихідний код — як для фронтенду, так і для серверної частини. Це означає:

  1. Повна прозорість: Кожен рядок коду, який обробляє ваші електронні листи, доступний для публічного контролю.
  2. Внесок спільноти: Будь-хто може зробити свій внесок у покращення або виправити проблеми.
  3. Безпека через відкритість: Вразливості можуть бути виявлені та виправлені глобальною спільнотою.
  4. Відсутність прив’язаності до постачальника: Ви ніколи не залежите від існування нашої компанії.

Вся кодова база доступна на GitHub за адресою https://github.com/forwardemail/forwardemail.net,, ліцензована згідно з ліцензією MIT.

Архітектура включає контейнери для:

  • SMTP-сервер для вихідної електронної пошти
  • Сервери IMAP/POP3 для отримання електронної пошти
  • Веб-інтерфейс для адміністрування
  • База даних для зберігання конфігурації
  • Redis для кешування та підвищення продуктивності
  • SQLite для безпечного, зашифрованого зберігання поштових скриньок

Note

Обов’язково ознайомтеся з нашим самостійно розміщений блог

А для тих, хто зацікавлений у більш детальній покроковій версії, дивіться наші посібники на основі Убунту або Дебіан.

Вимоги

Перш ніж запускати скрипт встановлення, переконайтеся, що у вас є наступне:

  • Операційна система: Сервер на базі Linux (наразі підтримується Ubuntu 22.04+).
  • Ресурси: 1 віртуальний процесор та 2 ГБ оперативної пам'яті
  • Root-доступ: Адміністративні права для виконання команд.
  • Доменне ім'я: Власний домен, готовий до налаштування DNS.
  • Чиста IP-адреса: Переконайтеся, що ваш сервер має чисту IP-адресу без попередньої репутації спаму, перевіривши чорні списки. Докладніше тут.
  • Публічна IP-адреса з підтримкою порту 25
  • Можливість встановлення зворотний PTR
  • Підтримка IPv4 та IPv6

Ініціалізація хмари / Дані користувача

Більшість постачальників хмарних послуг підтримують конфігурацію cloud-init для випадків, коли налаштовується віртуальний приватний сервер (VPS). Це чудовий спосіб заздалегідь налаштувати деякі файли та змінні середовища для використання логікою початкового налаштування скриптів, що дозволить уникнути необхідності запитувати додаткову інформацію під час роботи скрипта.

Параметри

  • EMAIL – електронна адреса, що використовується для нагадувань про закінчення терміну дії certbot
  • DOMAIN – користувацький домен (наприклад, example.com), що використовується для налаштування самостійного хостингу
  • AUTH_BASIC_USERNAME – ім’я користувача, що використовується під час першого налаштування для захисту сайту
  • AUTH_BASIC_PASSWORD – пароль, що використовується під час першого налаштування для захисту сайту
  • /root/.cloudflare.ini – (лише для користувачів Cloudflare) файл конфігурації cloudflare, що використовується certbot для налаштування DNS. Він вимагає встановлення токена API через dns_cloudflare_api_token. Докладніше тут.

Приклад:

#cloud-config
write_files:
  - path: /root/.cloudflare.ini
    content: |
      dns_cloudflare_api_token = "xxx"
    owner: root:root
    permissions: '0600'
  - path: /etc/profile.d/env.sh
    content: |
      export EMAIL="test@myemail.com"
      export DOMAIN="mydomain.com"

runcmd:
  - chmod +x /etc/profile.d/env.sh

Встановити

Виконайте таку команду на вашому сервері, щоб завантажити та виконати інсталяційний скрипт:

bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)

Скрипт встановлення налагодження

Додайте DEBUG=true перед скриптом встановлення для отримання детального виводу:

DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)

Запити

1. Initial setup
2. Setup Backups
3. Setup Auto Upgrades
4. Renew certificates
5. Restore from Backup
6. Help
7. Exit
  • Початкове налаштування: Завантажте найновіший код для пересилання електронної пошти, налаштуйте середовище, запитайте свій власний домен та налаштуйте всі необхідні сертифікати, ключі та секрети.
  • Налаштування резервного копіювання: Налаштує cron для резервного копіювання mongoDB та redis за допомогою S3-сумісного сховища для безпечного віддаленого зберігання. Окремо, sqlite буде резервно копіюватися під час входу, якщо будуть зміни для безпечних, зашифрованих резервних копій.
  • Налаштування оновлення: Налаштуйте cron для пошуку нічних оновлень, які безпечно відновлять та перезапустять компоненти інфраструктури.
  • Поновлення сертифікатів: Certbot / lets encrypt використовується для SSL-сертифікатів, а термін дії ключів закінчується кожні 3 місяці. Це поновить сертифікати для вашого домену та розмістить їх у потрібній папці для використання відповідними компонентами. Див. важливі шляхи до файлів
  • Відновлення з резервної копії: Запустить mongodb та redis для відновлення з резервних даних.

Початкове налаштування (варіант 1)

Виберіть опцію 1. Initial setup, щоб розпочати.

Після завершення ви маєте побачити повідомлення про успіх. Ви навіть можете виконати docker ps, щоб побачити, як компоненти запустилися. Більше інформації про компоненти нижче.

Послуги

Назва служби Порт за замовчуванням Опис
Веб 443 Веб-інтерфейс для всіх взаємодій адміністратора
API 4000 API-рівень для абстрактних баз даних
Брі Жоден Фонове завдання та виконавець завдань
SMTP 465/587 SMTP-сервер для вихідної електронної пошти
SMTP Брі Жоден Фонове завдання SMTP
MX 2525 Обмін поштою для вхідної електронної пошти та пересилання електронної пошти
IMAP 993/2993 IMAP-сервер для керування вхідною електронною поштою та поштовими скриньками
POP3 995/2995 POP3-сервер для вхідної електронної пошти та керування поштовими скриньками
SQLite 3456 Сервер SQLite для взаємодії з базами даних SQLite
SQLite Брі Жоден Фонове завдання SQLite
CalDAV 5000 Сервер CalDAV для керування календарем
CardDAV 6000 Сервер CardDAV для керування календарем
MongoDB 27017 База даних MongoDB для управління більшістю даних
Redis 6379 Redis для кешування та управління станом
SQLite Жоден Бази даних SQLite для зашифрованих поштових скриньок

Важливі шляхи до файлів

Примітка: Шлях до хоста нижче вказано відносно /root/forwardemail.net/self-hosting/.

Компонент Шлях хоста Шлях контейнера
MongoDB ./mongo-backups /backups
Redis ./redis-data /data
SQLite ./sqlite-data /mnt/{SQLITE_STORAGE_PATH}
Файл оточення ./.env /app/.env
SSL-сертифікати/ключі ./ssl /app/ssl/
Закритий ключ ./ssl/privkey.pem /app/ssl/privkey.pem
Сертифікат повного ланцюга ./ssl/fullchain.pem /app/ssl/fullchain.pem
Сертифіковані центри сертифікації ./ssl/cert.pem /app/ssl/cert.pem
Закритий ключ DKIM ./ssl/dkim.key /app/ssl/dkim.key

Important

Безпечно збережіть файл .env. Він критично важливий для відновлення у разі збою. Ви можете знайти його у /root/forwardemail.net/self-hosting/.env.

Конфігурація

Початкове налаштування DNS

У вибраному вами постачальнику DNS налаштуйте відповідні DNS-записи. Зверніть увагу, що все в дужках (<>) є динамічним і потребує оновлення відповідно до вашого значення.

Тип Ім'я Зміст TTL
A "@", "." або пусто <ip_адреса> авто
CNAME API <ім'я_домену> авто
CNAME Кальдав <ім'я_домену> авто
CNAME карддав <ім'я_домену> авто
CNAME відскоки fe <ім'я_домену> авто
CNAME IMAP <ім'я_домену> авто
CNAME мкс <ім'я_домену> авто
CNAME поп3 <ім'я_домену> авто
CNAME SMTP <ім'я_домену> авто
MX "@", "." або пусто mx.<ім'я_домену> (пріоритет 0) авто
TXT "@", "." або пусто "v=spf1 a -всі" авто

Зворотний запис DNS / PTR

Записи зворотного DNS (rDNS) або записи зворотного вказівника (PTR) є важливими для поштових серверів, оскільки вони допомагають перевірити легітимність сервера, який надсилає електронні листи. Кожен хмарний постачальник робить це по-різному, тому вам потрібно буде знайти інформацію про те, як додати "Зворотний DNS", щоб зіставити хост та IP-адресу з відповідним ім'ям хоста. Найімовірніше, це відбувається в розділі мережевих параметрів постачальника.

Порт 25 заблоковано

Деякі інтернет-провайдери та хмарні провайдери блокують порт 25, щоб уникнути зловмисників. Вам може знадобитися подати заявку в службу підтримки, щоб відкрити порт 25 для SMTP/вихідної електронної пошти.

Адаптація

  1. Відкрийте цільову сторінку Перейдіть за посиланням https://<ім’я_домену>, замінивши <ім’я_домену> доменом, налаштованим у ваших налаштуваннях DNS. Ви маєте побачити цільову сторінку пересилання електронної пошти.

  2. Увійдіть та зареєструйте свій домен

  • Увійдіть, використовуючи дійсну електронну адресу та пароль.
  • Введіть доменне ім'я, яке ви хочете налаштувати (воно має відповідати конфігурації DNS).
  • Дотримуйтесь інструкцій, щоб додати необхідні записи MX та TXT для перевірки.
  1. Завершіть налаштування
  • Після підтвердження перейдіть на сторінку «Псевдоніми», щоб створити свій перший псевдонім.
  • За потреби налаштуйте SMTP для вихідної електронної пошти у Налаштуваннях домену. Для цього потрібні додаткові записи DNS.

Note

Жодна інформація не надсилається за межі вашого сервера. Варіант самостійного розміщення та початковий обліковий запис призначені лише для входу адміністратора та веб-перегляду для керування доменами, псевдонімами та пов’язаними конфігураціями електронної пошти.

Тестування

Створення вашого першого псевдоніма

  1. Перейдіть на сторінку «Псевдоніми» Відкрийте сторінку керування псевдонімами:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
  1. Додайте новий псевдонім
  • Натисніть Додати псевдонім (угорі праворуч).
  • Введіть псевдонім і за потреби налаштуйте параметри електронної пошти.
  • (Необов’язково) Увімкніть підтримку IMAP/POP3/CalDAV/CardDAV, встановивши прапорець.
  • Натисніть Створити псевдонім.
  1. Встановіть пароль
  • Натисніть Згенерувати пароль, щоб створити надійний пароль.
  • Цей пароль буде потрібен для входу у ваш поштовий клієнт.
  1. Налаштуйте свій поштовий клієнт
  • Використовуйте поштовий клієнт, такий як Thunderbird.
  • Введіть псевдонім та згенерований пароль.
  • Налаштуйте параметри IMAP та SMTP відповідно.

Налаштування сервера електронної пошти

Ім'я користувача: <alias name>

Тип Ім'я хоста Порт Безпека з'єднання Автентифікація
SMTP smtp.<ім'я_домену> 465 SSL / TLS Звичайний пароль
IMAP imap.<ім'я_домену> 993 SSL / TLS Звичайний пароль

Надсилання/отримання вашого першого електронного листа

Після налаштування ви зможете надсилати та отримувати електронні листи на свою щойно створену та самостійно розміщену адресу електронної пошти!

Виправлення неполадок

Чому це не працює за межами Ubuntu та Debian

Наразі ми шукаємо підтримку для MacOS і будемо шукати інших. Будь ласка, відкрийте обговорення або зробіть свій внесок, якщо хочете, щоб інші отримали підтримку.

Чому не вдається виконати тест certbot acme

Найпоширеніша помилка полягає в тому, що certbot / letsencrypt іноді запитує 2 запити. Вам потрібно переконатися, що ви додали ОБИДВА текстові записи.

Приклад: Ви можете побачити два подібні завдання: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"

Також можливо, що поширення DNS не завершено. Ви можете скористатися такими інструментами, як: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>. Це дасть вам уявлення про те, чи слід відображати зміни у вашому TXT-записі. Також можливо, що локальний кеш DNS на вашому хості все ще використовує старе, неактуальне значення або не врахував останні зміни.

Інший варіант – використовувати автоматичні зміни DNS cerbot, встановивши файл /root/.cloudflare.ini з токеном API у вашому cloud-init / user-data під час початкового налаштування VPS або створіть цей файл і запустіть скрипт ще раз. Це автоматично керуватиме змінами DNS та викликатиме оновлення.

Яке основне ім'я користувача та пароль для авторизації

Для самостійного хостингу ми додаємо спливаюче вікно для першої автентифікації в браузері з простим ім'ям користувача (admin) та паролем (випадково згенерованим під час початкового налаштування). Ми додаємо це лише для захисту на випадок, якщо автоматизація/скрепери якимось чином виманять вас під час першої реєстрації в веб-інтерфейсі. Ви можете знайти цей пароль після початкового налаштування у файлі .env у розділах AUTH_BASIC_USERNAME та AUTH_BASIC_PASSWORD.

Як дізнатися, що запущено

Ви можете запустити docker ps, щоб побачити всі запущені контейнери, які розкручуються з файлу docker-compose-self-hosting.yml. Ви також можете запустити docker ps -a, щоб побачити все (включно з контейнерами, які не запущені).

Як дізнатися, чи щось не працює, а мало б бути

Ви можете виконати команду docker ps -a, щоб побачити все (включно з контейнерами, які не запущені). Ви можете побачити журнал завершення або примітку.

Як знайти журнали

Ви можете отримати більше журналів через docker logs -f <container_name>. Якщо щось завершилося, це, ймовірно, пов'язано з неправильним налаштуванням файлу .env.

У веб-інтерфейсі ви можете переглянути /admin/emails та /admin/logs для журналів вихідної електронної пошти та журналів помилок відповідно.

Чому час очікування моїх вихідних електронних листів закінчується

Якщо ви бачите повідомлення на кшталт «Час очікування з’єднання минув» під час підключення до сервера MX..., можливо, вам потрібно перевірити, чи не заблоковано порт 25. Інтернет-провайдери або хмарні провайдери зазвичай блокують його за замовчуванням, тому вам може знадобитися звернутися до служби підтримки / подати заявку, щоб отримати доступ до цієї опції.

Які інструменти слід використовувати для перевірки найкращих практик налаштування електронної пошти та репутації IP-адреси

Погляньте на наш Найчастіші запитання тут.