Workshop sulle
problematiche del
Calcolo e Reti INFN
Configurazione sicura di
Sendmail
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
1
Sicurezza in sendmail






Situazione MTA nell’INFN
Installazione sicura
Utilizzo di TLS/SSL e relay basato sui certificati
Autenticazione SMTP
Content Management API (Milter)
Sendmail e I MUA
(Netscape/Mozilla,Outlook,PINE)
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
2
Situazione MTA nell’INFN
sendmail 8.12.*
sendmail 8.11.*
sendmail 8.9.*
sendmail 8.8.*
masked MTA
postfix
altro
define(`confSMTP_LOGIN_MSG',`$m server; $b')
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
3
Situazione MTA nell’INFN (2)
40% degli MTA
è affetto da
security advisories
sendmail 8.12.5
sendmail 8.12.8
sendmail 8.12.10
sendmail 8.12.11
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
4
Installazione sicura
Sendmail necessita di avere privilegi di root per
compiere alcuni task importanti:
1. aprire la porta 25 TCP
2. comunicare con LDA (mail.local, procmail,cyrus)
3. aprire i file .forward
4. scrivere un file nella queue directory quando un mail
è sottomesso tramite linea di comando
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
5
Installazione sicura (2)
Sendmail gira con 2 processi distinti:

/PATH/TO/sendmail -L sm-mta -bd –q30m
MTA: gira con privilegi di root e soddisfa I primi 3 punti
precedenti

/PATH/TO/sendmail -L sm-msp-queue -Ac -q30m
MSP: utilizzato per la sottomissione delle mail, può
essere invocato da programmi, gira come set-group-ID
smmsp utilizza /var/spool/clientmqueue
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
6
Installazione sicura (3)
Permessi del filesystem da utilizzare nella
configurazione di sendmail MTA e MSP:
-r-xr-sr-x
drwxrwx--drwx------r--r--r--r--r--r--
root
smmsp
root
root
root
smmsp
smmsp
wheel
wheel
wheel
...
...
...
...
...
/PATH/TO/sendmail
/var/spool/clientmqueue
/var/spool/mqueue
/etc/mail/sendmail.cf
/etc/mail/submit.cf
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
7
Porte TCP utilizzate da sendmail



smtp + STARTTLS porta 25
submission + STARTTLS porta 587
smtps porta 465 (non è abilitata per default)
Per utilizzare tutte e tre le porte occorre definire:
DAEMON_OPTIONS(`Port=smtp, Name=MTA')
DAEMON_OPTIONS(`Port=465, Name=SSA, M=Eas')
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
8
Utilizzo di TLS/SSL

STARTTLS (RFC2487): il client richiede l’inizializzazione
di una connessione TLS/SSL attraverso il comando
STARTTLS all’interno di una normale connessione SMTP
in chiaro (porta 25 o 587). Sendmail risponde:
220 2.0.0 Ready to start TLS

SSL_wrapped SMTP: si tratta di SMTP over SSL, la porta
utilizzata è la 456/smtps, questa soluzione però è ormai
deprecata a favore di STARTTLS
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
9
STARTTLS

Opzioni di compilazione per iI supporto per STARTTLS. In
site.config.m4:
APPENDDEF(`conf_sendmail_ENVDEF', `-DSTARTTLS')
APPENDDEF(`conf_sendmail_LIBS', `-lssl -lcrypto')

Variabili m4 da definire:
define(`CERT_DIR', `/var/imap/certs')
define(`CACERT_DIR', `/etc/ssl/certs')
define(`confCACERT_PATH', `CACERT_DIR')
define(`confCACERT', `CACERT_DIR/CAcert.pem')
define(`confSERVER_CERT', `CERT_DIR/postino-sendmail.pem')
define(`confSERVER_KEY', `CERT_DIR/sendmail.key')
define(`confCLIENT_CERT', `CERT_DIR/postino-sendmail.pem')
define(`confCLIENT_KEY', `CERT_DIR/sendmail.key')
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
10
STARTTLS mail relaying
Attraverso il meccanismo STARTTLS si può consentire il relay
ai client che si sono autenticati con successo tramite l’utilizzo
dei certificati. Se la verifica del certificato ha successo il relay
viene consentito a seconda della policy inserita nell’access
map di sendmail:
CERTIssuer:/C=IT/O=INFN/OU=Authority/CN=INFN+20Certification+
20Authority
SUBJECT
CERTSubject:MATCH
RELAY
Per operare controlli sul DN dei certificati offerti dal client
occorre definire una variabile m4 opportuna
define(`_CERT_REGEX_SUBJECT_',`-sMATCH /C=IT/O=INFN/OU=Personal\+20Certificate/L=Firenze')
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
11
Vantaggi e limiti di STARTTLS





Autenticazione del client e del server che consente il Relay
sicuro attraverso l’utilizzo di certificati
Privacy: la trasmissione di informazioni non può essere letta
e ritradotta in plaintext, il canale di comunicazione è criptato
Integrità dei dati che transitano nel canale di comunicazione,
dal momento che il plaintext non può essere modificato in
transito
Non può garantire una encryption end-to-end (multiple hops)
Non può fornire in assoluto un’autenticazione del messaggio
a meno che la mail sia inviata dal MUA direttamente al MTA
del destinatario (ma potrebbe a sua volta venire modificata
localmente)
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
12
SMTP over SSL (smtps)

Occorre abilitare esplicitamente SMTP over SSL nelle
opzioni di compilazione di sendmail:
APPENDDEF(`conf_sendmail_ENVDEF', `-DSTARTTLS')
APPENDDEF(`conf_sendmail_ENVDEF', `-D_FFR_SMTP_SSL')

Istruire sendmail ad ascoltare sulla porta 465/smtps:
DAEMON_OPTIONS(`Port=465, Name=SSA, M=Eas')

L’utilizzo della porta smtps è ormai obsoleto e viene
consigliato l’utilizzo di STARTTLS come valida
alternativa
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
13
Autenticazione SMTP


SMTP AUTH (RFC2554) consente di effettuare il
relay per chi si autentica
L’autenticazione è basata su SASL (RFC2222)
 Sendmail supporta cyrus-sasl e cyrus-sasl2
APPENDDEF(`conf_sendmail_ENVDEF', `-I/usr/local/include')
APPENDDEF(`conf_sendmail_ENVDEF', `-DSASL=2')
APPENDDEF(`confLIBDIRS', `-L/usr/local/lib')
ESASL_PATH=/usr/local/lib/sasl2
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')
define(`confAUTH_OPTIONS', `p,y')
define(`confDONT_BLAME_SENDMAIL', `GroupReadableSASLDBFile')
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
14
Autenticazione SMTP (2)

I plugin di autenticazione SASL si trovano in /usr/lib/sasl2
oppure /usr/local/lib/sasl2 a seconda del sistema operativo:
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rw-r--r--

1
1
1
1
1
1
1
1
1
1
root
root
root
root
root
root
root
root
root
root
wheel
wheel
wheel
wheel
wheel
wheel
wheel
wheel
wheel
wheel
15932 Jan
19038 Jan
48492 Jan
26268 Jan
16775 Jan
34886 Jan
23731 Jan
16737 Jan
21336 Jan
26 Oct 13
15 11:33 libanonymous.so.2
15 11:33 libcrammd5.so.2
15 11:33 libdigestmd5.so.2
15 11:33 libgssapiv2.so.2
15 11:33 liblogin.so.2
15 11:33 libntlm.so.2
15 11:33 libotp.so.2
15 11:33 libplain.so.2
15 11:33 libsasldb.so.2
2003 Sendmail.conf
Sendmail.conf definisce quale metodo utilizzare
per autenticare l’utente, in genere saslauthd (dce, getpwent,
kerberos4, kerberos5, pam, sasldb, shadow, ldap…)
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
15
Content Management API (Milter)

Interfaccia che consente di scrivere software esterno a
sendmail (filtri) per validare o modificare i messaggi mentre
passano per il mail transport system:




Security: I filtri non necessitano di avere privilegi di root
Reliability: Se un thread che implementa un filtro si blocca, questo non
ferma il delivery dei messaggi, non compromette la funzionalità di altri
filtri o dell’MTA stesso
Performance: la libreria Milter implementa un protocollo di
comunicazione fra MTA e filtri molto efficiente basato su un modello
threaded
Utilizzata come interfaccia efficiente con: antivirus, content
scanner, implementazione di ACL
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
16
Content Management API (Milter) (2)

Supporto Milter per sendmail:
APPENDDEF(`conf_libmilter_ENVDEF', `-DMILTER')
APPENDDEF(`conf_sendmail_ENVDEF', `-DMILTER')

Filtri che utilizzano l’interfaccia Milter ad es:
INPUT_MAIL_FILTER(`milter-amavis', `S=local:/var/amavis/amavismilter.sock, F=T, T=S:10m;R:10m;E:10m')
INPUT_MAIL_FILTER(`spamassassin',`S=local:/var/run/spamassmilter.sock, F=T, T=C:15m;S:4m;R:4m;E:10m')
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
17
Interazione con i MUA
STARTTLS STARTTLS
(TCP 25)
(TCP 587)
SSL
wrapped
smtps
(TCP 465)
SMTP AUTH
method
Netscape 7.1/
Mozilla 1.4
SI
SI
NO
PLAIN, LOGIN,
CRAM-MD5,
CERTIFICATI
Mozilla 1.6
SI
SI
SI
PLAIN, LOGIN,
CRAM-MD5,
CERTIFICATI
Outlook Express 6
SI
NO
SI
LOGIN, NTLM, DPA
SI
LOGIN, PLAIN,
CRAM-MD5,
GSSAPI,
KERBEROS4?
PINE 4.58
SI
SI
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
18
Netscape/Mozilla autenticazione con
Certificato
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
19
PINE 4.58

STARTTLS (TCP 25) + SMTP AUTH (PLAIN)
smtp-server=postino.fi.infn.it:/tls/novalidate-cert/user=veraldi

STARTTLS (TCP 587) + SMTP AUTH (PLAIN)
smtp-server=postino.fi.infn.it:587/tls/novalidate-cert/user=veraldi

smtps (TCP 465) + SMTP AUTH (PLAIN)
smtp-server=postino.fi.infn.it:465/ssl/novalidate-cert/user=veraldi
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
20
Soluzione ottimale per il fisico
viaggiante




Utilizzare un MUA che supporti STARTTLS su porta 587
(submission)
Utilizzare un MUA che supporti uno di questi metodi di
autenticazione: Certificato,LOGIN,PLAIN
Mozilla 1.7 ha il maggior numero di feature
MS Outlook non supporta STARTTLS su porta TCP != 25
Riccardo Veraldi - INFN Firenze - Workshop CCR 2004
21
Scarica

Configurazione sicura di Sendmail