Un nod virgoOS poate găzdui e-mailul firmei: adrese pe propriul domeniu, căsuțe pe propriile discuri, fără licență pentru fiecare căsuță. Dintre toate lucrurile pe care le face un nod, acesta vă cere cel mai mult. Aveți de creat înregistrări DNS, de configurat un router, iar căsuțele se administrează din linia de comandă, nu cu mouse-ul.

Articolul le ia pe toate, în ordine. Exemplele folosesc example.com ca domeniu și 203.0.113.10 ca adresă IP publică. Înlocuiți-le cu ale dumneavoastră.

Înainte de orice: conexiunea la internet

E-mailul este singura aplicație la care conexiunea la internet hotărăște dacă poate funcționa sau nu. Verificați lucrurile de mai jos înainte să instalați ceva.

O adresă IP publică, numai a dumneavoastră. Celelalte servere de e-mail trebuie să ajungă direct la al dumneavoastră. În spatele CGNAT, unde furnizorul împarte o singură adresă între mai mulți clienți, nu au cum. Ghidul porturilor, în limba engleză, arată cum aflați ce fel de conexiune aveți.

Una statică. Înregistrările DNS de mai jos indică adresa dumneavoastră. Dacă ea se schimbă, e-mailurile nu mai ajung până când le corectați.

Portul 25 deschis în ambele sensuri. Mulți furnizori blochează portul 25 la ieșire pe conexiunile rezidențiale, ca să oprească spamul. Serverele de e-mail vorbesc între ele pe acest port și pe niciun altul. Întrebați furnizorul și cereți o conexiune business, dacă de asta este nevoie.

Reverse DNS. Adresa IP trebuie să se rezolve înapoi în mail.example.com. Această înregistrare, numită PTR, aparține celui care deține adresa, deci o poate seta doar furnizorul. Fără ea, marii furnizori de e-mail resping ce trimiteți sau îl pun în spam.

Dacă furnizorul nu vi le poate da pe toate patru, e-mailul găzduit pe propriul server nu este pentru această conexiune, și e mai bine să aflați acum.

E-mailul nu poate trece printr-un proxy

Nodul îl puteți administra de oriunde prin fleet, fără niciun port redirecționat. E-mailul nu funcționează așa. Prin fleet trece doar interfața de administrare, deci e-mailul trebuie să ajungă direct la nod, pe adresa dumneavoastră IP publică.

La fel stau lucrurile cu furnizorii de DNS care se oferă să vă treacă înregistrările printr-un proxy, cum face Cloudflare cu norul portocaliu. Un astfel de proxy transportă doar trafic web. O înregistrare mail trecută prin proxy duce la proxy, care nu primește e-mail. Lăsați toate înregistrările din acest articol pe „DNS only”.

Ce instalați

Aplicația MailServer din App center este docker-mailserver, pregătit pentru un nod. Primește și trimite e-mailuri (SMTP), păstrează căsuțele și le pune la dispoziția clienților de e-mail (IMAP), filtrează spamul cu Rspamd, scanează atașamentele cu ClamAV și blochează, cu fail2ban, adresele care tot încearcă parole. Alături rulează un mic resolver DNS propriu și un serviciu care le spune clienților de e-mail cum să se configureze.

Webmail nu există. Oamenii își citesc e-mailul într-un client: Thunderbird, Outlook, Apple Mail sau aplicația de e-mail de pe telefon.

Redirecționați porturile

În router, redirecționați către nod aceste porturi TCP:

Port Cine îl folosește
25 Celelalte servere de e-mail, când vă livrează mesaje
465 Clienții de e-mail, la trimitere, criptat de la început
587 Clienții de e-mail, la trimitere, cu STARTTLS
993 Clienții de e-mail, la citire (IMAP)
4190 Clienții de e-mail, pentru filtrele de pe server (Sieve)
80 și 443 Certificatele și paginile care configurează clienții de e-mail

Înregistrările DNS de creat mai întâi

Creați-le la furnizorul de DNS înainte de instalare, ca nodul să își poată obține certificatele imediat.

Tip Nume Valoare
A mail 203.0.113.10
MX @ mail.example.com, prioritate 10
CNAME imap mail.example.com
CNAME smtp mail.example.com
A autoconfig 203.0.113.10
A autodiscover 203.0.113.10
TXT @ mailconf=https://autoconfig.example.com/mail/config-v1.1.xml
SRV _imaps._tcp 0 0 993 mail.example.com
SRV _submission._tcp 0 0 587 mail.example.com
SRV _autodiscover._tcp 0 0 443 autodiscover.example.com

Se împart în trei grupe:

  • Unde ajunge e-mailul. Înregistrarea mail îi dă serverului de e-mail un nume, iar înregistrarea MX spune lumii că mesajele pentru @example.com i se livrează lui.
  • Nume pe care clienții de e-mail le ghicesc. Unii clienți încearcă singuri imap.example.com și smtp.example.com, așa că amândouă duc la serverul de e-mail. Certificatul este emis doar pentru mail.example.com, deci acesta rămâne numele pe care îl scrieți când configurați manual un client.
  • Cum își găsesc clienții de e-mail setările. Cele două nume cu auto, înregistrarea mailconf și cele trei înregistrări SRV sunt cele care configurează clienții de e-mail fără ca cineva să scrie numele vreunui server. Într-o valoare SRV, cele patru părți sunt prioritatea, ponderea, portul și serverul, iar cei mai mulți furnizori de DNS au câte un câmp pentru fiecare.

Nu adăugați o înregistrare AAAA (IPv6) pentru mail. Serverul de e-mail este configurat doar pentru IPv4.

Instalați aplicația

În App center, apăsați Install la MailServer. Formularul cere trei lucruri:

  • MX domain, domeniul în care se termină adresele: example.com. Serverul de e-mail va răspunde la mail.example.com.
  • Domain, domeniul nodului. Interfața filtrului de spam se deschide la numele rspamd de sub el, după autentificarea pe nod.
  • HTTPS certificate pentru această interfață.

Certificatul pentru mail.example.com vine întotdeauna de la Let’s Encrypt, de aceea portul 80 și înregistrarea mail trebuie să existe deja.

Unde se scriu comenzile

De aici încolo, totul se face cu comanda setup a serverului de e-mail, care rulează în containerul lui. Nu aveți nevoie de SSH pentru asta.

În Apps, deschideți MailServer. În Services apar trei containere. La cel numit mailserver, apăsați Terminal. Se deschide o linie de comandă în interiorul containerului, direct în browser, și acolo scrieți toate comenzile setup din acest articol.

Promptul arată așa: root@mail:/#. Scrisă singură, setup afișează tot ce știe să facă. Prescurtată, lista arată astfel:

Terminalul containerului mailserver, deschis din detaliile aplicației MailServer, după ce a fost scrisă comanda setup, cu lista completă a lucrurilor pe care le poate face comanda.

root@mail:/# setup
SETUP(1)

NAME
    setup - 'docker-mailserver' Administration & Configuration CLI

[SUB]COMMANDS
    COMMAND email :=
        setup email add <EMAIL ADDRESS> [<PASSWORD>]
        setup email update <EMAIL ADDRESS> [<PASSWORD>]
        setup email del [ OPTIONS... ] <EMAIL ADDRESS> [ <EMAIL ADDRESS>... ]
        setup email restrict <add|del|list> <send|receive> [<EMAIL ADDRESS>]
        setup email list

    COMMAND alias :=
        setup alias add <EMAIL ADDRESS> <RECIPIENT>
        setup alias del <EMAIL ADDRESS> <RECIPIENT>
        setup alias list

    COMMAND quota :=
        setup quota set <EMAIL ADDRESS> [<QUOTA>]
        setup quota del <EMAIL ADDRESS>

    COMMAND config :=
        setup config dkim [ ARGUMENTS... ]

    COMMAND relay :=
        setup relay add-auth <DOMAIN> <USERNAME> [<PASSWORD>]
        setup relay add-domain <DOMAIN> <HOST> [<PORT>]
        setup relay exclude-domain <DOMAIN>

    COMMAND fail2ban :=
        setup fail2ban
        setup fail2ban ban <IP>
        setup fail2ban unban <IP>
        setup fail2ban log
        setup fail2ban status

Ce modifică aceste comenzi se păstrează împreună cu datele aplicației, pe pool-ul de stocare, deci rămâne și după actualizări.

Adăugați prima căsuță, repede

Un server de e-mail abia instalat nu are niciun cont și nu își termină pornirea fără unul. Așteaptă două minute, apoi se oprește și este pornit din nou. Prima comandă are, așadar, un termen:

setup email add olivia@example.com

Vă cere parola, de două ori. Dacă terminalul se închide înainte să terminați, containerul a repornit: apăsați din nou Terminal și reluați.

Generați cheia DKIM

DKIM semnează fiecare mesaj trimis, astfel încât serverul care îl primește să poată verifica că vine într-adevăr de pe domeniul dumneavoastră. Cheia se generează pe nod, o singură dată, după ce există prima căsuță:

setup config dkim

Comanda afișează conținutul înregistrării DNS pe care trebuie să o creați, un rând lung care începe cu v=DKIM1; k=rsa; p=. Copiați-l. Este și salvat, în caz că vă trebuie mai târziu:

cat /tmp/docker-mailserver/rspamd/dkim/rsa-2048-mail-example.com.public.dns.txt

Filtrul de spam preia cheia singur. Nu trebuie repornit nimic.

Înregistrările DNS care fac e-mailul de încredere

Încă trei înregistrări TXT și lista este completă: treisprezece înregistrări la furnizorul de DNS, plus înregistrarea reverse DNS de la furnizorul de internet.

Tip Nume Valoare
TXT mail._domainkey rândul afișat de setup config dkim
TXT @ v=spf1 mx ~all
TXT _dmarc v=DMARC1; p=none; rua=mailto:postmaster@example.com
  • DKIM publică jumătatea publică a cheii abia generate. Valoarea are peste 255 de caractere, cât încape cel mult într-o singură bucată a unei înregistrări TXT. Cei mai mulți furnizori de DNS o împart singuri. Dacă al dumneavoastră o refuză, împărțiți-o în mai multe bucăți puse între ghilimele.
  • SPF spune ce servere au voie să trimită e-mail pentru domeniu. mx înseamnă cele din înregistrarea MX, adică nodul dumneavoastră.
  • DMARC le spune destinatarilor ce să facă cu mesajele care pică ambele verificări și unde să trimită rapoarte. p=none cere doar rapoarte. După ce vedeți că mesajele dumneavoastră trec, schimbați în p=quarantine.

Rapoartele DMARC ajung la postmaster@example.com, la fel ca notificările serverului. Faceți ca această adresă să ducă într-o căsuță reală:

setup alias add postmaster@example.com olivia@example.com

Verificați ce ați făcut

De pe orice calculator, întrebați DNS-ul ce vede acum lumea:

dig +short MX example.com
dig +short TXT example.com
dig +short TXT mail._domainkey.example.com
dig +short TXT _dmarc.example.com
dig +short SRV _imaps._tcp.example.com
dig +short -x 203.0.113.10

Ultima este căutarea inversă și trebuie să răspundă mail.example.com.

Apoi trimiteți un mesaj la o adresă de la unul dintre marii furnizori și uitați-vă acolo la antetele lui. Gmail le arată la Show original, cu SPF, DKIM și DMARC marcate fiecare ca trecut sau picat. Toate trei trebuie să treacă înainte ca cineva să se bazeze pe server.

Configurarea clienților de e-mail

Nodul le spune clienților de e-mail care sunt setările, așa că în cei mai mulți omul își scrie numele, adresa și parola, și atât.

  • Thunderbird caută singur setările la autoconfig.example.com.
  • Outlook întreabă la autodiscover.example.com. Cât de bine merge depinde de versiunea de Outlook, așa că țineți la îndemână setările manuale.
  • iPhone, iPad și Apple Mail folosesc un profil de configurare. Deschideți https://autodiscover.example.com pe dispozitiv. Pagina are un formular care generează profilul pentru o adresă, iar profilul se instalează apoi din setările dispozitivului.

Tot la https://autodiscover.example.com îi trimiteți pe cei care s-au împotmolit: pagina arată setările pentru configurarea manuală.

Pentru orice client care nu găsește nimic singur, setările sunt acestea:

Server Port Securitate
Primire (IMAP) mail.example.com 993 SSL/TLS
Trimitere (SMTP) mail.example.com 465 SSL/TLS

Numele de utilizator este adresa de e-mail întreagă, iar parola este cea dată la setup email add. Pentru clienții care țin la STARTTLS la trimitere, folosiți portul 587.

Zi de zi

Tot ce urmează se scrie în același loc, în Terminal, la containerul mailserver.

Adăugarea unei căsuțe

setup email add <address> [password]
Argument Obligatoriu Descriere
<address> Da Adresa de e-mail întreagă a noii căsuțe
[password] Nu Parola ei. Dacă lipsește, comanda o cere, iar parola nu rămâne în istoricul terminalului

Schimbarea parolei unei căsuțe

setup email update <address> [password]
Argument Obligatoriu Descriere
<address> Da Căsuța a cărei parolă se schimbă
[password] Nu Parola nouă. Dacă lipsește, comanda o cere

Ștergerea unei căsuțe

Odată cu căsuța dispar și aliasurile și limita ei.

setup email del [options] <address>
Opțiune Obligatoriu Descriere
<address> Da Căsuța de șters. Pot fi date mai multe deodată
-y Nu Șterge și mesajele omului, fără să întrebe
-n Nu Păstrează mesajele omului, fără să întrebe

Fără niciuna dintre opțiuni, comanda întreabă dacă să șteargă și mesajele, deci un cont poate fi închis cu mesajele păstrate.

Lista căsuțelor

setup email list

Adăugarea unui alias

Un alias este o adresă fără căsuță proprie.

setup alias add <alias> <recipient>
Argument Obligatoriu Descriere
<alias> Da Adresa la care scriu oamenii, de exemplu office@example.com
<recipient> Da Căsuța care îi primește mesajele

Adăugați același alias câte o dată pentru fiecare om și toți îi primesc mesajele.

Scoaterea cuiva dintr-un alias

setup alias del <alias> <recipient>
Argument Obligatoriu Descriere
<alias> Da Aliasul
<recipient> Da Căsuța care nu îi mai primește mesajele

Lista aliasurilor

Lista arată unde livrează fiecare alias.

setup alias list

Limitarea mărimii unei căsuțe

setup quota set <address> [quota]
Argument Obligatoriu Descriere
<address> Da Căsuța de limitat
[quota] Nu Limita, cu unitate, de exemplu 500M sau 5G. 0 înseamnă fără limită. Dacă lipsește, comanda o cere

Fără o limită proprie, o căsuță poate ajunge până la 30 GB.

Eliminarea limitei unei căsuțe

setup quota del <address>
Argument Obligatoriu Descriere
<address> Da Căsuța care revine la limita implicită

Generarea cheii DKIM

Comanda afișează și înregistrarea DNS a cheii.

setup config dkim [options]
Opțiune Obligatoriu Descriere
domain <name> Nu Domeniul pentru care se generează cheia. Implicit, cel dat la instalare
selector <name> Nu Numele sub care se publică înregistrarea, în fața lui ._domainkey. Implicit, mail
keytype <type> Nu rsa sau ed25519. Implicit, rsa
keysize <bits> Nu 1024, 2048 sau 4096, pentru chei rsa. Implicit, 2048
-f Nu Înlocuiește o cheie care există deja

Lista adreselor blocate

setup fail2ban

Ridicarea unei blocări

setup fail2ban unban <ip>
Argument Obligatoriu Descriere
<ip> Da Adresa de deblocat

Blocarea manuală a unei adrese

setup fail2ban ban <ip>
Argument Obligatoriu Descriere
<ip> Da Adresa de blocat

De ce a fost blocată o adresă

Comanda afișează istoricul autentificărilor eșuate și al blocărilor.

setup fail2ban log

Trimiterea printr-un serviciu de relay

E-mailul trimis de pe un domeniu pleacă apoi prin acel serviciu.

setup relay add-domain <domain> <host> [port]
Argument Obligatoriu Descriere
<domain> Da Domeniul dumneavoastră de e-mail, de exemplu example.com
<host> Da Serverul serviciului de relay
[port] Nu Portul pe care ascultă serviciul de relay

Datele de autentificare la serviciul de relay

setup relay add-auth <domain> <username> [password]
Argument Obligatoriu Descriere
<domain> Da Domeniul dumneavoastră de e-mail
<username> Da Utilizatorul primit de la serviciul de relay
[password] Nu Parola lui. Dacă lipsește, comanda o cere

Orice comandă se explică singură dacă îi adăugați help, de exemplu setup email add help.

Deblocarea unei adrese

Serverul de e-mail blochează o adresă IP după șase autentificări greșite în decurs de o săptămână, iar blocarea ține o săptămână. Ea acoperă toate porturile de e-mail, așa că pentru omul din spatele acelei adrese e-mailul pur și simplu se oprește: clientul nu se mai poate conecta deloc, nici măcar cu parola corectă. De obicei, de vină este un telefon sau un laptop care a tot încercat o parolă veche după ce aceasta a fost schimbată.

Blocată este adresa, nu contul. Toți cei care folosesc aceeași conexiune rămân pe dinafară odată cu el, iar același om își poate citi în continuare e-mailul de pe altă conexiune, de exemplu de pe datele mobile.

Mai întâi aflați adresa. În Terminal, la containerul mailserver, afișați ce este blocat:

root@mail:/# setup fail2ban
Banned in dovecot: 198.51.100.7

Dacă nu este blocat nimic, comanda vă spune asta, iar problema este în altă parte. Când în listă sunt mai multe adrese, trebuie să știți care este a lui: rugați-l să deschidă un site precum ipinfo.io de pe conexiunea care nu mai merge și să vă citească adresa afișată.

Apoi rezolvați cauza, altfel blocarea revine imediat: puneți parola corectă în clientul de e-mail de pe toate dispozitivele omului.

Acum deblocați adresa:

setup fail2ban unban 198.51.100.7

Are efect pe loc, iar dacă rulați din nou setup fail2ban, adresa nu mai apare în listă. Ca să vedeți ce a dus la o blocare, setup fail2ban log afișează istoricul încercărilor eșuate și al blocărilor.

Sfaturi

  • Dacă furnizorul blochează portul 25 la ieșire și nu vrea să îl deschidă, serverul poate trimite printr-un serviciu de relay și primi în continuare direct. setup relay add-domain example.com smtp.relay.example 587 stabilește relay-ul, iar setup relay add-auth example.com <utilizator> datele lui de autentificare.
  • Învățați filtrul de spam. Când mutați un mesaj în Junk, filtrul învață că astfel de mesaje sunt spam, iar când mutați unul din Junk în inbox, învață contrariul. Filtrul învață pentru toată lumea deodată, deci un om atent îi ajută pe toți ceilalți.
  • Uitați-vă întâi în loguri. Când un mesaj nu ajunge, Logs de la containerul mailserver spune de obicei de ce, cu vorbele serverului care l-a refuzat.
  • Păstrați o copie a înregistrărilor DNS. Dacă schimbați vreodată furnizorul de DNS, trebuie create din nou toate, inclusiv DKIM.
  • Căsuțele sunt în snapshoturi. E-mailul stă pe pool-ul de stocare, împreună cu restul datelor aplicației, deci face parte din același istoric ca tot ce este pe nod.

La ce să fiți atenți

  • Oamenii nu se pot ajuta singuri. Nimeni nu își poate schimba singur parola. O schimbați dumneavoastră, cu setup email update.
  • Fiecare trimite în nume propriu. Un om poate trimite doar de pe adresa lui sau de pe un alias care îi livrează lui. Un client setat să trimită în numele altcuiva este refuzat.
  • Unele mesaje ajung cu întârziere prima dată. Filtrul de spam amână mesajele care i se par suspecte (greylisting): îi cere serverului expeditor să încerce din nou mai târziu. Serverele legitime o fac, așa că mesajul ajunge ceva mai târziu.
  • Un mesaj poate avea cel mult 25 MB. Atașamentele cresc cu aproximativ o treime la trimitere, deci în practică un fișier poate avea în jur de 18 MB.
  • Parolele greșite duc la blocare. Un telefon care tot încearcă o parolă veche ajunge blocat de fail2ban, iar e-mailul nu mai merge de pe acea conexiune până când o deblocați.
  • Când nodul este oprit, e-mailul așteaptă. Serverele expeditoare mai încearcă o vreme, de obicei câteva zile, apoi renunță. Nu există un al doilea server care să preia, deci o întrerupere lungă înseamnă mesaje întoarse la expeditor.
  • Un server nou nu are reputație. În primele săptămâni, marii furnizori vă pot pune mesajele în spam chiar dacă toate verificările trec. Lucrurile se îndreaptă pe măsură ce oamenii vă primesc mesajele și vă răspund.
  • Aplicația este făcută pentru un singur domeniu. Puteți adăuga căsuțe pe un al doilea domeniu, dar semnarea DKIM pentru el se configurează manual, iar clienții de e-mail se configurează automat doar pentru primul.

Merită?

Pentru o firmă care păstrează corespondența confidențială a altora, e-mailul pe propriile discuri merită o după-amiază de înregistrări DNS. Pentru o conexiune care nu poate oferi adresă statică, portul 25 deschis și reverse DNS, nu merită, și nicio configurare nu schimbă asta.

Ce urmează