mailcow securitate: oprește forța brută lentă și password spraying dincolo de fail2ban

Ghid practic pentru Security for mailcow: citește istoricul atacurilor, reglează cele 13 reguli pentru forță brută lentă, password spraying și cutii compromise și blochează prin netfilter-ul mailcow fără să te încui afară.

fail2ban-ul inclus în mailcow face un singur lucru bine: prinde atacurile cele mai zgomotoase. Zece autentificări eșuate în zece minute aduc o blocare de treizeci de minute. Apoi le uită.

Tot ce e mai discret trece mai departe. O adresă care încearcă o parolă la câteva minute, toată ziua. Un botnet care își împarte încercările între sute de adrese, astfel încât niciuna să nu atingă pragul. Un scanner care parcurge webmail-ul căutând /.env sau wp-login.php. O cutie a cărei parolă a fost ghicită și care acum trimite spam. O protecție bună împotriva forței brute pe mailcow trebuie să vadă toate acestea, să le țină minte și să acționeze doar când îi spui tu.

Asta face Security for mailcow. Citește ce înregistrează deja mailcow, păstrează istoricul în baza de date a mailcow, aplică 13 reguli pentru ce scapă fail2ban-ului și blochează prin netfilter-ul propriu al mailcow — construit astfel încât să nu te poată încuia afară. Acest tutorial te duce de la instalare la o configurație reglată și automată.

Cerințe preliminare

Înainte să începi, verifică faptul că ai:

  • mailcow-dockerized pe Linux, cu docker compose și systemd.
  • mailcow Toolkit 0.6.0 sau mai nou — acest produs este unul dintre modulele pachetului, cu licență proprie.
  • Acces root pe gazdă pentru a rula install.sh.
  • HTTPS către exterior de pe server spre medialab.works pentru verificarea licenței.
  • Containerul netfilter al mailcow pornit — el aplică blocările. Dacă Manage external este activat în setările fail2ban ale mailcow, netfilter nu atinge firewall-ul, iar firewall-ul tău trebuie să aplice lista mailcow.
  • Opțional: un token Cloudflare cu Account → Account Firewall Access Rules → Edit și un token de bot Telegram, dacă vrei alerte pe Telegram.

Pasul 1 — Instalează Toolkit-ul și deschide System → Security

Pe gazda mailcow, ca root, rulează instalatorul Toolkit ca de obicei:

sudo ./install.sh --mailcow-dir /opt/mailcow-dockerized --name <instance>

Dacă rulezi deja Toolkit-ul, actualizează-l din System → Updates (Toolkit).

Instalatorul copiază data/web/mlw-security/, creează tabelele modulului în baza de date a mailcow, adaugă elementul de meniu și timer-ul o dată pe minut mlw-mailcow-security-<instance>.timer și reîncarcă php-fpm. Apoi deschide System → Security în meniul de administrare al mailcow.

Pasul 2 — Activează licența

Deschide System → Updates (Toolkit) și găsește cardul Security for mailcow: lipește cheia și activeaz-o, sau începe perioada de probă de 30 de zile. În shell, în interiorul php-fpm-mailcow:

php /web/mlw-toolkit/cli.php activate mailcow-security <KEY>

Fără o licență validă nu se citește, detectează, blochează sau trimite nimic — dar blocările existente se ridică totuși la expirare, iar nimic nu se șterge. Detalii găsești în ghidul de utilizare.

Pasul 3 — Înțelege ce se citește

Prima rulare importă ce mai păstrează mailcow în loguri (de obicei ultimele ore) și nu blochează și nu alertează. De atunci, jobul citește doar liniile noi, la fiecare minut, din sursele pe care mailcow le scrie deja:

  • dovecot — autentificări IMAP / POP3 / ManageSieve eșuate, cu numărul de încercări, conexiuni care nu se autentifică niciodată, autentificări reușite.
  • postfix — SMTP AUTH eșuat, trimiteri autentificate, respingeri rspamd și DNS blocklist, încercări de relay, probe de protocol.
  • SOGo — autentificări webmail eșuate și reușite.
  • fail2ban — fiecare blocare făcută de fail2ban-ul propriu al mailcow.
  • serverul web — răspunsuri 4xx, inclusiv căi de exploit cunoscute și alte 404-uri.
  • php-fpm — autentificări eșuate în interfața mailcow și în API.

Înregistrările adreselor private (containerele proprii ale mailcow, un reverse proxy în fața mailcow) și ale rețelelor pe care le ignori sunt eliminate. Istoricul se păstrează implicit 90 de zile. Dacă Overview → Status spune că s-au pierdut linii, mailcow și-a trunchiat logurile înainte să fie citite — mărește LOG_LINES în mailcow.conf.

Pasul 4 — Citește istoricul atacurilor

Mergi la Overview. Vezi totalurile ultimelor 24 de ore pe tipuri, un grafic pe 14 zile cu autentificări eșuate, scanări și spam pe zi, cele mai active adrese cu un buton Ban, cutiile țintite și incidentele active. Un scut roșu lângă meniul System arată incidentele grave deschise pe fiecare pagină de administrare, așa că le vei observa fără să le cauți.

Petrece câteva minute aici înainte să schimbi ceva. Îți spune dacă serverul tău vede mai ales zgomot de fundal sau o campanie reală.

Pasul 5 — Trece în revistă cele 13 reguli

Fiecare regulă numără înregistrări într-o fereastră glisantă și deschide un incident când pragul este atins. Cât timp atacul continuă, același incident este extins, nu repetat. Valorile implicite:

Regulă Numără Implicit
Forță brută pe login web autentificări SOGo / UI / API eșuate per adresă 5 în 15 min → blocare 24 h
Forță brută lentă autentificări eșuate per adresă într-o zi 20 în 24 h → blocare 24 h
Password spraying cutii distincte pe care a eșuat o adresă 5 în 60 min → blocare 7 zile
Recidivist blocări fail2ban ale mailcow pentru o adresă 3 în 7 zile → blocare 30 zile
Scanare de exploit-uri web cereri pentru căi de exploit / scurgeri 3 în 30 min → blocare 7 zile
Scanare 404 web răspunsuri 404 per adresă 40 în 30 min → alertă
Testare de relay „Relay access denied” per adresă 3 în 60 min → blocare 7 zile
Scanare de protocol conexiuni care nu se autentifică niciodată sau încalcă protocolul 30 în 60 min → alertă
Val de spam respingeri rspamd și blocklist per adresă 20 în 60 min → alertă
Cutie țintită eșecuri pe o cutie de la cel puțin 5 adrese 30 în 60 min → alertă
Vârf de trimiteri mesaje trimise de o cutie 300 în 60 min → alertă
Autentificări de la multe adrese adrese distincte de la care se autentifică o cutie 8 în 60 min → alertă
Autentificare după eșecuri o primă autentificare de la o adresă care a eșuat pe cutie 3 eșecuri în 24 h → alertă (critic)

În Rules poți opri fiecare regulă și modifica pragul, fereastra, acțiunea și durata blocării (0 = permanent). Regulile pe adrese pot alerta sau bloca; regulile pe cutii pot alerta, limita trimiterea sau opri autentificarea. Reset to defaults le readuce pe toate la valorile inițiale.

Ultimele patru rânduri sunt detecția cutiilor compromise: un vârf de trimiteri, autentificări de la multe adrese, eșecuri răspândite între multe adrese pe o singură cutie și — cea mai precisă — o autentificare de pe o adresă care a eșuat înainte pe cutia respectivă. Aceea este o parolă care probabil a fost ghicită.

Pasul 6 — Urmărește mai întâi în modul doar monitorizare

Comutatorul din partea de sus a secțiunii Rules este oprit la început. Fiecare incident spune ce s-ar fi făcut („would ban”). Lasă-l așa câteva zile, uită-te la incidente, ajustează pragurile, apoi pornește-l. Incidentele al căror atac încă continuă sunt tratate la rularea următoare.

Când treci în revistă incidentele, folosește False positive acolo unde e cazul: pune adresa pe lista de excepții și îi ridică blocările.

Pasul 7 — Pornește acțiunile automate

Cu acțiunile automate pornite, o blocare intră în denylist-ul fail2ban al mailcow pe durata regulii. Netfilter-ul mailcow o aplică pe fiecare port mailcow într-un minut și o vezi pe pagina Fail2ban a mailcow. Modulul o ridică la expirare; o blocare pe care o ștergi pe pagina Fail2ban a mailcow este considerată ridicată.

Niciodată blocate automat:

  • adresele private și rezervate;
  • lista de excepții a modulului (Settings) și lista de excepții fail2ban a mailcow (Configuration → Fail2ban);
  • adresele publice proprii ale serverului;
  • cu protect known addresses activat (implicit), adresele care s-au autentificat cu succes la o cutie în ultimele 30 de zile — astfel un coleg care greșește parola nu este blocat.

Pasul 8 — Acționează pe conturi prin mailcow însuși

Pentru o cutie care pare compromisă, acțiunile pe cont trec prin funcțiile proprii ale mailcow: disallow login (cutia primește în continuare mail), închiderea sesiunilor IMAP / POP3, cerința de schimbare a parolei, limitarea trimiterii. Poți face asta din vizualizarea unei singure adrese sau a unei singure cutii, care arată dintr-o privire eșecuri, autentificări, trimiteri, incidente și blocări. Fiecare acțiune — a ta sau a modulului — ajunge în jurnalul de audit.

Pasul 9 — Blocări manuale și Cloudflare

Bans arată blocările modulului (motiv, de către cine, până când, starea Cloudflare), blocările temporare proprii ale fail2ban-ului mailcow cu Lift sau Make it longer și restul denylist-ului mailcow. Formularul din partea de sus blochează o adresă sau o rețea (CIDR) de la 1 oră la 30 de zile, sau permanent; propria adresă curentă este refuzată.

Dacă interfața mailcow și webmail-ul sunt în spatele proxy-ului Cloudflare, atacurile web ajung la mailcow de la adresele Cloudflare și netfilter nu le poate opri. În Settings → Cloudflare, alege bans of the web rules and ticked manual bans sau every ban: fiecare blocare devine atunci și o regulă IP Access Cloudflare la nivel de cont, eliminată împreună cu blocarea.

Pasul 10 — Alerte

Setează alerte pe e-mail și Telegram de la severitatea pe care o alegi, cu o limită pe oră și, opțional, un rezumat zilnic. Alertele merg doar la adresa și în chat-ul pe care le configurezi. Tot restul — loguri, adrese, nume de cutii, istoric — rămâne în baza de date a mailcow și nu este trimis niciodată la medialab.works.

Încă un lucru de știut: când o vulnerabilitate gravă lovește PHP, nginx, SOGo sau altă componentă mailcow, un patch virtual poate veni odată cu verificarea licenței — o mitigare precisă, aplicată automat pentru cele critice. Reduce riscul până la actualizare; nu înlocuiește actualizarea.

Sfaturi și depanare

  • Blocările nu apar în firewall. Verifică faptul că containerul netfilter al mailcow rulează. Dacă Manage external este activat, netfilter lasă firewall-ul în pace, iar firewall-ul tău trebuie să aplice lista mailcow — pagina Bans te avertizează despre asta.
  • Te-ai încuiat afară. Adresa ta curentă este refuzată de formularul de blocare manuală, iar adresele cunoscute sunt protejate implicit. Dacă totuși ești prins, elimină blocarea pe pagina Fail2ban a mailcow — este considerată ridicată.
  • Prea multe alerte. Crește pragurile sau severitățile per regulă, sau bazează-te pe limita pe oră și pe rezumatul zilnic.
  • Atacurile web tot ajung. Dacă ești în spatele proxy-ului Cloudflare, configurează Cloudflare în Settings; netfilter singur nu poate vedea clientul real.
  • S-au pierdut linii. Mărește LOG_LINES în mailcow.conf pe un server foarte aglomerat.

Concluzie

fail2ban rămâne prima linie și ar trebui să-l păstrezi. Security for mailcow este a doua: un istoric ținut minte, 13 reguli pentru atacurile lente și distribuite, detecția cutiilor compromise și blocări care trec prin firewall-ul în care mailcow are deja încredere. Începe în modul doar monitorizare, urmărește câteva zile, apoi lasă-l să acționeze. Pagina produsului are lista de funcții, ghidul acoperă fiecare ecran, iar changelog-ul urmărește ce s-a schimbat. Dacă ceva nu se potrivește configurației tale, Bază de cunoștințe și FAQ sunt o bună oprire următoare, sau contactează-ne.

Postarea a fost scrisă cu ajutorul AI pe baza documentației produselor noastre sau a surselor indicate și verificată automat înainte de publicare.

Citește și

Ai un server Emby, Jellyfin sau Nextcloud?

Plugin-urile și aplicațiile noastre adaugă Live TV, subtitrări, înregistrare și securitate pe serverul tău, cu probă gratuită.