Samodzielnie hostowane

Nasze samodzielnie hostowane rozwiązanie poczty e-mail, podobnie jak wszystkie nasze produkty, jest w 100% open-source — zarówno front-end, jak i back-end. Oznacza to:

  1. Pełna przejrzystość:Każda linijka kodu przetwarzająca Twoje wiadomości e-mail jest dostępna do wglądu publicznego
  2. Wkład społeczności:Każdy może wnieść ulepszenia lub rozwiązać problemy
  3. Bezpieczeństwo poprzez otwartość:Luki w zabezpieczeniach mogą zostać zidentyfikowane i naprawione przez społeczność globalną
  4. Brak uzależnienia od dostawcy:Nigdy nie jesteś zależny od istnienia naszej firmy

Cała baza kodu jest dostępna na GitHub pod adresem https://github.com/forwardemail/forwardemail.net, licencjonowany na podstawie licencji MIT.

Architektura obejmuje kontenery dla:

  • Serwer SMTP dla poczty wychodzącej
  • Serwery IMAP/POP3 do pobierania poczty e-mail
  • Interfejs internetowy do administracji
  • Baza danych do przechowywania konfiguracji
  • Redis do buforowania i wydajności
  • SQLite do bezpiecznego, szyfrowanego przechowywania poczty

Przed uruchomieniem skryptu instalacyjnego upewnij się, że masz następujące elementy:

  • System operacyjny:Serwer oparty na systemie Linux (aktualnie obsługujący Ubuntu 22.04+).
  • Zasoby: 1 vCPU i 2 GB pamięci RAM
  • Dostęp do roota:Uprawnienia administracyjne do wykonywania poleceń.
  • Nazwa domeny:Niestandardowa domena gotowa do konfiguracji DNS.
  • Wyczyść IP: Upewnij się, że Twój serwer ma czysty adres IP bez wcześniejszej reputacji spamu, sprawdzając czarne listy. Więcej informacji Tutaj.
  • Publiczny adres IP z obsługą portu 25
  • Możliwość ustawienia odwrotny PTR
  • Obsługa IPv4 i IPv6

[!TIP] Zobacz naszą listę niesamowici dostawcy serwerów pocztowych

Cloud-init / Dane użytkownika

Większość dostawców chmury obsługuje konfigurację cloud-init na czas, gdy wirtualny serwer prywatny (VPS) jest dostarczany. To świetny sposób na wcześniejsze ustawienie niektórych plików i zmiennych środowiskowych do wykorzystania przez początkową logikę konfiguracji skryptów, co ominie potrzebę wyświetlania monitu podczas działania skryptu w celu uzyskania dodatkowych informacji.

Opcje

  • EMAIL - adres e-mail używany do przypomnień o wygaśnięciu certyfikatu certbot
  • DOMAIN - domena niestandardowa (np. example.com) używane do konfiguracji samodzielnego hostingu
  • AUTH_BASIC_USERNAME - nazwa użytkownika używana przy pierwszej konfiguracji w celu ochrony witryny
  • AUTH_BASIC_PASSWORD - passward używany przy pierwszej konfiguracji w celu ochrony witryny
  • /root/.cloudflare.ini - (Tylko dla użytkowników Cloudflare) plik konfiguracyjny cloudflare używany przez certbot do konfiguracji DNS. Wymaga ustawienia tokenu API za pomocą dns_cloudflare_api_token. Przeczytaj więcej Tutaj.

Przykład:

#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

Uruchom następujące polecenie na swoim serwerze, aby pobrać i uruchomić skrypt instalacyjny:

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

Skrypt instalacyjny debugowania

Dodać DEBUG=true przed skryptem instalacyjnym w celu uzyskania szczegółowych informacji:

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

Monity

1. Initial setup
2. Setup Backups
3. Setup Auto Upgrades
4. Renew certificates
5. Restore from Backup
6. Help
7. Exit
  • Konfiguracja początkowa: Pobierz najnowszy kod do przekazywania poczty e-mail, skonfiguruj środowisko, wyświetl monit o podanie własnej domeny i skonfiguruj wszystkie niezbędne certyfikaty, klucze i sekrety.
  • Konfiguracja kopii zapasowej: Skonfiguruje cron do tworzenia kopii zapasowych mongoDB i redis przy użyciu magazynu zgodnego z S3 w celu bezpiecznego, zdalnego przechowywania. Osobno sqlite będzie kopiowany zapasowo po zalogowaniu, jeśli nastąpią zmiany dotyczące bezpiecznych, szyfrowanych kopii zapasowych.
  • Konfiguracja aktualizacji: Skonfiguruj cron, który będzie wyszukiwał nocne aktualizacje, co umożliwi bezpieczne odbudowanie i ponowne uruchomienie komponentów infrastruktury.
  • Odnów certyfikaty: Certbot / lets encrypt jest używany do certyfikatów SSL, a klucze wygasają co 3 miesiące. To odnowi certyfikaty dla Twojej domeny i umieści je w odpowiednim folderze, aby powiązane komponenty mogły je wykorzystać. Zobacz ważne ścieżki plików
  • Przywróć z kopii zapasowej:Uruchomi mongodb i redis w celu przywrócenia danych z kopii zapasowej.

Konfiguracja początkowa (opcja 1)

Wybierz opcję 1. Initial setup zacząć.

Po zakończeniu powinieneś zobaczyć komunikat o powodzeniu. Możesz nawet uruchomić docker ps zobaczyć ten komponenty rozkręcone. Więcej informacji o komponentach poniżej.

Nazwa usługiDomyślny portOpis
Sieć443Interfejs internetowy do wszystkich interakcji administracyjnych
API4000Warstwa API do abstrakcyjnych baz danych
BreeNicPraca w tle i wykonawca zadań
SMTP465/587Serwer SMTP dla poczty wychodzącej
SMTP BreeNicPraca w tle SMTP
MX2525Wymiana poczty dla poczty przychodzącej i przekazywanie poczty e-mail
IMAP993/2993Serwer IMAP do zarządzania pocztą przychodzącą i skrzynką pocztową
POP3995/2995Serwer POP3 do zarządzania pocztą przychodzącą i skrzynką pocztową
Sqlite3456Serwer SQLite do interakcji z bazami danych SQLite
SQLite BreeNicPraca w tle w programie SQLite
CalDAV5000Serwer CalDAV do zarządzania kalendarzem
MongoDB27017Baza danych MongoDB do większości zastosowań w zarządzaniu danymi
Redisa6379Redis do buforowania i zarządzania stanem
SqliteNicBazy danych SQLite dla szyfrowanych skrzynek pocztowych

Ważne ścieżki plików

Notatka: Ścieżka hosta poniżej jest w odniesieniu do /root/forwardemail.net/self-hosting/.

CzęśćŚcieżka hostaŚcieżka kontenera
MongoDB./mongo-backups/backups
Redisa./redis-data/data
Sqlite./sqlite-data/mnt/{SQLITE_STORAGE_PATH}
Plik env./.env/app/.env
Certyfikaty/klucze SSL./ssl/app/ssl/
Klucz prywatny./ssl/privkey.pem/app/ssl/privkey.pem
Pełny certyfikat łańcucha./ssl/fullchain.pem/app/ssl/fullchain.pem
Certyfikowani CA./ssl/cert.pem/app/ssl/cert.pem
Klucz prywatny DKIM./ssl/dkim.key/app/ssl/dkim.key

[!WAŻNE] Zapisz .env plik bezpiecznie. Jest to krytyczne dla odzyskania w przypadku awarii. Możesz to znaleźć w /root/forwardemail.net/self-hosting/.env.

Początkowa konfiguracja DNS

W wybranym przez siebie dostawcy DNS skonfiguruj odpowiednie rekordy DNS. Nie zanotuj niczego w nawiasach (<>) jest dynamiczny i wymaga aktualizacji zgodnie z Twoją wartością.

RodzajImięTreśćTTL
A„@”, „.” lub puste<adres_ip>automatyczny
CNAMEAPI<nazwa_domeny>automatyczny
CNAMEkaldav<nazwa_domeny>automatyczny
CNAMEfe-odbicia<nazwa_domeny>automatyczny
CNAMEimap<nazwa_domeny>automatyczny
CNAMEmx<nazwa_domeny>automatyczny
CNAMEpop3<nazwa_domeny>automatyczny
CNAMESmtp<nazwa_domeny>automatyczny
MX„@”, „.” lub pustemx.<nazwa_domeny> (priorytet 0)automatyczny
TXT„@”, „.” lub puste"v=spf1 a -wszystko"automatyczny

Odwrotny rekord DNS/PTR

Odwrotny DNS (rDNS) lub odwrotne rekordy wskaźnika (PTR records) są niezbędne dla serwerów poczty e-mail, ponieważ pomagają zweryfikować legalność serwera wysyłającego wiadomość e-mail. Każdy dostawca chmury robi to inaczej, więc musisz sprawdzić, jak dodać „Odwrotny DNS”, aby zmapować hosta i adres IP na odpowiadającą mu nazwę hosta. Najprawdopodobniej w sekcji sieciowej dostawcy.

Port 25 zablokowany

Niektórzy dostawcy usług internetowych i usług w chmurze blokują 25, aby uniknąć złych aktorów. Może być konieczne złożenie zgłoszenia pomocy technicznej w celu otwarcia portu 25 dla SMTP / poczty wychodzącej.

  1. Otwórz stronę docelową Przejdź do https://<nazwa_domeny>, zastępując <nazwa_domeny> domeną skonfigurowaną w ustawieniach DNS. Powinna zostać wyświetlona strona docelowa Forward Email.

  2. Zaloguj się i dołącz swoją domenę

  • Zaloguj się, podając prawidłowy adres e-mail i hasło.
  • Wprowadź nazwę domeny, którą chcesz skonfigurować (musi być zgodna z konfiguracją DNS).
  • Postępuj zgodnie z instrukcjami, aby dodać wymagane MX oraz TXT zapisy do weryfikacji.
  1. Zakończ konfigurację
  • Po weryfikacji wejdź na stronę Aliasy, aby utworzyć swój pierwszy alias.
  • Opcjonalnie skonfiguruj SMTP dla poczty wychodzącej w Ustawienia domeny. Wymaga to dodatkowych rekordów DNS.

[!NOTE] Żadne informacje nie są wysyłane poza Twój serwer. Opcja samodzielnego hostowania i początkowe konto są przeznaczone tylko do logowania administratora i widoku internetowego w celu zarządzania domenami, aliasami i powiązanymi konfiguracjami poczty e-mail.

Tworzenie pierwszego aliasu

  1. Przejdź do strony Aliasy Otwórz stronę zarządzania aliasami:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
  1. Dodaj nowy alias
  • Trzask Dodaj alias (w prawym górnym rogu).
  • Wprowadź nazwę aliasu i dostosuj ustawienia poczty e-mail według potrzeb.
  • (Opcjonalnie) Włącz IMAP/POP3/CalDAV wsparcie poprzez zaznaczenie pola wyboru.
  • Trzask Utwórz alias.
  1. Ustaw hasło
  • Trzask Wygeneruj hasło aby utworzyć bezpieczne hasło.
  • To hasło będzie wymagane do zalogowania się do klienta poczty elektronicznej.
  1. Skonfiguruj swojego klienta poczty e-mail
  • Użyj klienta poczty e-mail, np. Thunderbird.
  • Wprowadź nazwę aliasu i wygenerowane hasło.
  • Skonfiguruj IMAP oraz SMTP ustawienia odpowiednio.

Ustawienia serwera e-mail

Nazwa użytkownika: <alias name>

RodzajNazwa hostaPortBezpieczeństwo połączeniaPoświadczenie
SMTPsmtp.<nazwa_domeny>465SSL / TLSNormalne hasło
IMAPimap.<nazwa_domeny>993SSL / TLSNormalne hasło

Wysyłanie/odbieranie pierwszej wiadomości e-mail

Po skonfigurowaniu będziesz mieć możliwość wysyłania i odbierania wiadomości e-mail na nowo utworzony i samodzielnie hostowany adres e-mail!

Dlaczego to nie działa poza Ubuntu

Obecnie staramy się wspierać Debian, MacOS i będziemy szukać innych. Proszę otworzyć dyskusja lub wesprzyj nas, jeśli chcesz, aby inni również otrzymali wsparcie.

Dlaczego wyzwanie certbot acme się nie udaje

Najczęstszą pułapką jest to, że certbot / letsencrypt czasami żąda 2 wyzwania. Musisz być pewien, że dodasz BOTH rekordy txt.

Przykład: Możesz zobaczyć dwa wyzwania takie jak to: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"

Możliwe jest również, że propagacja DNS nie została ukończona. Możesz użyć narzędzi takich jak: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>. To da ci pojęcie, czy zmiany w twoim rekordzie TXT powinny zostać odzwierciedlone. Możliwe jest również, że lokalna pamięć podręczna DNS na twoim hoście nadal używa starej, nieaktualnej wartości lub nie wykryła ostatnich zmian.

Inną opcją jest użycie automatycznych zmian DNS cerbota poprzez ustawienie /root/.cloudflare.ini plik z tokenem api w swoim cloud-init / user-data na początkowej konfiguracji VPS lub utwórz ten plik i uruchom skrypt ponownie. To automatycznie zarządza zmianami DNS i aktualizacjami wyzwań.

Jaka jest podstawowa nazwa użytkownika i hasło uwierzytelniające?

W przypadku samodzielnego hostingu dodajemy pierwsze wyskakujące okienko uwierzytelniania przeglądarki z prostą nazwą użytkownika (admin) i hasło (losowo generowane podczas początkowej konfiguracji). Dodajemy to tylko jako zabezpieczenie na wypadek, gdyby automatyzacja/scrapery jakoś Cię wyprzedziły w kwestii pierwszej rejestracji w środowisku internetowym. Możesz znaleźć to hasło po początkowej konfiguracji w swoim .env złóż pod AUTH_BASIC_USERNAME oraz AUTH_BASIC_PASSWORD.

Skąd mam wiedzieć, co jest uruchomione?

Możesz biegać docker ps aby zobaczyć wszystkie uruchomione kontenery, które są uruchamiane docker-compose-self-hosting.yml plik. Możesz także uruchomić docker ps -a aby zobaczyć wszystko (w tym kontenery, które nie są uruchomione).

Skąd mam wiedzieć, czy coś nie działa, chociaż powinno?

Możesz biegać docker ps -a aby zobaczyć wszystko (w tym kontenery, które nie są uruchomione). Możesz zobaczyć dziennik wyjścia lub notatkę.

Jak znaleźć dzienniki?

Możesz uzyskać więcej dzienników za pośrednictwem docker logs -f <container_name>. Jeśli coś się wydarzyło, prawdopodobnie jest to związane z .env plik jest nieprawidłowo skonfigurowany.

W interfejsie internetowym możesz przeglądać /admin/emails oraz /admin/logs odpowiednio dla dzienników poczty wychodzącej i dzienników błędów.

Dlaczego moje wychodzące wiadomości e-mail przestają działać?

Jeśli widzisz komunikat, taki jak Przekroczono limit czasu połączenia podczas łączenia się z serwerem MX..., być może musisz sprawdzić, czy port 25 jest zablokowany. Dostawcy usług internetowych lub dostawcy usług w chmurze często blokują to domyślnie, więc może być konieczne skontaktowanie się z pomocą techniczną / złożenie zgłoszenia, aby to otworzyć.

Jakich narzędzi powinienem użyć do testowania najlepszych praktyk konfiguracji poczty e-mail i reputacji IP

Zajrzyj na nasze FAQ tutaj.