domainkeys su bestkevin.com

Gia’ da un po’ sto cercando metodi ‘alternativi’ per limitare la ricezione di spam, ma anche di evitare che altri mi inviino email di avviso che li sto spammando quando, ovviamente, si tratta solo di email camuffate. Ciclicamente mi trovo a dover gestire valanghe di email. Fino ad ora mi sono limitato a inserire nel recipient_address di postfix una riga, ad esempio:
vodbestkevinmet@bestkevin.com 550 Sender is forged !!! *YOU* are spamming me. Please read https://www.spamcop.net/fom-serve/cache/329.html
Questo e’ sufficente a non vedersi recapitate piu’ email verso quel destinatario e nel giro di qualche ora dai log si vede che non arrivano proprio piu’. Probabilmente, anzi sicuramente, sara’ cosi’ anche in futuro, ma ho voluto adottare anche altri sistemi.
Il primo che ho adottato, molto banale, e’ stato Sender Policy Framework, usato da Gmail, che in sostanza consiste nell’aggiungere ai dati della zona del proprio dominio alcune informazioni, in un campo TXT, su quali sono i server autorizzati ad inviare email per quel dominio. Ad esempio per bestkevin.com:
bestkevin.com. IN TXT ‘v=spf1 a mx -all’
infatti:
kevin@jenny:/etc/spamassassin$ dig +short TXT bestkevin.com
‘v=spf1 a mx -all’

In entrata la verifica la faccio fare a spamassassin, collegato ad amavis.
Volendo aumentare questo genere di ‘protezione’, ho installato anche il sistema DomainKeys, che oltre a funzionare un po’ come SPF, aggiunge anche un livello di integrita’ del messaggio, in quanto firmato dal server. A me interessa solo la verifica di identita’ nell’invio.
Recupero quindi dal .bash_history un po’ di informazioni 🙂 considerando che il sistema e’ una Debian GNU/Linux Etch. La base delle informazioni la potete trovare qui e qui.
Installiamo i pacchetti necessari. Manca una libreria di perl, o meglio quella di etch non e’ aggiornata per cui si dovra’ installare da CPAN.
su – Mai lavorare come root…ma tant’e’ 😉 mkdir DomainKey
cd DomainKey/
apt-get install libcrypt-openssl-rsa-perl
apt-get install libdigest-sha-perl libdigest-sha-perl1
apt-get install libdigest-sha-perl libdigest-sha1-perl
apt-get install liberror-perl
apt-get install libemail-address-perl
apt-get install libnet-server-perl
Preleviamo il programma che si occupera’ di effettuare le firme dei messaggi in uscita e la verifica di quelli in entrata (a me interessa solo la prima parte lasciando a spamassassin la seconda):
wget https://downloads.sourceforge.net/dkimproxy/dkimproxy-1.0.1.tar.gz
tar xvfz dkimproxy-1.0.1.tar.gz
cd dkimproxy-1.0.1
mkdir /usr/local/sbin/dkimproxy
cpan
Qui, se e’ la prima volta che lo lanciate, premete sempre invio tranne all’indicazione del mirror da usare per scaricare le librerie necessarie. Una volta arrivati alla shell di CPAN date il comando:
install Mail::DKIM
Proseguiamo…
./configure –prefix=/usr/local/sbin/dkimproxy/
make install
cd /usr/local/sbin/dkimproxy
adduser dkim
passwd dkim -d
cd etc/
openssl genrsa -out private.key 1024
openssl rsa -in private.key -pubout -out public.key
cd /usr/local/sbin/dkimproxy
chown -R dkim.dkim dkimproxy/
cd dkimproxy/etc/
chmod go-r private.key
mv dkimproxy_out.conf.example dkimproxy_out.conf
mv dkimproxy_in.conf.example dkimproxy_in.conf
cp /root/DomainKey/sample-dkim-init-script.sh /usr/local/sbin/dkimproxy/etc/init.d/dkimproxy.sh
ln -s /usr/local/sbin/dkimproxy/etc/init.d/dkimproxy.sh /etc/rc2.d/S90dkimproxy
/etc/rc2.d/S90dkimproxy start
Ora dovrebbe essere installato e funzionante. Io ho modificato lo script di avvio commentando nella sezione start) la chiamata a start-in) perche’ come detto non mi interessa.
Vediamo cosa mettere nella zona del DNS. Semplicemente:
selector1._domainkey.bestkevin.com. IN TXT ‘k=rsa; t=s; p=M
IGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjoawNERYaU5QHfihMhEOLG4VlkM4iG
/QaRXKKJ8Kf2/UQtRrrN4uKPVEq1jvHwlz6et3gpBQCMp31FOMeGxKwKGCQjVPOD5tLs
7AB7Gas/JLBtONbktwy6wL5bsEa7osdxjqPzeIwGfgIVAav6RW17nLEKdnW4M+Roj/3r
sdiKQIDAQAB’
dove selector1 e’ un nome scelto (tutti usano questo, quindi ho proseguito la tradizione), il resto va uguale cambiando il dominio e la parte della chiave pubblica che altro non e’ che il contenuto del file public.key che avevamo generato, avendo l’accortezza di concatenare cio’ che nel file e’ su piu’ righe.
Bisogna ora modificare il master.cf di postfix, considerate che io ho cambiato le porte di funzionamento da quelle di default 100XX con le 101XX in quanto ho amavis che gira sulle stesse:
cat /etc/postfix/master.cf

submission inet n – – – – smtpd
-o smtpd_etrn_restrictions=reject
-o smtpd_sasl_auth_enable=yes
-o content_filter=dksign:[127.0.0.1]:10127
-o receive_override_options=no_address_mappings
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject

dksign unix – – – – 10 smtp
-o smtp_send_xforward_command=yes
-o smtp_discard_ehlo_keywords=8bitmime,starttls

127.0.0.1:10128 inet n – – – 10 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o smtpd_authorized_xforward_hosts=127.0.0.0/8

Vorrei farvi notare che a differenza degli howto online, qui postfix lavora in chroot, ed infatti il campo relativo di master.cf e’ diverso. Per questo motivo e’ necessario spostare tutto quello che abbiamo fatto, nella chroot di postfix:
mkdir /var/spool/postfix/usr mkdir /var/spool/postfix/usr/local/ mkdir /var/spool/postfix/usr/local/sbin mv /usr/local/sbin/dkimproxy /var/spool/postfix/usr/local/sbin ln -s /var/spool/postfix/usr/local/sbin/dkimproxy /usr/local/sbin/
L’ultima cosa da fare e’ modificare spamassassin per dirgli di controllare lui le chiavi delle email in arrivo, ovvero nel file v312.pre togliere il commento alla riga relativa:

loadplugin Mail::SpamAssassin::Plugin::DKIM

Tutto qui, il sistema dovrebbe essere pronto (guardate magari i file di config di dkimproxy per verificare che si adattino alla vostra config, in particolare il nome del dominio).

Per fare una prova, mandate una mail a test@dkimtest.jason.long.name con oggetto dkim, e vedete cosa vi risponde, oppure mandatela ad un account su yahoo: dovrebbe dirvi, sotto al campo mittente una volta aperta la mail, che lo stesso e’ stato verificato con DomainKeys.

Spero di non aver dimenticato nulla, se avete domande…mandate una mail 🙂

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.