Protezione antispam con DK DKIM e SPF in postfix

From RVM Wiki
Jump to navigation Jump to search

DKIM

Domain Keys Identified Mail si occupa di firmare le mail in uscita.

  • Installare il pacchetto
sudo apt-get install dkim-filter
  • Preparare le directory per i socket
sudo mkdir -p /var/spool/postfix/milter/dkim-filter
sudo chown dkim-filter.dkim-filter /var/spool/postfix/milter/dkim-filter
sudo chmod 0755 /var/spool/postfix/milter/dkim-filter 
  • Generare le chiavi per il dominio:
sudo mkdir -p /etc/mail/dkim/keys/example.com
cd /etc/mail/dkim/keys/example.com
sudo  dkim-genkey -r -d example.com
  • Linkare la chiave al nome DNS del server di uscita delle email del dominio da proteggere, che ad esempio è mymailserver.example.com
sudo ln -s default.private mymailserver
  • Dichiarare ora quel chiave usare per firmare le email in uscita per il dominio:
sudoedit /etc/dkim-keys.conf
*@example.com:example.com:/etc/mail/dkim/keys/example.com/mymailserver
  • Dichiarare quali indirizzi ip possono spedire mail da questo server senza essere soggette a limitazioni DKIM (in pratica se ci sono server che fanno relay tramite questo). Se non ce ne sono, lasciare solo i localhost:
sudoedit /etc/dkim-internalhosts.conf
127.0.0.1
::1
localhost
server2.example.com
server1.example.com
  • Includere quindi questi dati nella configurazione:
sudoedit /etc/dkim-filter.conf
  • Scommenatre
 KeyList        /etc/dkim-keys.conf
  • Aggiungere
 InternalHosts    /etc/dkim-internalhosts.conf
  • Modificare la configurazione del socket in caso di Postfix in chroot
sudoedit /etc/default/dkim-filter
SOCKET="local:/var/spool/postfix/milter/dkim-filter/dkim-filter.sock"
  • Creare le directory con le corrette permission:
sudo mkdir -p /var/spool/postfix/milter/dkim-filter
sudo chown dkim-filter.dkim-filter /var/spool/postfix/milter/dkim-filter
sudo chmod 0755 /var/spool/postfix/milter/dkim-filter
  • Aggiungere postfix al gruppo dkim-filter, per poter accedere ai socket:
sudo gpasswd -a postfix dkim-filter 

  • Riavviare il demone
sudo invoke-rc.d dkim-filter restart

Configurazione Postfix per DKIM

  • Dichiare il milter DKIM per l'uso in postfix, aggiugendolo agli esistenti (se presenti):
sudoedit /etc/postfix/main.cf 

smtpd_milters =
    unix:milter/dkim-filter/dkim-filter.sock
non_smtpd_milters =
    unix:milter/dkim-filter/dkim-filter.sock
milter_default_action = accept
  • Riavviare Postfix
sudo invoke-rc.d postfix restart


mkdir -p /var/spool/postfix/milter/dk-filter chown dk-filter.dk-filter /var/spool/postfix/milter/dk-filter chmod 2755 /var/spool/postfix/milter/dk-filter

Configurazione DNS per DKIM

  • Affinchè i mail server riceventi possano verificare la'utenticità della firma DKIM, occorre pubblicarla via DNS con un record TXT
  • Il record di esempio di trova in:
sudo cat /etc/mail/dkim/keys/example.com/default.txt
default._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=MIGtsggGhShGhIh3hQEhsdUAddGdAdCdidKdggDgUd9GdgvYdgZgqqU+1vCAOitBjBLN55JCqdNdggdcgdigJdmgejy4xpRsfKWd8iJyf/pti5ps6MQdghg7dgrdSgdHgdXgdag0mBGG509MnxZFgYnWC4Ja8W6vQD0mD2KEFenymgd7AqZh6qGR/LRzUDLGts/CUtqXkUtgotb3rwIDAQAB" ; ----- DKIM default for example.com
  • Per formattare il record da inserire nella zona bind. cambiare default con il nome del mailserver utilizzato:
mymailserver._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=MIGtsggGhShGhIh3hQEhsdUAddGdAdCdidKdggDgUd9GdgvYdgZgqqU+1vCAOitBjBLN55JCqdNdggdcgdigJdmgejy4xpRsfKWd8iJyf/pti5ps6MQdghg7dgrdSgdHgdXgdag0mBGG509MnxZFgYnWC4Ja8W6vQD0mD2KEFenymgd7AqZh6qGR/LRzUDLGts/CUtqXkUtgotb3rwIDAQAB" ; ----- DKIM default for example.com
  • Aggiungere il flag t=y; per indicare che le mail firmate e non firmate vanno trattate nello stesso modo:
mymailserver._domainkey IN TXT "v=DKIM1; g=*; k=rsa; t=y; p=MIGtsggGhShGhIh3hQEhsdUAddGdAdCdidKdggDgUd9GdgvYdgZgqqU+1vCAOitBjBLN55JCqdNdggdcgdigJdmgejy4xpRsfKWd8iJyf/pti5ps6MQdghg7dgrdSgdHgdXgdag0mBGG509MnxZFgYnWC4Ja8W6vQD0mD2KEFenymgd7AqZh6qGR/LRzUDLGts/CUtqXkUtgotb3rwIDAQAB" ; ----- DKIM default for example.com
  • Questa ottenuta è la stringa da aggiungere nel file di zona.
  • Per testare se è configurata correttamente, fare la query:
host -t txt mymailserver._domainkey.example.com
  • Deve ritornare
mymailserver._domainkey.example.com descriptive text "v=DKIM1; g=*; k=rsa; t=y; p=MIGtsggGhShGhIh3hQEhsdUAddGdAdCdidKdggDgUd9GdgvYdgZgqqU+1vCAOitBjBLN55JCqdNdggdcgdigJdmgejy4xpRsfKWd8iJyf/pti5ps6MQdghg7dgrdSgdHgdXgdag0mBGG509MnxZFgYnWC4Ja8W6vQD0mD2KEFenymgd7AqZh6qGR/LRzUDLGts/CUtqXkUtgotb3rwIDAQAB"
  • Per testare, è possibile usare i servizi:

Abilitazione definitiva DKIM

  • Quando si è sicuri che tutta la mail sarà firmata dal server DKIM, si può togliere dal record TXT il parametro t=y. IN QUESTO MODO TUTTA LA MAIL NON FIRMATA VERRÀ RIFIUTATA DAI SERVER CHE USANO DKIM

DK

SPF

  • SPF indica quali sono i mailserver ufficiali per l'invio di mail di un determinato dominio. Una specie di MX al contrario.

Configurazione DNS per SPF

  • Non serve configurare nulla sul mailserver che invia la mail, ma è solo necessario configurare il record TXT che dice come comportarsi:
@ IN TXT "v=spf1 mx a:mymailserver.example.com include:senders.domain ~all"

Riferimenti