Önállóan hosztolt

Első lépések

Az önállóan hosztolt email megoldásunk, mint minden termékünk, 100%-ban nyílt forráskódú — mind frontend, mind backend tekintetében. Ez azt jelenti:

  1. Teljes átláthatóság: Minden egyes kódsor, amely az emailjeidet feldolgozza, nyilvánosan megtekinthető
  2. Közösségi hozzájárulások: Bárki hozzájárulhat fejlesztésekkel vagy hibajavításokkal
  3. Biztonság a nyitottság által: A sebezhetőségek globális közösség által azonosíthatók és javíthatók
  4. Nincs szolgáltatófüggőség: Soha nem vagyunk a cégünk létezésétől függő helyzetben

Az egész kódbázis elérhető a GitHubon a https://github.com/forwardemail/forwardemail.net címen, MIT licenc alatt.

Az architektúra tartalmaz konténereket:

  • SMTP szerver a kimenő levelekhez
  • IMAP/POP3 szerverek az emailek lekéréséhez
  • Webes felület az adminisztrációhoz
  • Adatbázis a konfiguráció tárolásához
  • Redis a gyorsítótárazáshoz és teljesítményhez
  • SQLite a biztonságos, titkosított postaláda tároláshoz

Note

Feltétlenül nézd meg a önállóan hosztolt blogunkat

És azoknak, akik részletesebb, lépésről lépésre útmutatót szeretnének, ajánljuk az Ubuntu vagy Debian alapú útmutatóinkat.

Követelmények

A telepítő script futtatása előtt győződj meg a következőkről:

  • Operációs rendszer: Linux alapú szerver (jelenleg Ubuntu 22.04+ támogatott).
  • Erőforrások: 1 vCPU és 2GB RAM
  • Root hozzáférés: Adminisztrátori jogosultságok a parancsok végrehajtásához.
  • Domain név: Egy egyedi domain, amely készen áll a DNS konfigurációra.
  • Tiszta IP: Győződj meg róla, hogy a szervered IP címe tiszta, nincs spam előélete, ezt ellenőrizheted feketelistákon. További info itt.
  • Nyilvános IP cím port 25 támogatással
  • Képes vagy beállítani fordított PTR rekordot
  • IPv4 és IPv6 támogatás

Cloud-init / User-data

A legtöbb felhőszolgáltató támogatja a cloud-init konfigurációt, amely a virtuális privát szerver (VPS) előkészítésekor használható. Ez nagyszerű mód arra, hogy előre beállíts fájlokat és környezeti változókat, amelyeket a script kezdeti beállítási logikája használ, így a script futása közben nem kell további információkat bekérni.

Opciók

  • EMAIL - az email cím, amelyet a certbot lejárati emlékeztetőkhöz használ
  • DOMAIN - egyedi domain (pl. example.com), amelyet az önálló hosztolás beállításához használsz
  • AUTH_BASIC_USERNAME - felhasználónév, amelyet az első beállításkor a webhely védelmére használsz
  • AUTH_BASIC_PASSWORD - jelszó, amelyet az első beállításkor a webhely védelmére használsz
  • /root/.cloudflare.ini - (csak Cloudflare felhasználóknak) a certbot által DNS konfigurációhoz használt cloudflare konfigurációs fájl. Ehhez be kell állítanod az API tokent a dns_cloudflare_api_token segítségével. További információ itt. Példa:
#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

Telepítés

Futtassa a következő parancsot a szerverén az installációs szkript letöltéséhez és végrehajtásához:

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

Hibakeresés telepítő szkripttel

Adja hozzá a DEBUG=true előtagot az installációs szkript elé a részletes kimenethez:

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

Kérdések

1. Kezdeti beállítás
2. Biztonsági mentések beállítása
3. Automatikus frissítések beállítása
4. Tanúsítványok megújítása
5. Visszaállítás biztonsági mentésből
6. Segítség
7. Kilépés
  • Kezdeti beállítás: Letölti a legfrissebb forward email kódot, konfigurálja a környezetet, bekéri az egyedi domain nevét, és beállítja az összes szükséges tanúsítványt, kulcsot és titkot.
  • Biztonsági mentés beállítása: Beállít egy cron-t a mongoDB és redis biztonsági mentéséhez egy S3-kompatibilis tároló használatával a biztonságos, távoli tároláshoz. Külön-külön az sqlite is mentésre kerül bejelentkezéskor, ha történt változás, a biztonságos, titkosított mentések érdekében.
  • Frissítés beállítása: Beállít egy cron-t az éjszakai frissítések keresésére, amelyek biztonságosan újraépítik és újraindítják az infrastruktúra komponenseit.
  • Tanúsítványok megújítása: A Certbot / lets encrypt SSL tanúsítványokat és kulcsokat kezel, amelyek 3 havonta lejárnak. Ez megújítja a domain tanúsítványait, és elhelyezi azokat a szükséges mappában, hogy a kapcsolódó komponensek használhassák. Lásd fontos fájl elérési útvonalak
  • Visszaállítás biztonsági mentésből: Elindítja a mongodb és redis visszaállítását a mentett adatokból.

Kezdeti beállítás (1. opció)

Válassza az 1. Kezdeti beállítás opciót a kezdéshez.

A befejezés után sikerüzenetet kell látnia. Futtathatja a docker ps parancsot is, hogy lássa az elindított komponenseket. További információk a komponensekről lentebb.

Szolgáltatások

Szolgáltatás neve Alapértelmezett port Leírás
Web 443 Webes felület az összes adminisztrációs művelethez
API 4000 API réteg az adatbázisok absztrakciójához
Bree Nincs Háttérfeladat és munkafuttató
SMTP 465 (ajánlott) / 587 SMTP szerver a kimenő levelekhez
SMTP Bree Nincs SMTP háttérfeladat
MX 2525 Levelező szerver bejövő levelekhez és továbbításhoz
IMAP 993/2993 IMAP szerver bejövő levelekhez és postaláda kezeléshez
POP3 995/2995 POP3 szerver bejövő levelekhez és postaláda kezeléshez
SQLite 3456 SQLite szerver az sqlite adatbázis(ok) kezeléséhez
SQLite Bree Nincs SQLite háttérfeladat
CalDAV 5000 CalDAV szerver naptárkezeléshez
CardDAV 6000 CardDAV szerver névjegykezeléshez
MongoDB 27017 MongoDB adatbázis a legtöbb adat kezeléséhez
Redis 6379 Redis gyorsítótárazáshoz és állapotkezeléshez
SQLite Nincs SQLite adatbázis(ok) titkosított postaládákhoz

Fontos fájl elérési útvonalak

Megjegyzés: Az Host path alább a /root/forwardemail.net/self-hosting/-hez viszonyított útvonal.

Komponens Host útvonal Konténer útvonal
MongoDB ./mongo-backups /backups
Redis ./redis-data /data
Sqlite ./sqlite-data /mnt/{SQLITE_STORAGE_PATH}
Env fájl ./.env /app/.env
SSL tanúsítványok/kulcsok ./ssl /app/ssl/
Privát kulcs ./ssl/privkey.pem /app/ssl/privkey.pem
Teljes lánc tanúsítvány ./ssl/fullchain.pem /app/ssl/fullchain.pem
CA tanúsítvány ./ssl/cert.pem /app/ssl/cert.pem
DKIM privát kulcs ./ssl/dkim.key /app/ssl/dkim.key

Important

Mentse biztonságosan a .env fájlt. Kritikus a helyreállításhoz hiba esetén. Ezt megtalálja a /root/forwardemail.net/self-hosting/.env útvonalon.

Konfiguráció

Kezdeti DNS beállítás

A választott DNS szolgáltatójánál állítsa be a megfelelő DNS rekordokat. Vegye figyelembe, hogy a zárójelben lévő (<>) érték dinamikus, és a saját értékére kell cserélni.

Típus Név Tartalom TTL
A "@", ".", vagy üres <ip_address> auto
CNAME api <domain_name> auto
CNAME caldav <domain_name> auto
CNAME carddav <domain_name> auto
CNAME fe-bounces <domain_name> auto
CNAME imap <domain_name> auto
CNAME mx <domain_name> auto
CNAME pop3 <domain_name> auto
CNAME smtp <domain_name> auto
MX "@", ".", vagy üres mx.<domain_name> (prioritás 0) auto
TXT "@", ".", vagy üres "v=spf1 a -all" auto

Fordított DNS / PTR rekord

A fordított DNS (rDNS) vagy fordított mutató rekordok (PTR rekordok) elengedhetetlenek az e-mail szerverek számára, mert segítenek ellenőrizni az e-mailt küldő szerver hitelességét. Minden felhőszolgáltató másképp kezeli ezt, ezért meg kell néznie, hogyan lehet hozzáadni a "Fordított DNS"-t, hogy a hoszt és az IP a megfelelő hosztnévhez legyen társítva. Valószínűleg a szolgáltató hálózati szekciójában található.

25-ös port blokkolva

Néhány internetszolgáltató és felhőszolgáltató blokkolja a 25-ös portot a rosszindulatú felhasználók elkerülése érdekében. Előfordulhat, hogy támogatási jegyet kell benyújtania a 25-ös port megnyitásához SMTP / kimenő e-mailhez.

Bevezetés

  1. Nyissa meg a kezdőlapot
    Navigáljon a https://<domain_name> címre, ahol a <domain_name> helyére a DNS beállításokban megadott domaint írja. Meg kell jelennie a Forward Email kezdőlapjának.

  2. Jelentkezzen be és regisztrálja a domainjét

  • Jelentkezzen be érvényes e-mail címmel és jelszóval.
  • Adja meg a beállítani kívánt domain nevet (ennek meg kell egyeznie a DNS konfigurációval).
  • Kövesse az utasításokat a szükséges MX és TXT rekordok hozzáadásához az ellenőrzéshez.
  1. Befejezés
  • Az ellenőrzés után lépjen az Aliases oldalra az első alias létrehozásához.
  • Opcionálisan állítsa be az SMTP-t a kimenő e-mailekhez a Domain beállítások között. Ehhez további DNS rekordok szükségesek.

Note

Semmilyen információ nem kerül ki a szerveréről. Az önállóan hosztolt opció és az első fiók csak az admin bejelentkezéshez és a webes felülethez szükséges a domainek, aliasok és kapcsolódó e-mail beállítások kezeléséhez.

Tesztelés

Első alias létrehozása

  1. Navigáljon az Aliasok oldalra
    Nyissa meg az alias kezelő oldalt:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
  1. Új alias hozzáadása
  • Kattintson az Alias hozzáadása gombra (jobb felső sarok).
  • Adja meg az alias nevét és állítsa be az e-mail beállításokat szükség szerint.
  • (Opcionális) Engedélyezze az IMAP/POP3/CalDAV/CardDAV támogatást a jelölőnégyzet bejelölésével.
  • Kattintson az Alias létrehozása gombra.
  1. Jelszó beállítása
  • Kattintson a Jelszó generálása gombra egy biztonságos jelszó létrehozásához.
  • Ez a jelszó szükséges lesz az e-mail kliensbe való bejelentkezéshez.
  1. E-mail kliens beállítása
  • Használjon olyan e-mail klienst, mint a Thunderbird.
  • Adja meg az alias nevet és a generált jelszót.
  • Állítsa be az IMAP és SMTP beállításokat ennek megfelelően.

E-mail szerver beállítások

Felhasználónév: <alias name>

Típus Hosztnév Port Kapcsolat biztonsága Hitelesítés
SMTP smtp.<domain_name> 465 SSL / TLS Normál jelszó
IMAP imap.<domain_name> 993 SSL / TLS Normál jelszó

Első e-mail küldése / fogadása

A beállítás után képesnek kell lennie arra, hogy küldjön és fogadjon e-maileket az újonnan létrehozott és önállóan hosztolt e-mail címére!

Hibakeresés

Miért nem működik ez Ubuntu és Debian rendszereken kívül?

Jelenleg a MacOS támogatásán dolgozunk, és más rendszerek felé is nyitottak vagyunk. Kérjük, nyisson egy beszélgetést vagy járuljon hozzá, ha szeretné, hogy más rendszerek is támogatottak legyenek.

Miért sikertelen a certbot acme kihívás

A leggyakoribb buktató, hogy a certbot / letsencrypt néha 2 kihívást kér. Biztosnak kell lennie abban, hogy MINDKÉT txt rekordot hozzáadja.

Példa: Lehet, hogy két kihívást lát így: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"

Az is előfordulhat, hogy a DNS propagáció még nem fejeződött be. Használhat olyan eszközöket, mint: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>. Ez megmutatja, hogy a TXT rekord változásai tükröződnek-e már. Az is lehetséges, hogy a helyi DNS gyorsítótár a gazdagépen még egy régi, elavult értéket használ, vagy még nem vette át a legutóbbi változásokat.

Egy másik lehetőség az automatikus certbot DNS változtatások használata a /root/.cloudflare.ini fájl beállításával az api tokennel a cloud-init / user-data-ban az első VPS beállításkor, vagy hozza létre ezt a fájlt és futtassa újra a szkriptet. Ez automatikusan kezeli a DNS változtatásokat és a kihívás frissítéseket.

Mi az alapértelmezett felhasználónév és jelszó a basic auth-hoz?

Önmagunk általi hosztolás esetén egy első alkalommal megjelenő böngésző natív hitelesítési felugró ablakot adunk hozzá egyszerű felhasználónévvel (admin) és jelszóval (ami az első beállításkor véletlenszerűen generálódik). Ezt védelemként adjuk hozzá arra az esetre, ha az automatizálás / adatgyűjtők valahogy megelőznének az első webes regisztrációnál. Ezt a jelszót az első beállítás után megtalálja a .env fájlban az AUTH_BASIC_USERNAME és AUTH_BASIC_PASSWORD alatt.

Hogyan tudom, mi fut éppen?

Futtassa a docker ps parancsot, hogy lássa az összes futó konténert, amely a docker-compose-self-hosting.yml fájlból indul. A docker ps -a parancsot is használhatja, hogy mindent lásson (beleértve a nem futó konténereket is).

Hogyan tudom, ha valami nem fut, pedig futnia kellene?

Futtassa a docker ps -a parancsot, hogy mindent lásson (beleértve a nem futó konténereket is). Láthat egy kilépési naplót vagy megjegyzést.

Hogyan találom meg a naplókat?

További naplókat a docker logs -f <container_name> paranccsal érhet el. Ha valami kilépett, valószínűleg a .env fájl helytelen konfigurációja okozza.

A webes felületen megtekintheti az /admin/emails és az /admin/logs oldalakat a kimenő e-mailek naplózásához és a hibák naplózásához.

Miért időzik ki a kimenő e-mailem?

Ha olyan üzenetet lát, hogy Connection timed out when connecting to MX server..., akkor ellenőriznie kell, hogy a 25-ös port nincs-e blokkolva. Gyakori, hogy az internetszolgáltatók vagy felhőszolgáltatók alapértelmezés szerint blokkolják ezt, ilyenkor támogatáshoz kell fordulni vagy jegyet kell nyitni a feloldáshoz.

Milyen eszközöket használjak az e-mail konfiguráció legjobb gyakorlatai és az IP hírnév teszteléséhez?

Nézze meg a GYIK-unkat itt.