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