DomainKeys Identified Mail (DKIM) è un metodo per associare un nome a dominio con un messaggio email.
Questa la parte più difficile per me, vale a dire spiegarvi di cosa parliamo.
Sono convinto che non tutti abbiano capito la mia spiegazione, ma è vero pure che se siete finiti a leggere questo post è perché da soli vi siete posti il seguente problema: vorrei certificare che il server che invia le email per conto del mio dominio sia autorizzato a farlo.
Per farlo utilizzeremo opendkim!
Fermiamo postfix e installiamo opendkim con i sui tools
/etc/init.d/postfix stop apt-get install opendkim opendkim-tools
Ora ci creiamo la struttura di directory e file che ci occorrono per iniziare
mkdir -p /etc/opendkim/keys cd /etc/opendkim touch keytable signingtable trustedhosts
Diamo uno sguardo al file di configurazione /etc/opendkim.conf . Vi lascio il mio come esempio. Se vi occorre saperne di più usate le pagine man.
# Log to syslog Syslog yes LogWhy yes UMask 002 Mode sv OversignHeaders From KeyTable refile:/etc/opendkim/keytable SigningTable refile:/etc/opendkim/signingtable ExternalIgnoreList /etc/opendkim/trustedhosts InternalHosts /etc/opendkim/trustedhosts On-Default accept On-BadSignature accept On-DNSError tempfail On-InternalError accept On-NoSignature accept On-Security tempfail AutoRestart yes AutoRestartRate 5/1h
Adesso uno sguardo e relative modifiche al file /etc/default/opendkim
... SOCKET="inet:12345@localhost" # listen on loopback on port 12345
Ora è facile comprendere che il nostro nuovo servizio sarà attivo in localhost sulla porta 12345 .
Adesso non ci resta che creare le chiavi con cui firmeremo le email per i nostri domini. A tal proposito creo una directory per ogni dominio che mi interessa in /etc/opendkim/keys
cd /etc/opendkim/keys mkdir example.tld opendkim-genkey -s 2013102300 -d example.tld
L’ultimo comando genera due file : 2013102300.private 2013102300.txt
Alcune precisazioni:
- 2013102200 è il selettore per la chiave del dominio example.tld: è composta da anno, mese, giorno, e seriale se dovesse occorrere! Un po’ come il seriale di una zona DNS!;
- verificate il contenuto del file .txt ci servirà a breve.
Ora ci interessa creare un record DNS di tipo TXT per il nostro dominio che abbia come hostname
2013102300._domainkey
e come valore quello compreso negli apici del file txt di cui sopra:
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqg6k7sk/gwmsTEcGayMC5gMNfD/7V3m1F0GQog7Sj3MSG9qMNIzW4i5Cn+VYpEpj9alBK7jg2Jk/FcVzR4d3X8tNNYQkRYfPUU94tI639YSKTChlAoT2R4Ar8WTyKsPp9zkjV+YzRWgqAYhVZMdu5zKymaipHu0LkVmy8ngAQMQIDAQAB
Come creare un record simile per il vostro dominio, non sarà oggetto di trattazione. Qui è spiegato solo cosa deve contenere!
A questo punto comunichiamo il contenuto delle nostre chiavi a opendkim attraverso i primi file creati. Modifichaimo il file /etc/opendkim/keytable
2013102300._domainkey.example.tld example.tld:2013102300:/etc/opendkim/keys/example.tld/2013102300.private
Il file /etc/opendkim/signingtable affinchè contenga qualcosa di simile
*@example.tld 2013102300._domainkey.example.tld
infine aggiungiamo a /etc/opendkim/trustedhosts almeno gli indirizzi locali e l’IP pubblico del nostro server
127.0.0.1 localhost example.tld INDIRIZZO IPV4 DEL SERVER
Adesso facciamo in modo che opendkim possa leggere i file cha abbiamo creato:
cd /etc/opendkim/ chown -R opendkim:opendkim *
Riavviamo il servizio e procediamo alla integrazione di opendkim con postfix
/etc/init.d/opendkim restart
per quanto riguarda postfix dobbiamo editare il file /etc/postfix/main.cf per aggiungere o modificare opportunamente le seguenti righe
... # OpenDKIM milter_default_action = accept milter_protocol = 6 smtpd_milters = inet:localhost:12345 non_smtpd_milters = inet:localhost:12345 ....
infine verificate che l’istruzione receive_override_options= presente nel file /etc/postfix/master.cf contenga il valore no_milters come nell’esempio che segue
... 127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= ... -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters -o smtp_bind_address=127.0.0.1
una volta modificato a dovere questo ultimo file potete finalmente far ripartire postfix!
/etc/init.d/postfix restart
Ora verificate che funzioni! Se avete un account google speditevi una mail. Nel sorgente del messaggio che riceverete ci sarà qualcosa di simile:
... DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=woeSTwYJxEwahkGNKqK8xReUvtoVZrsQrmlUtfAgG6Y=; b=P7xER4n0j8dqAnpVXDSVnn/c9g560DCYJVCWgvF+ijRLPFqhcAzMEWB/zuAPEzGrt5 DfUVNKIvS/C1dvB9dASRLXtd0qZNv6OdoD9PLlKfCWOKy7cdd/2Iwo1IQCtGTPsGnWW7 BFz/dwSe7+eQks0WUNYIe5wJ3iaywmxcX7tsmgUNaTsRfHJ/lcCXpdnCFtDu5hRlvsV4 d9Ts1C5I97AVAKzYu/LdxwF4Qi5O/8OL953I4iH9bw32TJEpqtAccvVHtMrtE2b8xPAe eQ+eMc8NeokFbyOJvWtgBOxNUZpmLowO/kiKgatYlkE7lcgI6BQ/E4vDaJRl+ftMyHJ3 YLhQ== ...
Adesso rispondete all’account google che vi ha appena scritto e se il destinatario nel sorgente del suo messaggio troverà qualcosa di simile
... DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=example.tld; s=2013102300; t=1382373996; bh=0q0pM2BM5QBc6UyIMnw9vqd31z00e4ACFZvuOH3pNq0=; h=Date:From:To:Subject:From; b=rBqR5yjhGbVf6f3QwzadyFJB9WKn+9iLNqdaQiVCZ7Xpb7ZWn2krfNwn0STuMa9c1 kW7PMx+nclSjR0YwYvqErAGD1rGUrcr4AgFSzFtZRAkTBbOyh4tT8XAncHxPXRWaMJ 0G15Cf7SEvnNIefMX4VN5Sp+drTgEyH9qkeoN5OM= ...
avrete avuto successo e la vostra configurazione sarà funzionante!
E per gli altri domini? aggiungete una directory in keys per ogni dominio, create la chiave ed aggiungete una riga nei file keytable e signingtable come per il dominio example.tld.
Semplice vero?!