Installare e configurare un Server SMTP/POP3/IMAP su CentOS con accesso SSL/TSL e autenticazione SASL

Versione adatta alla stampa

È da molto che volevo scrivere questo articolo. È una forma di annotare le cose che faccio senza dimenticarmi dei vari passaggi, trucchi e configurazioni che ho implementato. In questo articolo vedremo come installare un server SMTP (Sendmail) e un server POP3/IMAP (Dovecot) in una distribuzione Linux CentOS. Terminata la configurazione di Sendmail e Dovecot vedremo come filtrare la posta elettronica in entrata con SpamAssassin e come configurare Outlook Express per inviare e ricevere messaggi di posta elettronica usando connessioni sicure e l’autenticazione dell’utente.

Questa installazione è stata fatta in un VPS con distribuzione CentOS 5.3. Questa guida usa come riferimento un nome di dominio di esempio che chiameremo esempio.org.

Iniziamo installando i pacchetti necessari:

yum install sendmail*

yum install cyrus-sasl*

yum install dovecot

yum install procmail

yum install spamassassin

 

Sendmail

Facciamo una copia della configurazione iniziale di Sendmail:

cp /etc/mail/sendmail.mc /etc/mail/sendmail.mc.orig

Iniziamo con la configurazione di Sendmail modificando/aggiungendo le seguenti linee:

dnl # Defininiamo il livello di dettagli dei log di Sendmail
define(`confLOG_LEVEL', `20')dnl
dnl # Disabilitiamo la autenticazione “plain text” quando la connessione non è SSL/TLS
define(`confAUTH_OPTIONS', `A p')dnl
dnl # Definiamo i meccanismo di autenticazione permessi
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl # Configuriamo la cartella e i nomi dei certificati que useremo per l’autenticazione SSL/TLS
define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl
define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl
define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem')dnl
define(`confSERVER_KEY', `/etc/pki/tls/certs/sendmail.pem')dnl
dnl # Definiamo le porte che Sendmail userà per comunicare 25(smtp), 465(smtps) y 587(submission)
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
dnl # Non accettiamo posta elettronica da domini la cui direzione non può essere risolta
dnl FEATURE(`accept_unresolvable_domains')dnl
dnl # Filtriamo i messaggi di posta elettronica in entrata con spamassassin-milter
INPUT_MAIL_FILTER(`spamassassin', `S=unix:/var/run/spamassassin/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
define(`confMILTER_MACROS_CONNECT',`t, b, j, _, {daemon_name}, {if_name}, {if_addr}')dnl
define(`confMILTER_MACROS_HELO',`s, {tls_version}, {cipher}, {cipher_bits}, {cert_subject}, {cert_issuer}')dnl

Salviamo le modifiche e creiamo il file di configurazione di Sendmail:

make -C /etc/mail

A questo punto possiamo creare un utente di prova che poi utilizzereme nella configurazione di Outlook Express:

useradd -c "tizio" -s /sbin/nologin tizio

Gli assegniamo una password:

passwd tizio

Changing password for user tizio.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

Per autenticare l’utente con SASL(Simple Authentication and Security Layer) dobbiamo creare un file con le seguenti linee:

cd /usr/lib/sasl2

nano Sendmail.conf

pwcheck_method:saslauthd
mech_list: LOGIN PLAIN

Con la prima scegliamo il metodo di autenticazione (controllo della password), con la seconda il meccanismo. Salviamo le modifiche e configuriamo SASL in modo che si inizi automaticamente:

chkconfig saslauthd on

Configuriamo Sendmail per i domini per i quali vogliamo inviare la posta elettronica:

nano /etc/mail/local-host-names

localhost
localhost.localdomain
esempio.org

Salviamo le modifiche e passiamo alla creazione del certificato come lo abbiamo definito nella configurazione di Sendmail:

cd /etc/pki/tls/certs

make sendmail.pem
umask 77 ; \
        PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
        PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
        /usr/bin/openssl req -utf8 -newkey rsa:1024 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 -set_serial 0 ; \
        cat $PEM1 >  sendmail.pem ; \
        echo ""    >> sendmail.pem ; \
        cat $PEM2 >> sendmail.pem ; \
        rm -f $PEM1 $PEM2
Generating a 1024 bit RSA private key
........++++++
...........................++++++
writing new private key to '/tmp/openssl.l23974'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:IT
State or Province Name (full name) [Berkshire]:Marche
Locality Name (eg, city) [Newbury]:Macerata
Organization Name (eg, company) [My Company Ltd]:Esempio
Organizational Unit Name (eg, section) []:Mail
Common Name (eg, your name or your server's hostname) []:mail.esempio.org
Email Address []:admin@esempio.org

La parte più importante è la definizione del Common Name che deve corrispondere al registro MX come lo abbiamo definito al momento della configurazione del dominio.

 

Dovecot

Appena installato il server POP3/IMAP modifichiamo il file di configurazione del server:

nano /etc/dovecot.conf

Aggiungiamo/modifichiamo le seguenti linee:

# Attiviamo i protocolli che useremo
protocols = imap imaps pop3 pop3s
# Cartella e nomi dei certificati (gli stessi di Sendmail)
ssl_cert_file = /etc/pki/tls/certs/sendmail.pem
ssl_key_file = /etc/pki/tls/certs/sendmail.pem
ssl_ca_file = /etc/pki/tls/certs/sendmail.pem
# Registriamo gli errori relativi a SSL
verbose_ssl = yes

Salviamo le modifiche e configuriamo Dovecot in modo che si inizi in automatico:

chkconfig dovecot on

 

SpamAssassin

Configurazione di SpamAssassin:

cd /etc/mail/spamassassin

mv local.cf local.cf.orig

nano local.cf

Aggiungiamo:

required_score          5.0
rewrite_header subject  [SPAM]
report_safe             1
use_bayes               1
use_bayes_rules         1
bayes_auto_learn        1
skip_rbl_checks         0

Salviamo le modifiche e configuriamo SpamAssassin in modo che si inizi in automatico:

chkconfig spamassassin on

Adesso passiamo all’installazione e configurazione di spamass-milter. Spamass-milter è un componente aggiuntivo per la biblioteca dei filtri di posta elettronica (libmilter) di Sendmail il cui compito è filtrare tutti i messaggi di posta elettronica in entrata attraverso SpamAssassin.

cd /usr/src

wget http://www.voztovoice.org/tmp/spamass-milter-0.3.1.tar.gz

tar -xf spamass-milter-0.3.1.tar.gz

cd spamass-milter-0.3.1

Se sul nostro sistema non abbiamo installato i programmi e le librerie per compilare i sorgenti è il momento de farlo:

yum install gcc ncurses ncurses-devel make gcc-c++ libtermcap libtermcap-devel zlib zlib-devel libtool

./configure

make

make install

Installiamo lo script per iniziare spamass-milter in automatico:

cd contrib

nano spamass-milter-redhat.rc

Modifichiamo le seguenti linee:

SM_SOCKET=/var/run/spamassassin/spamass-milter.sock
[ -x /usr/local/sbin/spamass-milter ] || exit 0
PATH=$PATH:/usr/local/sbin

Salviamo le modifiche e copiamo il file nella cartella dei démoni:

cp spamass-milter-redhat.rc /etc/init.d/spamass-milter

cd /etc/init.d

chmod +x spamass-milter

chkconfig --level 2345 spamass-milter on

Creiamo il file di configurazione per spamass-milter:

nano /etc/sysconfig/spamass-milter

Aggiungiamo:

SOCKET=/var/run/spamassassin/spamass-milter.sock
EXTRA_FLAGS="-r 15"

Salviamo le modifiche e reiniziamo il sistema:

reboot

 

 

LOG e prova SPAM

Ci connettiamo el server e controlliamo i log per assicurarci che non ci siano errrori:

nano /var/log/maillog

Se tutto è a posto ci connettiamo al server Sendmail e controlliamo che effettivamente il protocollo SSL/TSL stia funzionando e che sia attivata l’autenticazione PLAIN LOGIN di SASL:

yum install telnet

telnet

telnet> o localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 esempio.org ESMTP Sendmail 8.13.8/8.13.8; Tue, 13 Oct 2009 15:20:59 GMT
ehlo localhost
250-esempio.org Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5
250-STARTTLS

250-DELIVERBY
250 HELP

Prima di tutti ci connettiamo al server di posta elettronica usando la porta 25. Ci presentiamo scrivendo il comando ehlo localhost e ci assicuriamo che le due linee in neretto siano presenti nella lista che il Sendmail ci presenterà. Nella linea 250-AUTH non appaiono i meccanismo di autenticazione PLAIN e LOGIN perché nella configurazione di Sendmail abbiamo definito che si possono usare solamente all’interno di una connessione sicura (protocollo TLS).

Para uscire scriviamo:

quit

Facciamo una prova per verificare che SpamAssassin stia funzionando a dovere (rifiutanto SPAM e accettando messaggi che non contengono SPAM):

spamassassin -t < /usr/share/doc/spamassassin-3.2.5/sample-nonspam.txt | grep X-Spam

X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on ejemplo.org
X-Spam-Level:
X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=no version=3.2.5

spamassassin -t < /usr/share/doc/spamassassin-3.2.5/sample-spam.txt | grep X-Spam
X-Spam-Flag: YES
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on astercurso.com
X-Spam-Level: **************************************************
X-Spam-Status: Yes, score=1000.0 required=5.0 tests=GTUBE,NO_RECEIVED,

Hanno notato la differenza?

Per controllare se effettivamente la nostra configurazione sta rifiutando SPAM e l’uso del nostro server di posta elettronica per l’invio di SPAM facciamo questa prova:

telnet relay-test.mail-abuse.org

Per installare telnet:

yum install telnet

 

Outlook Express

Apriamo Outlook Express e andiamo in strumenti > account. Creiamo un nuovo account di posta elettronica e ci assicuriamo che la configurazione sia come nelle due immagini che seguono. Salviamo la configurazione e proviamo a inviare e ricevere messaggi di posta elettronica.

OE1

 

OE2

Commenti

problema

ciao.complimenti per l'articolo. ho provato a fare istruzione per istruzione tutto quello che hai scritto, ma purtroppo quando vado ad eseguire il "test" con telnet non mi visualizza la riga 250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5 

non so proprio cosa sbaglio..ho ripetuto tutto due volte passo per passo...mi sapresti aiutare per risolvere?

 

 


Re: problema

Effettivamente dopo una serie di prove, a me appare la stessa cosa.

Se vuoi attivare tutti i meccanismo disponibili con SASL devi seguire questi passi.

cd /usr/lib/sasl2

nano Sendmail.conf

pwcheck_method:saslauthd
mech_list: LOGIN PLAIN

eliminare la linea

mech_list: LOGIN PLAIN

Riniziare sendmail y controllare se i meccanismi di autenticazione sono attivi (a me ha funzionato).

Per la configurazione di outlook, io la uso da tempo e funziona molto bene.

C'erano due refusi nella guida que ho corretto. Provala un'altra volta.

Fammi sapere.

Ciao

Condividi contenuti