martedì 18 marzo 2014

Configurare DKIM (DomainKeys Identified Mail) con Postfix su Debian usando OpenDKIM (HOWTO)

Note preliminari:

Tutti comandi di questo HOWTO vengono eseguiti dall'utente root
esempio.com deve essere sostituito con il dominio su cui state configurando DKIM

Installazione software necessario:

apt-get install opendkim opendkim-tools

(la procedura di installazione crea in automatico l'utente e il gruppo opendkim)

Creazione directory e sistemazione permessi:

mkdir -p /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim
chmod -R go-wrx /etc/opendkim/keys

Generazione chiavi:

E' necessario generare una chiave pubblica e una privata per ogni dominio per il quale pensate di aggiungere la firma DKIM. La chiave privata e' conservata sul server, mentre la chiave pubblica deve essere pubblicata sul DNS del dominio in modo che i mail server di destinazione possano verificare la firma DKIM della nostra mail.

Bisogna decidere il nome del selettore. Un selettore e' una parola univoca che viene associata ad entrambe le chiavi, pubblica e privata, inclusa in tutte le firme e pubblicata nei record DNS. Per semplicita' useremo la parola default come selettore di default. Potete scegliere anche un'altra parola, ma se lo fate, state attenti a utilizzare sempre quella durante le varie fasi della configurazione.

Vi ricordo inoltre di sostituire il vostro dominio di posta a dominio.com nelle fasi seguenti della configurazione:

mkdir /etc/opendkim/keys/example.com
opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com -s default
chown -R opendkim:opendkim /etc/opendkim/keys/example.com
mv /etc/opendkim/keys/example.com/default.private /etc/opendkim/keys/example.com/default

Nel comand opendkim-genkey vengono utilizzati i seguenti parametri:

-D indica la directory in cui verranno memorizzate le chiavi
-d indica il dominio di posta a cui fanno riferimento le chiavi generate
-s indica il selettore

Creazione e modifica dei file di configurazione:

I file di configurazione del sistema OpenDKIM sono i seguenti:

- 1 /etc/opendkim.conf  - e' il file di configurazione principale di OpenDKIM
- 2 /etc/opendkim/KeyTable - e' la lista delle chiavi disponibili
- 3 /etc/opendkim/SigningTable - e' la lista di domini e account specifici abilitati a firmare i propri messaggi
- 4 /etc/opendkim/TrustedHosts - e' la lista di server ritenuti affidabili al momento di inserire o verificare una firma DKIM

1) Creazione del file /etc/opendkim.conf (se esiste gia' salvatene il contenuto e sostituitelo con quanto segue)

Verificate che il contenuto del file sia il seguente:

##
## opendkim.conf -- configuration file for OpenDKIM filter
##
AutoRestart             Yes
AutoRestartRate         10/1h
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
LogWhy                  Yes
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256
SigningTable            refile:/etc/opendkim/SigningTable
Socket                  inet:8891@localhost
Syslog                  Yes
SyslogSuccess           Yes
TemporaryDirectory      /var/tmp
UMask                   022
UserID                  opendkim:opendkim

2) creazione del file /etc/opendkim/KeyTable:

default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default

Il file KeyTable dice a  OpenDKIM dove trovare le chiavi. Ogni elemento del file KeyTable e' una singola linea per ogni posizione di chiavi. Se avete intenzione di utilizzare chiavi multiple (ad esempio per firmare le mail dei domini virtuali con chiavi differenti).dovrete creare una linea separata per ogni dominio nel file KeyTable.

3) creazione del file /etc/opendkim/SigningTable:

*@example.com default._domainkey.example.com

Il file SigningTable dice a OpenDKIM come usare le vostre chiavi e queli selettori usare per i vari mittenti per le loro firme. Nell'esempio abbiamo detto al sistema che tutti (*) i mittenti del server "dominio.com" dovrebbero usare il selettore "default." 
E' importante notare che il simbolo * funzionera' solo se nel file di configurazione opendkim.conf l'opzione SigningTable utilizza il prefisso "refile:" prima del filename.

4) creazione del file /etc/opendkim/TrustedHosts:

127.0.0.1
hostname1.example1.com
example1.com
hostname1.example2.com
example2.com

Il file TrustedHosts dice a OpenDKIM chi puo' usare le chiavi per firmare i messaggi.
Essendo referenziato dalla direttiva ExternalIgnoreList nel file di configurazione, OpenDKIM ignorera' questa lista di host quando verifica le mail in ingresso.
Essendo referenziato dalla direttiva InternalHosts nel file di configurazione, OpenDKIM firmera' le mail in uscita da questi host.

IMPORTANTE: assicuratevi che l'IP address per localhost (127.0.0.1) sia inserito nel file TrustedHosts file, altrimenti OpenDKIM non firmera' le email spedite dal server.
Se aveye piu' server sulla stessa rete che utilizzano il vostro server come relay host, dovete inserire gli indirizzi IP di questi server nel file TrustedHosts se volete firmare anche le loro email. 
Inserite un elemento per ogni linea.
Un elemento puo' essere un hostname, un nome di dominio  (per esempio "dominio.com"), un indirizzo IP, an indirizzo IPv6 o un indirizzo CIDR (per esempio 192.168.1.0/24).

Configurazione di opendkim su postfix:

Inserire le righe seguenti nel file /etc/postfix/main.cf

smtpd_milters           = inet:127.0.0.1:8891
non_smtpd_milters       = $smtpd_milters
milter_default_action   = accept
milter_protocol = 2

Restart dei servizi coinvoilti:

/etc/init.d/onendkim restart
/etc/init.d/postfix restart

Verificare su /var/log/mail.log che entrambi i servizi siano ripartiti e che non ci siano altri errori.

Aggiungere i record DNS:

Ora che il vostro server sta firmando le mail in uscita e verificando le mail in entrata, avete bisogno di inserire alcune informazioni nei record DNS per dire agli altri mail server come sono configurate le vostre chiavi e per fornire loro la chiave pubblica in modo che possano verificare che la tua mail e' firmata correttamente.

cat /etc/opendkim/keys/example.com/default.txt

L'output di questo comando dovrebbe essere simile a quanto segue:

default._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=7k45u5i2T1AlEBeurUbdKh7Nypq4lLMXC2FHhezK33BuYR+3L7jxVj7FATylhwIDAQABMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHY7Zl+n3SUldTYRUEU1BErHkKN0Ya52gazp1R7FA7vN5RddPxW/sO9JVRLiWg6iAE4hxBp42YKfxOwEnxPADbBuiELKZ2ddxo2aDFAb9U/lp4" ; ----- DKIM default for example.com

Ora create un record DNS per il vostro dominio e copiate l'intero contenuto del file /etc/opendkim/keys/example.com/default.txt in fondo al file della zona del vostro dominio, Il nome TXT sara' default._domainkey e il valore TXT sara' tutto quello compreso tra apici (a partire da v=)
Potete ignorare il punto e virgola e il commento finale.

Seguite attentamente le istruzioni del vostro provider DNS per aggiungere un record TXT al vostro dominio

Ora sarebbe il momento giusto per verificare di avere anche un record SPF valido nel vostro DNS. Aver configurato a dovere sia DKIM che SPF aumentera' sensibilmente le vostre probabilita' di consegna della vostra posta in uscita.

giovedì 13 marzo 2014

ISPConfig 3: impostare un sottodominio in una sottodirectory della root del dominio principale

Esempio:
abbiamo gia' impostato il sito example.com in /var/www/webX/clientY/web

Vogliamo impostare il sottodominio subdomain.example.com nella cartella /var/www/webX/clientY/web/subdomain

La cosa potrebbe essere gestita dal pannello (Siti->Siti->Sottodomini) pero' un bug di ispconfig (pare risolto nelle ultime versioni ma non ne ho conferma) non consente di gestire correttamente i sottodomini in sottodirectory se si utilizza PHP-FPM.

Il problema si risolve gestendo la cosa da Siti->Siti->example.com->Opzioni.

Bisogna inserire nel box Apache directives:

ServerAlias subdomain.example.com
ServerAlias www.subdomain.example.com

RewriteEngine on
                RewriteCond %{HTTP_HOST}   ^subdomain\.example\.com$ [NC]
                RewriteCond %{REQUEST_URI} !^/webdav/
                RewriteCond %{REQUEST_URI} !^/php5-fcgi/
                RewriteCond %{REQUEST_URI} !^/subdomain/
                RewriteRule   ^/(.*)$ /subdomain/$1  [L]
                RewriteCond %{HTTP_HOST}   ^www\.subdomain\.example\.com$ [NC]
                RewriteCond %{REQUEST_URI} !^/webdav/
                RewriteCond %{REQUEST_URI} !^/php5-fcgi/
                RewriteCond %{REQUEST_URI} !^/subdomain/
                RewriteRule   ^/(.*)$ /subdomain/$1  [L]

e salvare. Dopo circa un minuto potrete provare la nuova configurazione.

N.B.: le due righe RewriteCond %{REQUEST_URI} !^/php5-fcgi/ sono necessarie solo per l'utilizzo con PHP-FPM