Internet Service Provider con Debian: differenze tra le versioni

Riga 724: Riga 724:


=== Autenticazione su SMTP ===
=== Autenticazione su SMTP ===
==== Open relays server ====
Normalmente Postfix accetta una email solo se è verificato uno di questi criteri:
* il destinatario è un utente del mail server
* il mittente sta inviando la mail dal nostro local network, definito dalla direttiva <code>mynetworks</code> di Postfix
* il mittente si è autenticato sul server
Per motivi di sicurezza dovrebbe essere '''sempre''' impedito l'invio di email da parte di utenti che non si sono autenticati sul server e che provengono da reti sconosciute. In caso contrario uno spammer potrebbe facilmente sfruttare il nostro server per inviare milioni di email spam: questo porterebbe ad uno spreco di banda e, soprattutto, all'inserimento dell'IP del nostro server in tutte le blacklist del mondo, bloccando anche la posta dei nostri utenti autorizzati. Un server che si comporta in questo modo, permettendo l'invio di mail a tutti, è chiamato ''open relay''.
==== Configurazione di Postfix per l'autorizzazione SMTP====
Impostare la direttiva <code>smtpd_recipient_restrictions</code> correttamente è importantissimo. Normalmente è possibile definire le reti abilitate al relay sul nostro mail server attraverso la direttiva <code>mynetworks</code> contenuta nel file <code>main.cf</code>:
<pre>
# postconf -e mynetworks=192.168.50.0/24
</pre>
Purtroppo questa direttiva non è applicabile nel caso di un server che voglia agire da ISP, permettendo la spedizione e la ricezione delle email anche agli utenti che si connettono dal'esterno della nostra rete.
<br/>
La soluzione è rendere gli utenti fidati attraverso la richiesta di una username e di una password, in mancanza dei quali il relaying sarà proibito dal server.
<br/>
Questo è il momento in cui entra in gioco l'autenticazione SMTP.
<br/>
Dalla versione 2.3 di POstfix è possibile fare in modo che sia Postfix stesso a richiedere a Dovecot la verifica del nome utente e della password. E siccome abbiamo già configurato Dovecot, avremo bisogno solo di alcune configurazioni extra in Postfix:
<pre>
# postconf -e smtpd_sasl_type=dovecot
# postconf -e smtpd_sasl_path=private/auth
# postconf -e smtpd_sasl_auth_enable=yes
# postconf -e smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
</pre>
* <code>smtpd_sasl_auth_enable</pre> abilita l'autenticazione SMTP
* <code>smtpd_recipient_restrictions</code> definisce le regole che sono controllate per permettere il relay. Nel nostro caso il relay è permesso se:
** <code>permit_mynetworks</code>: l'utente proviene dalla nostra rete, oppure
** <code>permit_sasl_authenticated</code>: l'utente si è autenticato, oppure
** <code>reject_unauth_destination</code>: la mail è destinata a un utente di un nostro dominio virtuale
==== Test della configurazione ====
Proviamo la nostra configurazione con una connessione telnet sulla porta SMTP:
<pre>
$ telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mailtest ESMTP Postfix (Debian/GNU)
ehlo example.com
250-mailtest
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth plain am9obkBleGFtcGxlLmNvbQBqb2huQGV4YW1wbGUuY29tAHN1bW1lcnN1bg==
235 2.0.0 Authentication successful
quit
221 2.0.0 Bye
</pre>
L'autenticazione ha funzionato.
{{Box | Nota |Se abbiamo impostato la password di john a qualcosa di diverso da ''summersun'' dobbiamo ricavarne l'hash Base64 in questo modo:
<pre>
$> perl -MMIME::Base64 -e \
    'print encode_base64("john\@example.com\0john\@example.com\0password")';
</pre>
}}
Ora possiamo testare l'invio di una mail attraverso il nostro client di posta. Per verificare il corretto funzionamento controlliamo i file di log:
<pre>
# tail -f /var/log/mail.log
</pre>
Dovremmo trovare qualcosa di simile:
<pre>
postfix/smtpd[4032]: 1234567890: client=..., sasl_method=PLAIN, sasl_username=john@example.com
postfix/cleanup[4040]: 2EAE8379CB: message-id=<...>
postfix/qmgr[3963]: 1234567890: from=<john@example.com>, size=830, nrcpt=1 (queue active)
postfix/smtpd[4032]: disconnect from ...
postfix/smtp[4041]: 1234567890: to=<devnull@workaround.org>,
    relay=torf.workaround.org[212.12.58.129]:25, delay=6,
    delays=0.09/0.08/5.6/0.23, dsn=2.0.0, status=sent
    (250 OK id=1HsPC3-0008UJ-O5)
postfix/qmgr[3963]: 2EAE8379CB: removed
</pre>
In caso di errore dovremmo invece vedere qualcosa di simile a questo:
<pre>
postfix/smtpd[4032]: connect from ...[10.20.30.40]
postfix/smtpd[4032]: warning: ...[10.20.30.40]: SASL PLAIN authentication failed:
postfix/smtpd[4032]: lost connection after AUTH from ...[10.20.30.40]
postfix/smtpd[4032]: disconnect from ...[10.20.30.40]
</pre>
In fase di installazione Postfix genera automaticamente un certificato SSL, ma potrebbe essere utile crearne uno personalizzato, nella stessa maniera vista in precedenza:
<pre>
# openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/postfix.pem \
    -keyout /etc/ssl/private/postfix.pem
</pre>
A generazione avvenuta impostiamo i corretti permessi sul file:
<pre>
# chmod o= /etc/ssl/private/postfix.pem
</pre>
e comunichiamo a Postfix di utilizzare il nuovo certificato:
<pre>
# postconf -e smtpd_tls_cert_file=/etc/ssl/certs/postfix.pem
# postconf -e smtpd_tls_key_file=/etc/ssl/private/postfix.pem
</pre>