Antispam

Ghid de conectare

cPanel / WHM (Exim)

Exim, serverul de mail din cPanel, știe nativ să trimită mesajele la analiză. Nu se instalează nimic: adaugi câteva linii în editorul avansat din WHM. Durează ~10 minute.

Ce poate face fiecare. Legarea la filtru se face o singură dată, pe server, de administratorul cu acces root / WHM: un cont cPanel obișnuit nu poate modifica configurația Exim. Administratorul poate însă alege doar anumite conturi/domenii, iar fiecare cont decide singur, din cPanel, ce se întâmplă cu mesajele marcate.

1 Pregătire

2 Verifică dacă SpamAssassin e activ

grep -n 'spamd_address' /etc/exim.conf

3 Setarea globală

În WHM: Service Configuration → Exim Configuration Manager → Advanced Editor. În prima căsuță de text (opțiunile globale, înainte de begin acl) adaugă:

Varianta A — fără SpamAssassin

spamd_address = antispam.cbsoft.ro 11333 variant=rspamd retry=0s tmo=20s

Varianta B — cu SpamAssassin activ

Înlocuiește linia spamd_address existentă cu cea de mai jos. Dacă valoarea notată la pasul 2 nu era 127.0.0.1 783, pune valoarea ta în locul ei, la final:

spamd_address = ${if eq{$acl_m_antispam}{1}{antispam.cbsoft.ro 11333 variant=rspamd retry=0s tmo=20s}{127.0.0.1 783}}

Linia alege serverul de analiză în funcție de o variabilă pe care o setează doar regula noastră, așa că SpamAssassin continuă să funcționeze exact ca înainte.

4 Regula de analiză

Tot în Advanced Editor, coboară la secțiunea ACL. Alege una dintre cele două opțiuni.

Opțiunea 1 — pentru tot serverul

În prima căsuță personalizabilă a ACL-ului de DATA (blocul check_message, căsuța de la începutul lui, de obicei custom_begin_check_message), adaugă:

  warn  set acl_m_antispam = 1
  warn  spam       = antispam:true/defer_ok
        add_header = ${sg{${sg{$spam_report}{\N^Action: [^\n]*\n \N}{}}}{\N\n \N}{\n}}
  warn  set acl_m_antispam = 0
  deny  condition  = ${if eq{$spam_action}{reject}}
        message    = 5.7.1 Message rejected as spam

Opțiunea 2 — doar pentru anumite conturi / domenii

Potrivită când vrei să oferi filtrarea ca opțiune clienților sau s-o testezi întâi pe câteva conturi. Doar mesajele către domeniile din listă sunt trimise la analiză.

a) Creează lista de domenii, câte unul pe linie:

cat > /etc/antispam_domains <<'EOF'
domeniul-clientului.ro
alt-domeniu.ro
EOF
chmod 644 /etc/antispam_domains

Ca să vezi domeniile unui cont cPanel: grep ': utilizator$' /etc/userdomains. Fișierul se citește la fiecare mesaj: adăugarea sau ștergerea unui domeniu are efect imediat, fără restart.

b) În ACL-ul de RCPT (blocul check_recipient, căsuța de la început, de obicei custom_begin_recipient), adaugă:

  warn  domains = lsearch;/etc/antispam_domains
        set acl_m_antispam_on = 1

c) În ACL-ul de DATA (ca la opțiunea 1), adaugă:

  warn  condition  = ${if eq{$acl_m_antispam_on}{1}}
        set acl_m_antispam = 1
  warn  condition  = ${if eq{$acl_m_antispam_on}{1}}
        spam       = antispam:true/defer_ok
        add_header = ${sg{${sg{$spam_report}{\N^Action: [^\n]*\n \N}{}}}{\N\n \N}{\n}}
  warn  set acl_m_antispam = 0
  deny  condition  = ${if and{{eq{$acl_m_antispam_on}{1}}{eq{$spam_action}{reject}}}}
        message    = 5.7.1 Message rejected as spam

Un mesaj cu mai mulți destinatari e analizat dacă cel puțin unul are domeniul în listă.

Ce face fiecare linie
  • spam = antispam:true/defer_ok trimite mesajul la analiză. :true face ca headerele să fie adăugate indiferent de scor; /defer_ok face ca, dacă serviciul nu răspunde, mesajul să treacă normal (fără respingere temporară).
  • add_header adaugă headerele X-Antispam-* primite de la noi.
  • deny … reject respinge mesajul doar când serviciul răspunde reject, adică doar pentru servere sau domenii în modul enforce. În modul observe nu se declanșează niciodată.
  • acl_m_antispam comută spamd_address spre noi doar pe durata verificării noastre (varianta B); în varianta A nu strică.

5 Salvează și testează

  1. Apasă Save. WHM validează configurația, refuză salvarea dacă are erori și repornește Exim.
  2. Verifică manual:
    exim -bV | head -1
  3. Trimite din exterior (ex. Gmail) un mesaj către o căsuță de pe server. În sursa mesajului primit (în Roundcube: Mai multe → Arată sursa) trebuie să apară:
    X-Antispam-Status: ham; mode=observe
    X-Antispam-Score: 0.40 / 15.00
  4. Pentru un test de spam, trimite un mesaj care conține în corp:
    XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
    În modul observe ajunge cu X-Antispam-Action: reject; în enforce e respins.
  5. În log-ul Exim nu trebuie să apară erori de tipul spam acl condition:
    grep 'spam acl condition' /var/log/exim_mainlog | tail
    all spamd servers failed înseamnă că serverul nu ajunge la antispam.cbsoft.ro:11333 (firewall sau IP neînregistrat la noi). Mesajele trec oricum.

6 Pentru fiecare cont: mutarea spam-ului în folderul Spam

După trecerea pe enforce, mesajele de spam care nu sunt respinse primesc header-ul X-Spam: Yes. Fiecare titular de cont decide ce face cu ele, direct din cPanel, fără acces la server:

  1. cPanel → Email → Global Email Filters (pentru toate căsuțele contului) sau Email Filters (pentru o singură căsuță) → Create a New Filter.
  2. Nume: Antispam.
  3. Regulă: Any Header · contains · X-Spam: Yes.
  4. Acțiune: Deliver to Folder → INBOX.spam (sau Discard Message, dacă vrei ca spam-ul să fie șters).
  5. Salvează. Poți verifica regula cu butonul Test Filter, lipind headerul de mai sus.

Pentru reguli diferite pe domeniu — praguri proprii, expeditori care trebuie să treacă mereu sau să fie blocați mereu — scrie-ne domeniul și regulile dorite; se aplică imediat, fără nicio modificare pe server.

7 Dezactivare

Șterge din Advanced Editor liniile adăugate (și, la varianta B, readu spamd_address la valoarea inițială), apoi Save. Pentru opțiunea 2, poți dezactiva un singur domeniu ștergându-l din /etc/antispam_domains. Mail-ul funcționează normal pe toată durata modificărilor.