È 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
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.
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
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
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
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.
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