Translation(s): English - Italiano - Português Brasileiro
Postfix è un MTA (agente di trasferimento della posta) sicuro.
Postfix
Installare e configurare Postfix in Debian
- Installare postfix (ciò rimuoverà exim dato che due sistemi di posta non possono coesistere); se si ha un sito web, scegliere sito Internet quando la configurazione lo chiede):
apt install postfix
- Controllare i file di registro mail.log, mail.err, mail.info, mail.warn per vedere se postfix è in esecuzione.
cat /var/log/mail.log
- Si può lanciare l'assistente di configurazione di dpkg se sono stati saltati alcuni passaggi di configurazione durante l'installazione:
dpkg-reconfigure postfix
Si dovrebbe rivedere /etc/postfix/main.cf alla luce di Postfix: Basic configuration readme per assicurarsi che le variabili principali siano state impostate secondo le proprie necessità.
- Riavviare il server Postfix:
postfix reload
Testare il server di posta
- Digitare
telnet localhost 25
- Si dovrebbe ottenere:
Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. 220 server1.esempio.com ESMTP Postfix (Debian/GNU)
- Ora auto-inviarsi un messaggio di posta:
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
- Per terminare l'inserimento dei dati premere Invio, digitare un punto e premere Invio nuovamente.:
.
- Poi
quit
- Ecco fatto. Digitare "mail" nel terminale a riga di comando e vedere se si ha posta.
Alcuni comandi utili
mailq qshape qshape deferred postsuper postsuper -r ALL # rimette in coda tutta la posta
Configurazione di router, firewall e dominio
- Se si ha un router con firewall, abilitare la portA 25 e inoltrare tale porta al computer.
Alcuni ISP bloccano la porta 25 e possono richiedere azioni specifiche per poter inviare/ricevere posta. Vedere Postfix e sbcglobal/yahoo/att.
- Inserire i propri record MX nel fornitore di dominio. Si deve avere un record MX altrimenti gli altri computer non saranno in grado di vedere il computer quando inviano email.
- Controllare i record MX:
host -t MX propriodominio.tld
- e i loro record A:
host -t A mx1.propriodominio.tld
anti-spam: restrizioni smtp
- La prima battaglia inizia dal proprio server perciò quello che segue andrebbe aggiunto ad ogni server di posta che si configura. Ciò assicura che qualsiasi computer che cerchi di inviare posta elettronica al proprio computer abbia un nome di dominio valido. (Gli spammer usano ad esempio myhomepc come nome di dominio. Questo impedirà loro di inviarvi spam.)
Inserire questo nel proprio file /etc/postfix/main.cf Necessita aggiornamento: alla data del 2024-09-30, sbl.spamhaus.org non ha una voce DNS:
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
Un elenco RBL è una lista di domini con l'indicazione se sono fonte di spam o meno Necessita aggiornamento: alla data del 2024-09-30, dnsbl.sorbs.net non ha una voce DNS.
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 per versioni pre-2.3 e http://www.sorbs.net/mailsystems/postfix-2.3.shtml per 2.3 e successive
e vedere per cosa non dovrebbe essere.
Consegna di posta con autenticazione
Questa sottosezione descrive come autenticare email usando i protocolli DKIM standard.
Vedere opendkim per configurare DKIM
TODO : documentare SPF e DMARC
Inoltrare posta elettronica
L'inoltro della posta elettronica può essere fatto attraverso un file chiamato /etc/aliases
- Eseguire questo comando per aggiungere mappe per gli alias:
postconf -e "alias_maps = hash:/etc/aliases"
Si possono ora aggiungere i propri utenti al file /etc/aliases in questo modo:
root: luca
- Si possono inoltrare i messaggi di posta ad un indirizzo di posta elettronica differente:
luca: miaemail@esempio.com
- Oppure si può inoltrare la propria posta e continuare a riceverne una copia nella casella di posta locale:
luca: luca miaemail@esempio.com
- Quando si sono aggiunti tutti gli alias, eseguire il comando seguente che crea un file in stile database:
newaliases
- Riavviare postfix
service postfix reload
Indirizzi di posta virtuali
Se si desiderano indirizzi di posta virtuali, come abuse o postmaster, si può fare quanto segue.
- Eseguire il comando seguente per aggiungere mappe di aliasi virtuali:
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"
- Creare un file /etc/postfix/virtual
vi /etc/postfix/virtual
- E aggiungere i propri indirizzi di posta virtuali
postmaster info@esempio.com abuse info@esempio.com unqualsiasiindirizzo luca
- Creare un file in stile database da questo file
postmap /etc/postfix/virtual
- Riavviare postfix
service postfix reload
Maildir
- Per usare il formato maildir nelle propria caselle di posta, creando così un file separato per ciascun messaggio di posta, si possono usare i comandi seguenti:
- Maildir ha alcuni vantaggi rispetto al formato mbox. (Mantiene i messaggi di posta in file separati, permette ad applicazioni multiple di leggere la posta, ecc.)
- Eseguire questi comandi:
postconf -e "home_mailbox = Maildir/" postconf -e "mailbox_command ="
- Fatto. Ora la posta viene gestita in formato Maildir.
Mutt
- Se si desidera leggere il proprio nuovo formato Maildir è necessario indicare a mutt di usarlo anch'esso. Modificare il suo file di configurazione globale:
vi /etc/Muttrc
- Aggiungere queste righe alla fine del file:
set folder="~/Maildir" set mask="!^\\.[^.]" set mbox="~/Maildir" set record="+.Sent" set postponed="+.Drafts" set spoolfile="~/Maildir"
Ora avviare mutt e inviare un messaggio di posta a sé stessi per vedere se tutto funziona come dovrebbe.
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.
- Installare mailman:
apt install mailman
- Quando questo è fatto, digitare:
newlist mailman
- Avviare mailman
/etc/init.d/mailman start
- Si dovrebbe ora essere in grado di vedere mailman in esecuzione. Visitare
- Dato che postfix è una scelta secondaria per Debian è necessario aggiungere quanto segue:
Modificare /etc/postfix/main.cf; alla voce "relay_domains" aggiungere lists.propriodominio.com. Si dovrebbe ottenere qualcosa di simile a questo:
relay_domains = esempio.com, lists.esempio.com
- Nello stesso file aggiungere ,hash:/var/lib/mailman/data/aliases alla voce alias_maps
alias_maps = hash:/etc/aliases,hash:/var/lib/mailman/data/aliases
- Ora digitare:
postconf -e "transport_maps = hash:/etc/postfix/transport" postconf -e "mailman_destination_recipient_limit = 1"
In /etc/postfix/master.cf aggiungere:
mailman unix - n n - - pipe flags=FR user=list argv=/var/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}
Modificare o creare /etc/postfix/transport. Aggiungere questa riga:
lists.esempio.com mailman:
- Poi usare postmap su di esso:
postmap /etc/postfix/transport
Ora modificare /etc/mailman/mm_cfg.py e aggiungere:
MTA = 'Postfix' DEB_LISTMASTER = 'postmaster@esempio.com' POSTFIX_STYLE_VIRTUAL_DOMAIN = ['lists.esempio.com']
- Fatto. Ora riavviare postfix e mailman
/etc/init.d/postfix reload /etc/init.d/mailman restart
- Creare una mailing list:
newlist nome_lista
Se si desidera tenerne un archivio aggiungere quanto segue in /etc/apache2/apache2.conf
Alias /pipermail/ /var/lib/mailman/archives/public/ Alias /images/mailman/ /usr/share/images/mailman/
Poi è necessario ricaricare apache:
/etc/init.d/apache2 reload
- Fatto. Andare all'indirizzo
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):
- non usare TLS/SSL per nulla (sono disponibili solamente connessioni non sicure).
- usare TLS/SSL, se possibile. Ripiegare altrimenti su connessioni non sicure.
- 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 2.3 e successive di Postfix 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 -e smtpd_use_tls ~# postconf -e 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.
Invio con SSL
Con i comandi seguenti Postfix viene configurato per usare TLS per inviare la posta:
~# postconf -e smtp_tls_security_level = may ~# postconf -e smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
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:
eth1 <IP pubblico con SPF pubblicato>
eth1:1 <IP pubblico per servizi extra basati su porte>
eth0 <IP privati>
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:
/etc/postfix/master.cf
clonare il servizio smtp (non smtpd). Impostare il primo in modo che usi <indirizzo IP SPF pubblicato> Rinominare il secondo in smtpinternal e usare <indirizzo IP interno>
smtp unix - - - - - smtp -o smtp_bind_address=<indirizzo IP SPF pubblicato> smtpinternal unix - - - - - smtp -o smtp_bind_address=<indirizzo IP interno>
/etc/postfix/main.cf
Usare transport_maps per l'instradamento
transport_maps = hash:/etc/postfix/transport
/etc/postfix/transport
- Mappare un trasporto per il proprio dominio interno.
.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:
/etc/postfix/main.cf
Usare l'impostazione inet_interfaces per rimanere in ascolto solamente sull'indirizzo IP desiderato.
inet_interfaces = 127.0.0.1, <IP interno>, <IP esterno SPF pubblicato>
Postfix e Sasl
Server SMTP: autenticazione SASL nel server SMTP Postfix
Client SMTP: autenticazione SASL nel client SMTP Postfix
Vedere anche
?Tutorial su Postfix
Informazioni specifiche di Debian
postfix - nella pagina del pacchetto Debian
postfix - nel tracciatore di pacchetti di Debian
postfix - bug nel BTS Debian
postfix - pagine di manuale in Debian
postfix nel tracciatore dei bug di sicurezza di Debian
Informazioni originali a monte
HowTo e FAQ - Tutorial e domande ricorrenti
Altre informazioni
CategoryNetwork CategoryMail CategorySoftware
I cosiddetti MTA "leggeri" come msmtp o sSMTP. (1)