Traduzioni: English - Italiano


Postfix è un MTA (agente di trasferimento della posta) sicuro.

Postfix

Installare e configurare Postfix in Debian

apt-get install postfix

cat /var/log/mail.log

postconf -e "myorigin = esempio.com"

postconf -e "myhostname=server1.esempio.com"

postconf -e "relay_domains = esempio.com, esempio2.com, esempio3.com"

postfix reload

telnet localhost 25

Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 server1.esempio.com ESMTP Postfix (Debian/GNU)

mail from:<tu@tuoindirizzo.com>
rcpt to:<utente@esempio.com>
data
To: utente@esempio.com
From: tu@tuoindirizzo.com
Subject: Il mio primo messaggio di posta
Il mio primo messaggio con postfix in Debian dopo averlo installato e configurato.
Facile, direi. Ciao

.

quit

qshape
mailq
qshape deferred
postsuper
postsuper -r ALL   (requeue all emails)

anti-spam: restrizioni smtp

smtpd_recipient_restrictions = reject_invalid_hostname,
        reject_unknown_recipient_domain,
        reject_unauth_destination,
        reject_rbl_client sbl.spamhaus.org,
        permit

smtpd_helo_restrictions = reject_invalid_helo_hostname,
        reject_non_fqdn_helo_hostname,
        reject_unknown_helo_hostname

anti-spam: usare elenchi RBL

Inserire questo nel proprio file /etc/postfix/main.cf:

smtpd_client_restrictions = reject_rbl_client dnsbl.sorbs.net

Per informazioni su cosa è un rbl, vedere http://www.us.sorbs.net/mailsystems/postfix.shtml

e vedere per cosa non dovrebbe essere.

Server di posta gateway anti-spam e anti-virus in Debian

Postfix e sbcglobal/yahoo/att

apt-get install postfix-tls libsasl2-modules

postconf -e "relayhost = [smtp.sbcglobal.yahoo.com]:587"
postconf -e "smtp_sasl_auth_enable = yes"
postconf -e "smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd"
postconf -e "smtp_sasl_security_options = noanonymous"

[smtp.sbcglobal.yahoo.com]:587 nomeutente@sbcglobal.net:miapassword

chmod 600 /etc/postfix/sasl_passwd

postmap /etc/postfix/sasl_passwd

postfix reload

Inoltrare posta elettronica

postconf -e "alias_maps = hash:/etc/aliases"

root: luca

luca: miaemail@esempio.com

luca: luca miaemail@esempio.com

newaliases

/etc/init.d/postfix reload

Indirizzi di posta virtuali

postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"

vi /etc/postfix/virtual

postmaster info@esempio.com
abuse info@esempio.com
unqualsiasiindirizzo luca

postmap /etc/postfix/virtual

/etc/init.d/postfix reload

Maildir

postconf -e "home_mailbox = Maildir/"
postconf -e "mailbox_command ="

Mutt

vi /etc/Muttrc

set folder="~/Maildir"
set mask="!^\\.[^.]"
set mbox="~/Maildir"
set record="+.Sent"
set postponed="+.Drafts"
set spoolfile="~/Maildir"

Postfix e le mailing list

Mailman con Postfix

(!) Le istruzioni sottostanti sono SBAGLIATE! Non si dovrebbe usare postfix-to-mailman.py e alias contemporaneamente. Leggere invece /etc/mailman/postfix-to-mailman.py.

apt-get install mailman

newlist mailman

/etc/init.d/mailman start

relay_domains = esempio.com, lists.esempio.com

alias_maps = hash:/etc/aliases,hash:/var/lib/mailman/data/aliases

postconf -e "transport_maps = hash:/etc/postfix/transport"
postconf -e "mailman_destination_recipient_limit = 1"

mailman unix  -       n       n       -       -       pipe
   flags=FR user=list
   argv=/var/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}

lists.esempio.com    mailman:

postmap /etc/postfix/transport

MTA = 'Postfix'
DEB_LISTMASTER = 'postmaster@esempio.com'
POSTFIX_STYLE_VIRTUAL_DOMAIN = ['lists.esempio.com']

/etc/init.d/postfix reload
/etc/init.d/mailman restart

newlist nome_lista

Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /images/mailman/ /usr/share/images/mailman/

Poi è necessario ricaricare apache:

/etc/init.d/apache2 reload

http://lists.propriositoweb.com/cgi-bin/mailman/listinfo/nome_lista/

Risoluzione di problemi relativi a Mailman

Connessione rifiutata

Dando per scontato che postfix sia in esecuzione e in ascolto sull'host locale, un possibile problema è che non sia configurato per girare in modalità IPv6, ma il file /etc/hosts specifichi ::1 come localhost. In questo caso mailman cerca di inviare posta elettronica a ::1 che non ha postfix in ascolto: come risultato si ottiene un errore (111, 'connection refused').

Postfix e TLS/SSL

Aggiungere TLS/SSL

Ci sono 3 opzioni per trasferire dati a Postfix (smtpd):

  1. non usare TLS/SSL per nulla (sono disponibili solamente connessioni non sicure).
  2. usare TLS/SSL, se possibile. Ripiegare altrimenti su connessioni non sicure.
  3. permettere solamente connessioni TLS/SSL (le connessioni non sicure non sono disponibili).

La seconda opzione (chiamata STARTTLS) è quella raccomandata per server di posta di uso generico. Fornisce una sorta di «modalità di compatibilità». Il trasferimento di dati sicuro è abilitato ma non imposto.

Le connessioni STARTTLS iniziano in maniera non cifrata attraverso la normale porta smtp 25. Se entrambi i lati concordano, il resto del trasferimento di dati è cifrato, sempre usando la porta 25.

Il TLS/SSL puro usa la sua propria porta, solitamente smtps (465). Vedere più avanti.

Le versioni di Postfix recenti utilizzano il parametro smtpd_tls_security_level per controllare la cifratura TLS (i valori validi sono none, may o encrypt).

In precedenza erano usati due parametri (smtpd_use_tls e smtpd_enforce_tls). Possono essere non impostati. Vedere anche la segnalazione di bug Debian 520936.

Con i comandi seguenti viene imposto l'uso di TLS (no STARTTLS) e i vecchi parametri di configurazione vengono reimpostati ai valori predefiniti:

~# postconf -e smtpd_tls_security_level=encrypt
~# postconf -# smtpd_use_tls
~# postconf -# smtpd_enforce_tls

Porte TLS/SSL alternative

Si potrebbe essere interessati all'uso delle porte smtps o submission (vedere /etc/services) in modo che i propri utenti mobili o remoti, che potrebbero essere in un sistema che blocca, filtra o fa da proxy in modo non corretto per il traffico SMTP (porta 25), possano comunque inviare posta attraverso il proprio server. Dato che queste porte non sono utilizzate anche per il traffico da MTA a MTA si possono imporre restrizioni aggiuntive, come l'obbligo di usare SSL/TLS.

Per farlo modificare il file /etc/postfix/master.cf per eseguire servizi smtpd aggiuntivi con parametri speciali su porte dedicate.

"submission"

La porta submission (587), descritta nella RFC 2476, è riservata per l'invio di posta elettronica da parte di MUA (Mail User Agent) o MSA (Mail Submission Agent) ad un MTA (Mail Transfer Agent).

Per potere abilitare un servizio aggiuntivo modificare il file /etc/postfix/master.cf.

In questo esempio viene disabilitato ETRN, viene richiesto TLS e abilitato SASL Auth nella porta submission.

submission inet n      -       -       -       -       smtpd
        -o smtpd_etrn_restrictions=reject
        -o smtpd_enforce_tls=yes 
        -o smtpd_sasl_auth_enable=yes

SMTPS

La porta smtps (o ssmtp) (465) è l'equivalente di https. Il livello di sicurezza viene richiesto sin dall'inizio e non è un parametro opzionale negoziato dopo la connessione.

Se la porta sia chiamata smtps o ssmtp dipende dal contenuto del file /etc/services. In Debian sembrano essere definiti entrambi i nomi. L'output di netstat -tl mostra ssmtp.

Per potere abilitare un servizio aggiuntivo modificare il file /etc/postfix/master.cf.

In Debian esiste già una voce preparata per smtps, ma è commentata. Rimuovere i caratteri «#» per abilitarla.

smtps     inet  n       -       -       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Connessioni da Fetchmail a Postfix

Sembra che fetchmail non sia in grado di impostare una connessione TLS con Postfix. (Da non confondersi con la capacità di fetchmail di recuperare posta attraverso connessioni TLS.)

Se Postfix è configurato per accettare solamente connessioni TLS (smtpd_tls_security_level=encrypt) fetchmail fallisce con un errore simile a "Must issue a STARTTLS command first" ("Necessario produrre prima un comando STARTTLS").

Un modo per risolvere questo problema è di fornire un servizio smtp non cifrato. Naturalmente questo servizio dovrebbe essere disponibile solamente per un processo fetchmail locale.

Modificare /etc/postfix/master.cf e aggiungere

127.0.0.1:40025      inet  n       -       -       -       -       smtpd
    -o smtpd_tls_security_level=none

Questo aggiunge un servizio smtp addizionale sulla porta 40025 con TLS disabilitato ma che accetta solamente connessioni locali.

Fetchmail deve essere configurato di conseguenza usando l'opzione smtphost.

Modificare /etc/fetchmailrc

# Server options
poll ...

# User options
user a ...
        smtphost 127.0.0.1/40025
user b ...
        smtphost 127.0.0.1/40025

L'opzione smtphost è una di quelle che vengono chiamate "opzioni utente". Deve essere aggiunta in ogni sezione utente.

In alternativa si può configurare fetchmail in modo che usi un programma esterno con capacità di usare TLS1 per inoltrare la posta. Ciò non viene descritto in questa pagina. Inoltre se fetchmail e Postfix sono in esecuzione sulla stessa macchina non ha comunque molto senso.

Opzioni avanzate

SPF e indirizzi IP esterni multipli

Spiegazione

Ho alcuni sistema che sono collegati in rete ad una sottorete di indirizzi IP privati interni (192.168.0.0/16). Per ragioni varie invio rapporti via posta elettronica e cose simili a <utente>@mail.internal dove utente è un indirizzo che non è valido per la ricezione di posta dalle interfacce esterne. Questi sistemi condividono anche una sottorete di indirizzi IP pubblici perciò potrebbero scambiarsi posta elettronica gli uni con gli altri in quel modo, ma io preferirei non lo facessero per la posta locale. Ho pubblicato i record SPF dei server di posta pubblici perché tutta la nostra posta è instradata attraverso quei server, perciò se ad altri interessa controllare possono ignorare la posta che sostiene di provenire da noi ma è inoltrata da server che non siano compresi nei nostri record SPF.

Recentemente ho allargato gi indirizzi IP che questi sistemi usano esternamente per supportare istanze multiple di servizi basati su porte, come https (aggiungere :oddport non fa colpo sui clienti). Avrei potuto allargare o aggiungere valori SPF più liberi, o aggiungere più record forwarding e reverse DNS, ma volevo rimanere con meno indirizzi IP.

Per ricapitolare, il mio sistema ha:

Usando le impostazioni in /etc/postfix/master.cf, /etc/postfix/main.cf e /etc/postfix/transport come descritto in precedenza, mi è stato possibile far sì che il mio traffico smtp in uscita usasse nuovamente i mie indirizzi SPF pubblicati.

Creare indirizzi IP SPF ed esterni multipli

Se si sta cercando di implementare record SPF rimanendo legati ad un singolo indirizzo IP esterno e lavorando sempre con sistemi con IP multipli dual-homed basati su alias, o si ha motivo di supportare sistemi multi-homed con indirizzi IP multipli ma si vuole limitare postfix all'uso di due soli di essi, provare quanto segue:

 smtp      unix  -       -       -       -       -       smtp
        -o smtp_bind_address=<indirizzo IP SPF pubblicato>
 smtpinternal      unix  -       -       -       -       -       smtp
        -o smtp_bind_address=<indirizzo IP interno>

 transport_maps = hash:/etc/postfix/transport

 .internal smtpinternal:

Eseguire postmap /etc/postfix/transport, invoke-rc.d postfix stop e invoke-rc.d postfix start e si dovrebbe essere a posto. La posta per <utente>@<sistema>.internal sarà consegnata attraverso l'interfaccia/indirizzo IP interni, tutta l'altra posta sarà consegnata attraverso i metodi predefiniti cioè la posta Internet uscirà attraverso l'indirizzo IP SPF pubblicato.

Opzionale:

Postfix e Sasl

Collegamenti esterni


  1. I cosiddetti MTA "leggeri" come msmtp o sSMTP. (1)