openDKIM e Postfix su Ubuntu Server 12.04LTS
Proverò a tornare e formattarlo meglio. Ma dato che c'era una richiesta per pubblicare la mia risposta, volevo pubblicarla ora piuttosto che aspettare che avessi il tempo di formattarla correttamente. A causa della mancanza di tempo, ho racchiuso la mia intera risposta in una citazione. Spero che questa soluzione sia utile.
Questi sono i miei riferimenti:
e Wikipedia ha una buona voce in materia
Come minimo avrai bisogno di:
- Accesso root al tuo server di posta
- Accedi per aggiornare i record DNS per il tuo dominio
Installa opendkim dai repository:
# sudo apt-get install opendkim opendkim-tools
Devi decidere su quale "selettore" desideri utilizzare. Il selettore è essenzialmente una parola per descrivere la chiave che si desidera utilizzare. Qui userò il selettore 201205 poiché la chiave è diventata valida a maggio 2012 (astuzia eh?). Do due esempi di varietà, che si spera aggiungano chiarezza. Devi solo generare UNA chiave. Tuttavia, sto dando entrambi gli esempi in modo da poterli confrontare.
- 201205 (1 ° tasto)
- my_selector (seconda chiave)
Il mio dominio sarà example.com
, ma userò un sottodominio per il mio secondo esempio:
- esempio.com (1 ° tasto)
- mail.example.com (seconda chiave)
Ho deciso di lavorare nella seguente directory:
# mkdir /etc/opendkim/
# cd /etc/opendkim
Genera le chiavi nella directory corrente, usando il selettore e il dominio scelti.
# opendkim-genkey -s 201205 -d example.com
Potrebbe essere necessario o meno modificare la proprietà. Vedi i dettagli nel mio esempio per la seconda chiave qui sotto per quale proprietà e autorizzazioni dovrebbero essere.
Innanzitutto è necessario verificare se esiste un opendkim
utente (gli ID utente / gruppo potrebbero essere diversi):
# grep opendkim /etc/passwd
opendkim:x:108:117::/var/run/opendkim:/bin/false
E probabilmente dovrai farlo:
# chmod 700 /var/run/opendkim
NOTA: i seguenti due comandi NON sono necessari su Ubuntu 12.04. Ma se il comando sopra non mostra che l'utente opendkim è stato impostato correttamente, fallo in questo modo:
# useradd -r -g opendkim -G mail -s /sbin/nologin -d /var/run/opendkim -c "OpenDKIM" opendkim
# chown opendkim:opendkim 201205.private
# cat 201205.private
-----BEGIN RSA PRIVATE KEY-----
ABCCXQ...[long string]...SdQaZw9
-----END RSA PRIVATE KEY-----
Ora controlla la chiave pubblica e nota che c'è un bug (in openDKIM 2.5.2 su Ubuntu 12.04)! Dov'è contiene, ;=rsa;
dovrebbe contenere ;k=rsa;
. Il k
manca. Per favore, inseriscilo
# cat 201205.txt
201205._domainkey IN TXT "v=DKIM1;=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com
Dopo essere stato risolto, sarà simile al seguente:
201205._domainkey IN TXT "v=DKIM1;k=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com
Inoltre, probabilmente dovrai sfuggire ai punti e virgola in questo modo. Se non vuoi il commento finale, cancellalo. Si noti inoltre che è necessario aggiungere il flag t = y per indicare ai server di ricezione che si sta testando DKIM ma che non lo si sta ancora utilizzando attivamente. Ti rimane un record di risorse valido:
201205._domainkey IN TXT "v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"
È necessario pubblicare il contenuto della chiave pubblica sopra indicata sul server DNS autorevole. Consiglio di usare un record TXT. Sembra che ci sia un po 'di controversia sull'opportunità di utilizzare un record SPF o entrambi i tipi. Dopo un po 'di lettura, ho scelto di attenermi esclusivamente al tipo di record TXT, anche se non credo che questa sia l'ultima parola su questo argomento.
Dovresti usare un breve TTL (tempo di vita) in modo da poter cambiare la chiave senza attendere che si propaghi attraverso DNS. Ho usato 180 secondi.
Il secondo esempio di generazione di una coppia di chiavi è stato un po 'più complicato per me. Descriverò quello che ho fatto. Il primo elemento è che ho usato il valore di dominio "esempio.com" anche se la chiave verrà utilizzata per "mail.esempio.com". Sono arrivato a questo tramite tentativi ed errori. Funziona, mentre usando "mail.example.com" non ha funzionato. Sfortunatamente, non sono consapevole dei motivi alla base di ciò. Questa è davvero l'unica differenza che ho riscontrato, ma era abbastanza preoccupante che sentissi di dover documentare le mie esperienze con l'utilizzo dei sottodomini. Nessuno degli altri tutorial di livello iniziale che ho trovato ha fatto questo. Genera una seconda chiave:
opendkim-genkey -s my_selector -d example.com
controlla la proprietà e le autorizzazioni della chiave privata, come sopra. Ecco come dovrebbero apparire:
# ls -la /etc/opendkim
-rw------- 1 opendkim opendkim 891 May 10 07:44 my_selector.private
Dopo aver pubblicato il record DNS, controllalo con dig
. Dovrebbe restituire esattamente ciò che hai inserito nel record delle risorse (RR).
$ dig 201205._domainkey.example.com txt +short
"v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"
Ora prova la chiave. I comandi seguenti presuppongono che ci si trovi nella directory in cui risiede la chiave (/ etc / opendkim per me).
# opendkim-testkey -d example.com -s 201205 -k 201205.private -vvv
opendkim-testkey: key loaded from /etc/opendkim/201205.private
opendkim-testkey: checking key '201205._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK
Questi risultati sono previsti. La "chiave non sicura" non indica un errore. È una conseguenza attesa del non utilizzo di DNSSSEC. DNSSEC sta arrivando, ma non è ancora pronto per la prima serata, secondo la mia lettura.
Esempio con il 2 ° tasto:
# opendkim-testkey -d example.com -s my_selector -k /etc/opendkim/my_selector.private -vvvv
opendkim-testkey: key loaded from /etc/opendkim/my_selector.private
opendkim-testkey: checking key 'my_selector._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK
Si noti che opendkim sta segnalando che la chiave non è sicura. Ciò si riferisce al fatto che DNSSEC non è implementato sul mio server DNS e teoricamente qualcuno potrebbe intercettare la ricerca DNS e sostituirla con la propria chiave.
Modifica il file di configurazione OpenDKIM:
# nano /etc/opendkim.conf
# cat /etc/opendkim.conf
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
#
Domain example.com
KeyFile /etc/opendkim/201205.private
Selector 201205
#
# Commonly-used options
Canonicalization relaxed/simple
Mode sv
SubDomains yes
# Log to syslog
Syslog yes
LogWhy yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask 022
UserID opendkim:opendkim
#
KeyTable /etc/opendkim/KeyTable
SigningTable /etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts /etc/opendkim/TrustedHosts
#
Socket inet:8891@localhost
#EOF
Se stai usando il mio secondo esempio chiave, con il dominio target "mail.example.com" la voce farebbe comunque riferimento solo al dominio principale:
Domain example.com
KeyFile /etc/dkim/my_selector.private
Selector my_selector
-----
Nota da una delle mie fonti: se si eseguono più istanze di Postfix, è necessario aggiungerlo a opendkim.conf per ciascuna istanza (o quelle che si desidera utilizzare opendkim)
Crea un file con il tuo editor di testo /etc/opendkim/TrustedHosts
:
Aggiungi domini, nomi host e / o IP che dovrebbero essere gestiti da OpenDKIM. Non dimenticare localhost.
127.0.0.1
localhost
example.com
mail.example.com
192.168.1.100 #(IP address of your server, if applicable)
(l'ultima riga sopra probabilmente non sarà necessaria. Se hai un indirizzo IP da aggiungere, assicurati di usare il tuo, non l'esempio sopra.)
Modifica /etc/default/opendkim
:
Rimuovi il commento da questa riga e usa la porta 8891:
SOCKET="inet:8891@localhost" # listen on loopback on port
Assicurati che il tuo firewall (iptables) consenta il loopback su localhost:
sudo iptables -A INPUT -i lo -j ACCEPT
Quindi, crea un file con il tuo editor di testo /etc/opendkim/KeyTable
e aggiungi il dominio alla KeyTable
Aggiungi linea:
#EXAMPLE showing my 2nd key:
my_selector._domainkey.example.com example.com:my_selector:/etc/opendkim/my_selector.private
Avanti Crea un file con il tuo editor di testo /etc/opendkim/SigningTable
e aggiungi il dominio alla SigningTable
Mostro entrambi gli esempi. Nota che per la mia seconda chiave, ora devo usare il nome di dominio completo "mail.example.com":
example.com 201205._domainkey.example.com
mail.example.com my_selector._domainkey.example.com
Si noti che in OpenDKIM 2.0.1 i nomi di dominio fanno distinzione tra maiuscole e minuscole. In questo esempio stiamo usando una versione più recente di OpenDKIM e questo non sembra essere un problema.
Configura postfix. Modifica /etc/postfix/main.cf e aggiungi le righe alla fine
milter_default_action = accept
milter_protocol = 2
smtpd_milters=inet:localhost:8891
non_smtpd_milters=inet:localhost:8891
Cambia anche il nome host:
#myhostname = localhost #original
myhostname = mail.example.com
Dovresti anche cambiare la voce corrispondente in / etc / hosts. Queste modifiche sono efficaci dopo il riavvio (sebbene sia possibile impostarle immediatamente con il comando:) hostname NEW_NAME
.
Riavvia postfix e opendkim se non hai riavviato:
# service opendkim restart
Restarting OpenDKIM: opendkim.
# service postfix restart
* Stopping Postfix Mail Transport Agent postfix [ OK ]
* Starting Postfix Mail Transport Agent postfix [ OK ]
analisi
Il modo migliore per verificare che la posta firmata sia autenticata e che i record DNS siano impostati correttamente è utilizzare uno dei servizi di test gratuiti. Ho usato questi:
- Brandon Checketts Email Validator - http://www.brandonchecketts.com/emailtest.php (il mio preferito)
- Invia un'email firmata a: check-auth@verifier.port25.com (anche il mio preferito)
Invia un'e-mail firmata a: sa-test@sendmail.net (puoi mettere tutti gli indirizzi e-mail di prova nel campo A: di un singolo messaggio in uscita per testare)
Invia un'email firmata a: autorespond+dkim@dk.elandsys.com <--- ROTTO !!! Non usare questo.
Ognuno di questi ti dirà se le cose funzionano correttamente e ti darà alcuni suggerimenti sulla risoluzione dei problemi, se necessario.
Se hai un account Gmail, puoi anche inviare un messaggio firmato lì per un test semplice e veloce.
Una volta che sei felice che tutto vada bene, puoi rimuovere il flag di test nel record TXT DNS e aumentare TTL.
Fatto!