DMARC (Domain-based Message Authentication, Reporting, and Conformance) è un metodo standard per l'autenticazione delle email, che aiuta gli amministratori della posta a impedire che hacker e altri malintenzionati eseguano lo spoofing dell'organizzazione e del dominio Lo spoofing è un tipo di attacco che falsifica l'indirizzo nell'intestazione Da: di un messaggio email. Un messaggio contraffatto mediante lo spoofing sembra provenire dall'organizzazione o dal dominio la cui identità è stata rubata.
DMARC ti permette anche di richiedere rapporti dai server email che ricevono i messaggi dalla tua organizzazione o dal tuo dominio. I rapporti contengono informazioni utili per identificare possibili problemi di autenticazione e attività dannose nei messaggi inviati dal tuo dominio.
- Grazie a Iulian per il suggerimento. Questo un link alla sua pagina
- Ulteriori soluzioni DMARC per
qmail - MXtoolbox: per verificare il record DMARC
- RFC 4789 Domain-based Message Authentication, Reporting, and Conformance (DMARC)
- Spamassassin's SPF rules
- Spamassassin's DKIM rules
- MXtoolbox: DMARC report analyzer
Changelog
- 17 gennaio 2026
- aggiunto unhow perdmarc-srg(analizzatore di report DMARC)
Configurazione
E' possibile usare Spamassassin per applicare un filtro DMARC per mezzo del plugin AskDNS. E' sufficiente aggiungere quanto segue a 80-dmarc.cf:
cat > /etc/mail/spamassassin/80-dmarc.cf << EOF # DMARC ifplugin Mail::SpamAssassin::Plugin::AskDNS askdns __DMARC_POLICY_NONE _dmarc._AUTHORDOMAIN_ TXT /^v=DMARC1;.*\bp=none;/ askdns __DMARC_POLICY_QUAR _dmarc._AUTHORDOMAIN_ TXT /^v=DMARC1;.*\bp=quarantine;/ askdns __DMARC_POLICY_REJECT _dmarc._AUTHORDOMAIN_ TXT /^v=DMARC1;.*\bp=reject;/ meta DMARC_REJECT !(DKIM_VALID || SPF_PASS || SPF_HELO_PASS) && __DMARC_POLICY_REJECT score DMARC_REJECT 5 meta DMARC_QUAR !(DKIM_VALID || SPF_PASS || SPF_HELO_PASS) && __DMARC_POLICY_QUAR score DMARC_QUAR 2.5 meta DMARC_NONE !(DKIM_VALID || SPF_PASS || SPF_HELO_PASS) && __DMARC_POLICY_NONE score DMARC_NONE 0.1 endif # Mail::SpamAssassin::Plugin::AskDNS EOF
In questo modo un DMARC reject (p=reject nel record DNS) causerà un punteggio aggiuntivo di +5 nello spam score, DMARC quarantine (p=quarantine) un +2.5 aggiuntivo mentre p=none determinerà un +0.1.
Ecco come potrebbe poi essere impostato il proprio record DMARC nella zona bind:
_dmarc.yourdomain.tld. IN TXT "v=DMARC1;p=reject;sp=none;pct=100;rua=mailto:postmaster@yourdomain.tld"
Naturalmente ciò richiede che SPF e DKIM siano già settati e funzionanti come spiegato in precedenza.
Se si decide di impostare un analogo record DNS nella propria "DMZ view", è importante che si siano definite le proprie reti locali in spamassassin, ad esempio:
internal_networks 10.0.0/24
altrimenti i messaggi di sistema o anche alcuni messaggi generati da applicazioni web (per esempio) potrebbero essere rigettatio se non sono stati preventivamente firmati.
Installazione di un analizzatore di report DMARC
dmarc-srg è un parser php, visulalizzatore è generatore di report per i report DMARC in arrivo. Funziona recuperando via IMAP i report in formato XML da una specifica casella e memorizzando i dati in un database MySQL/MariaDB. Si può anche caricare a mano dei reports.

- MariaDB o MySQL
- PHP 8.1 o superiore
php-mbstring,php-mysql,php-xml,php-zip, ephp-jsonImapEngine(funziona viacomposer)
Installazione
I dati DMARC vengono salvati su database MySQL. Loggarsi come root al server MariaDB/MySQL usando la shell (mysql -u root -p) e creare il database e una nuova utenza chiamata dmarc per il nuovo database:
CREATE database dmarc; GRANT all on dmarc.* to dmarc@localhost identified by 'new_user_password';
Portarsi nella directory dove sta la radice dei documenti di apache (per esempio /var/www/htdocs) e scaricare il pacchetto. Al momento in cui scrivo il progetto si trova in uno stato di pre rilascio, quindi è conveniente scaricare il main branch da github:
git clone https://github.com/liuch/dmarc-srg.git chown -R apache:apache dmarc-srg
Impostare un dominio virtuale su apache, ad esempio:
<VirtualHost *:443>
Include ${SSL_STUFF}
ServerName dmarc.domain.tld
CustomLog ${LOGDIR}/dmarc.log combined
ErrorLog ${LOGDIR}/dmarc_error.log
DocumentRoot ${HTDOCS}/dmarc-srg/public
<Directory ${HTDOCS}/dmarc-srg/public>
Require all granted
AllowOverride All
</Directory>
</VirtualHost>
Notare che l'unica directory esposta al web è dmarc-srg/public.
Creare il file di configurazione:
cd dmarc-srg cp config/conf.sample.php config/conf.php chmod 640 config/conf.php
Modificare conf.php e inserire una password globale per proteggere l'accesso dal web:
$admin = [ // Set this value to null or remove this parameter to disable authentication // Note: The authentication always fails with an empty string password. Change it if you want to use the web> 'password' => 'secret_pwd' ];
Aggiungere le credenziale MySQL/MariaDB:
// Settings for accessing the database where reports will be saved $database = [ 'host' => 'localhost', // You can use a domain name here 'type' => 'mysql', 'name' => 'dmarc', 'user' => 'dmarc', 'password' => 'secret_pwd', 'table_prefix' => '' ];
Ora impostare la mailbox dove vengono ricevuti i report DMARC. E' quella che abbiamo già inserito nel DNS, dmarc@domain.tld nel seguente esempio:
v=DMARC1;p=reject;sp=none;pct=100;rua=mailto:dmarc@domain.tld
Copiare dunque le seguenti impostazioni:
/** * It is only required if you want to get reports from a mailbox automatically. * In order to collect reports from several mailboxes, you should put each * mailbox settings in an array. */ $mailboxes = [ // Just for displaying in the web-admin and utilities. Not necessary. 'name' => 'dmarc@domain.tld', // Host of the email server. You can specify a port separated by a colon. 'host' => 'localhost:143', // Connection encryption method. The valid values are: // 'none' - without encryption (strongly not recommend). // 'ssl' - SSL/TLS on a separate port, for IMAP it is usually port 993. Default value. // 'starttls' - STARTTLS method, usually on the standard IMAP port 143. 'encryption' => 'none', // Set true if you want to connect to the IMAP server without certificate validation //'novalidate-cert' => false, // Mailbox user name. 'username' => 'dmarc@domain.tld', // Mailbox password or OAuth token when the authentication method is 'oauth'. 'password' => 'secret_pwd', // Authentication method. The valid values are: // 'plain' - authentication with username and password. Default value. // 'oauth' - OAuth authentication. Pass the token as the password. // Only available with the imap-engine library (see the fetcher->library setting). 'authentication' => 'plain', // Mailbox name 'mailbox' => 'INBOX', // IMAP authentication methods to be excluded. // For example: 'auth_exclude' => [ 'GSSAPI', 'NTLM' ] 'auth_exclude' => [] ];
Si potrebbe anche spostare i report in arrivo in una apposita cartella 'dmarc' per mezzo di una regola sieve, in questo caso è necessario settare
'mailbox' => 'dmarc',
come nome della mailbox.
Installare tutti i prerequisiti via composer (se non si è già installato composer, dare una occhiata qui, dove ho spiegato brevemente come installarlo).
mkdir vendor chown -R apache:apache vendor sudo -u apache composer update
Ora navigare alla pagina https://dmarc.domain.tld (o dove si è pubblicato il tutto) e il database sarà inizializzato al primo accesso:

Nel menu laterale cliccare su Administration->Admin Panel per avere la conferma che la connessione al database funziona:

Cliccare su Settings->Domains e aggiungere tutti i domini per i quali ci sia aspetta di ricevere dei report.
Cliccare su Total Sources e testare l'accesso alla casella dmarc@domain.tld via IMAP:

Se si ottiene un messaggio su sfondo verde tutto è installato a dovere.
Infine impostare un cronjob per importare i report DMARC nel database durante la notte. Il programma utils/fetch_reports.php deve essere lanciato apache:
# dmarc 0 1 * * * apache /usr/bin/php /var/www/htdocs/dmarc-srg/utils/fetch_reports.php >> /var/log/cron 2>&1
Notare che solo le email non lette veranno importate, pertanto, se mai si dovesse aprirne una e lasciarla in uno stato di meggaggio letto esso non verrà importato nel database di dmarc-srg.

