Administrare server open source

Platforma de hosting cu software liber, gratuit, open source.

Comentariile sunt închise pentru Cum blocam expedierea de mesaje false cu Exim

Pe serverele shared o problema mare o reprezinta mesajele cu expeditor falsificat. De obicei aceste mesaje sunt trimise de cei care se ocupa de spam sau phishing, dar se pot intalni si cazuri in care mesajele sunt falsificate fara rea intentie – ex. un utilizator vrea sa primeasca rapoarte pe mail, dar injecteaza un header „From: [email protected]” pentru ca mesajul sa para a fi trimis de pe una din adresele personale.

Spun ca aceste mesaje reprezinta o problema pentru ca nu de putine ori sunt marcate ca spam de filtrele antispam de pe serverul destinatar. De exemplu, daca un utilizator incearca sa trimita un mesaj cu headerul modificat pentru a aparea ca fiind trimis de la adresa [email protected] iar inregistrarea SPF de la gmail.com nu mentioneaza IP-ul expeditor ca fiind autorizat mesajul va fi blocat la destinatie de catre filtrul antispam, sau cel putin va primi un spam score mare datorita acestei nereguli. Astfel de practici pot duce in timp la refuzul pe serverul destinatar a mesajelor din partea serverului expeditor care trimite multe mesaje cu asemenea nereguli.

In Exim exista posibilitatea sa facem verificari la nivel de header pentru a preveni astfel de situatii. Pentru asta va trebui sa cream un fisier care va contine regulile de filtrare, fisier care va fi mentionat in fisierul de configurare (exim.conf) prin directiva system_filter. De exemplu, in fisierul /etc/exim.conf de pe un server cu cPanel putem gasi urmatoarea linie:

system_filter=/etc/cpanel_exim_system_filter

In cazul de fata directiva system_filter ne spune ca Exim va verifica regulile din fisierul /etc/cpanel_exim_system_filter de fiecare data cand un mesaj este trimis sau primit.

Revenind la subiect, filtrarea se face adaugand in fisierul /etc/cpanel_exim_system_filter urmatoarele linii:

logfile /var/log/reject.log 0644
if      (
         $received_protocol is "local"          or
         $received_protocol is "esmtpa"
        ) and (
        $header_from contains "@hotmail.com" or
        $header_from contains "@yahoo.com" or
        $header_from contains "@gmail.com" or
        $header_from contains "@twitter.com" or
        $header_from contains "@aol.com"
)
  then
     logwrite "$tod_log Mesajul $message_id de la $sender_address a fost blocat."
     seen finish
  endif

Pe prima linie mentionam fisierul in care dorim sa se salveze un mesaj de eroare. In cazul nostru mesajul de eroare va fi salvat in fisierul /var/log/reject.log iar daca acesta nu exista va fi creat cu permisiuni 644.

Dupa setarea fisierului pentru log verificam variabila $received_protocol care trebuie sa contina local sau esmtpa pentru a ne asigura ca sunt blocate doar mesajele care pleaca de pe server, nu si cele care vin.

Impreuna cu regula de verificare a protocolului se verifica si variabila $header_from care va contine adresa de mail a expeditorului, cea care poate fi falsificata dupa cum am mentionat mai sus, injectand un header de genul From: [email protected]. Variabila $header_from este verificata pentru fiecare expeditor care dorim sa il filtram (ex. yahoo.com, gmail.com etc.).

Daca se intampla ca cele doua conditii (expedierea se face local si expeditorul e falsificat) sa fie indeplinite mesajul va fi blocat iar in fisierul /var/log/reject.log, mentionat de directiva logfile se va scrie mesajul: „$tod_log Mesajul $message_id de la $sender_address a fost blocat„. In mesajul de eroare salvat $tod_log va contine data si ora expedierii, $message_id va contine ID-ul mesajului dupa care il vom putea cauta in logurile Exim iar $sender_address va contine adresa mentionata ca fiind a expeditorului.

Mail

Comments are closed.