Mail server in IPv6

Cabina da distribuziunQuesto articolo spiega come passare in IPv6 un mail server Linux con Postfix, Amavisd-new e Dovecot.

Il sistema di partenza è un Linux con il dual stack IPv4/IPv6 attivo e funzionante con un indirizzo pubblico IPv4 e uno IPv6. Anche il sistema di posta elettronica è perfettamente funzionante in IPv4 con le ultime versioni dei programmi indicati sopra installati da sorgente, non da pacchetto della distribuzione Linux. Ciò perché con IPv6 è sempre meglio avere le ultime versioni, anche se la maggior parte delle istruzioni che seguono dovrebbero funzionare anche con le versioni distribuite nei pacchetti standard.

Si inizia con il pubblicare nel DNS il nome del server anche in IPv6 creando un record di tipo AAAA relativo al nome del server.

Per fare in modo che Postfix parli in IPv6 con il mondo ci sono alcune modifiche da fare a main.cf:

  • il parametro inet_protocols deve essere impostato a all, in questo modo Postfix accetta connessioni su entrambi gli stack ed esegue connessioni verso l’esterno utilizzando, a caso, sia IPv4 sia IPv6, nel caso in cui entrambi gli indirizzi sono indicati nel DNS, altrimenti utilizza l’unico protocollo utile;
  • al parametro mynetworks bisogna aggiungere il loopback IPv6 [::1]/128 e gli eventuali network locali che possono inviare mail tramite Postfix usando IPv6, ad esempio [2001:a240:58b7:1234::]/64;
  • il parametro opzionale smtp_bind_address6 specifica l’IPv6 che viene utilizzato per connettersi ai mail server remoti; questo serve perché in futuro un host potrà avere molti IPv6 e questo è l’indirizzo su cui è stato definito il reverse del nome.

È necessario ricordare che in Postfix quando si specificano degli IPv6 nelle liste di opzioni e nei file esterni referenziati dai parametri di configurazione bisogna sempre rinchiudere gli indirizzi all’interno di parentesi quadre.

Riavviare Postfix per attivare le impostazioni; il comando postfix reload non è sufficiente se si modifica inet_protocols. Si può verificare se Postfix risponde in IPv6 dal server stesso con un telnet ::1 25 oppure si può provare da un’altro host in IPv6. Postfix ha un apposito file readme per l’IPv6, che è bene controllare prima di procedere alle modifiche.

Al momento non esistono RBL che supportano IPv6, anche perché IPv6 non è ancora diffuso tra gli host zombizzati utilizzati dagli spammer.

Dovecot richiede meno attività; basta, infatti, confermare che dovecot.conf  contenga questa riga presente di default:

listen = *, ::

Se non è così, correggere il parametro listen e riavviare Dovecot.

La parte leggermente più elaborata è Amavis, che, però può essere fatta in un secondo tempo rispetto alle altre due configurazioni perché riguarda solamente un giro interno al server; è quasi più un vezzo che una necessità, almeno finché sopravvive l’installazione a due stack. Innanzi tutto bisogna dire a Postfix di parlare in IPv6 con Amavis: nella direttiva content_filter di main.cf bisogna sostituire la parte [127.0.0.1] con [::1]; nel file master.cf la riga

127.0.0.1:10025 inet n  -       n       -       -  smtpd

diventa

[::1]:10025 inet n  -       n       -       -  smtpd

e uno dei suoi parametri

-o mynetworks=127.0.0.0/8

diventa

-o mynetworks=[::1]/128

Si può quindi riavviare Postfix e passare all’ultima parte della configurazione, il file amavisd.conf.

Per default @mynetworks contiene già il loopback e gli indirizzi locali IPv6, si può aggiungere il network pubblico assegnato dal provider, ad esempio [2001:a240:58b7:1234::]/64.

Per ricevere le mail da Postfix in IPv6 aggiungere questa riga:

$inet_socket_bind = '::1';

Per restituire le mail a Postfix in IPv6 aggiungere

 $forward_method = 'smtp:[::1]:10025';
$notify_method  = 'smtp:[::1]:10025';

Si può riavviare Amavis e tenere d’occhio i log, non prima di aver verificato che la libreria Net::Server sia alla versione 2.0 o successiva; se la propria distribuzione ha una versione inferiore, si può usare CPAN per installare l’ultima disponibile con il comando cpan -i Net::Server

Se il tutto funziona, gli header delle mail in arrivo dovrebbero contenere qualcosa tipo

Received: from localhost (mail.luigirosa.com [IPv6:::1])
	by mail.luigirosa.com (HyperTrek-Postfix) with ESMTP id 3XWQhk1Jgqz8jcLn
	for <lists@luigirosa.com>; Tue,  2 Oct 2012 18:25:58 +0200 (CEST)
X-Virus-Scanned: amavisd-new at luigirosa.com
Received: from mail.luigirosa.com ([IPv6:::1])
	by localhost (mail.luigirosa.com [IPv6:::1]) (amavisd-new, port 10024)
	with LMTP id jeJ9IrGo8LQp for <lists@luigirosa.com>;
	Tue,  2 Oct 2012 18:25:57 +0200 (CEST)

Si noterà che nei file di configurazione alcune volte gli IPv6 devono essere rinchiusi tra parentesi, altre volte no, altre volte ancora si possono usare indifferentemente le due notazioni. Questo crea un po’ di confusione e, sicuramente, le cose verranno sistemate con le release successive man mano che IPv6 diventerà si uso comune. In linea di massima, i programmi obbligano l’uso delle parentesi nei casi in cui ci possono essere delle ambiguità.

Ora che il sistema di posta elettronica parla in IPv6 si può passare ai client, ma con molta cautela perché se lato server i problemi di IPv6 sono relativamente pochi, non altrettanto si può dire dei client. Ma questo potrebbe essere il tema di un altro articolo.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

Spazio per un commento