User Tools

Site Tools


doc:appunti:linux:sa:postfix

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:postfix [2021/02/12 11:33] – [Problema virtual_alias_domains, myorigin e mydestination] niccolodoc:appunti:linux:sa:postfix [2024/02/26 10:18] (current) – [Socket in /var/run/ e nel chroot di Postfix: problema con tmpfs] niccolo
Line 130: Line 130:
  
 <file> <file>
-warning: do not list domain domain.tld in BOTH mydestination and virtual_alias_domains+warning: do not list domain mydomain.org in BOTH mydestination and virtual_alias_domains
 </file> </file>
  
Line 137: Line 137:
 <file> <file>
 #myorigin = /etc/mailname #myorigin = /etc/mailname
-myorigin = myserver +myorigin = mail.mydomain.org 
-mydestination = myserver localhost.localdomain localhost+mydestination = mail.mydomain.org localhost.localdomain localhost
 </file> </file>
 +
 +:!: **ATTENZIONE 1**: Il contenuto di **myorigin** viene usato anche per qualificare l'//envelope sender// dei messaggi generati automaticamente (ad esempio dal tool ''vacation''). È opportuno quindi che si tratti di un dominio completo, altrimenti è probabile che il messaggio venga rifiutato dal ricevente con l'errore **//Sender address rejected: need fully-qualified address//**. Non è strettamente necessario che si tratti di un dominio che riceve mail (cioè con record MX), in genere dovrebbe essere sufficiente che un mittente valido sia indicato nell'header ''From:''.
 +
 +:!: **ATTENZIONE 2**: Il contenuto di **myorigin** viene usato anche per qualificare i messaggi di errore **MAILER-DAEMON@**, è opportuno quindi che consenta di individuare il sistema di origine piuttosto che un dominio email. Quindi anche in questo caso si suggerisce di usare qualcosa del tipo ''mail.mydomain.org''.
 +
 +
 ===== Crittografia TLS ===== ===== Crittografia TLS =====
  
Line 254: Line 260:
 systemctl stop saslauthd.service systemctl stop saslauthd.service
 rmdir /var/run/saslauthd rmdir /var/run/saslauthd
 +mkdir -p /var/spool/postfix/var/run/saslauthd
 +chown root:sasl /var/spool/postfix/var/run/saslauthd
 +chmod 0710 /var/spool/postfix/var/run/saslauthd
 ln -s /var/spool/postfix/var/run/saslauthd /var/run ln -s /var/spool/postfix/var/run/saslauthd /var/run
 systemctl start saslauthd.service systemctl start saslauthd.service
Line 263: Line 272:
  
 <code> <code>
-dpkg-statoverride --add root sasl 750 /var/spool/postfix/var/run/saslauthd+dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd
 </code> </code>
  
Line 361: Line 370:
 chmod 0755 /var/spool/postfix/var/run/courier/authdaemon/ chmod 0755 /var/spool/postfix/var/run/courier/authdaemon/
  
-dpkg-statoverride --add courier courier 755 /var/spool/postfix/var/run/courier/authdaemon+dpkg-statoverride --add courier courier 750 /var/spool/postfix/var/run/courier/authdaemon
 adduser postfix courier adduser postfix courier
 </code> </code>
Line 383: Line 392:
  
 ==== Socket in /var/run/ e nel chroot di Postfix: problema con tmpfs ==== ==== Socket in /var/run/ e nel chroot di Postfix: problema con tmpfs ====
 +
 +Per **Debian 12 Bookworm** vedere la pagina dedicata **[[postfix_courier_authdaemon_debian_12]]**.
  
 Nelle moderne distribuzioni Debian (da 7 Wheezy in poi) la directory **''/var/run/''** viene creata in tmpfs e quindi al reboot è totalmente vuota. Questo è un problema perché la soluzione con il link simbolico vista al paragrafo precedente non sopravvive al reboot. Una soluzione poco elegante è modificare lo script **''/etc/init.d/courier-authdaemon''**, in modo che crei il link prima di avviare il servizio; inoltre questo è sconsigliato se si utilizza il moderno **systemd** (a partire da Debian 8 Jessie). Nelle moderne distribuzioni Debian (da 7 Wheezy in poi) la directory **''/var/run/''** viene creata in tmpfs e quindi al reboot è totalmente vuota. Questo è un problema perché la soluzione con il link simbolico vista al paragrafo precedente non sopravvive al reboot. Una soluzione poco elegante è modificare lo script **''/etc/init.d/courier-authdaemon''**, in modo che crei il link prima di avviare il servizio; inoltre questo è sconsigliato se si utilizza il moderno **systemd** (a partire da Debian 8 Jessie).
  
-Quindi la **soluzione ottimale** è utilizzare un **mount bind** della directory che contiene il socket e **incaricare systemd** di effettuare il mount prima di avviare Postfix. Il punto di montaggio deve essere creato come visto nel paragrafo precedente, la //mount unit// va creata in **/etc/systemd/system/**, deve avere il nome esatto **var-spool-postfix-var-run-courier-authdaemon.mount** e contiene:+La **soluzione ottimale** è utilizzare un **mount bind** della directory che contiene il socket e **incaricare systemd** di effettuare il mount prima di avviare Postfix. Il punto di montaggio deve essere creato come visto nel paragrafo precedente, la //mount unit// va creata in **/etc/systemd/system/**, deve avere il nome esatto **var-spool-postfix-var-run-courier-authdaemon.mount** e contiene:
  
 <file> <file>
 [Unit] [Unit]
 Description=Mount Courier Authdaemon into Postfix chroot Description=Mount Courier Authdaemon into Postfix chroot
-Requires=courier-authdaemon.service +Wants=courier-authdaemon.service 
-After=courier-authdaemon.service+# A stronger dependency may cause a Systemd ordering cycle problem. 
 +#Requires=courier-authdaemon.service 
 +#After=courier-authdaemon.service
  
 [Mount] [Mount]
Line 422: Line 435:
 Nell'esempio sopra si utilizza il servizio **submission** sulla porta **TCP/587**, se non viene specificata la porta verrà utilizzato **snmp** su porta **TCP/25**. Nell'esempio sopra si utilizza il servizio **submission** sulla porta **TCP/587**, se non viene specificata la porta verrà utilizzato **snmp** su porta **TCP/25**.
  
-**ATTENZIONE**: secondo le specifiche più recenti ([[https://tools.ietf.org/html/rfc6409|RFC 6409]]) l'invio autenticato deve avvenire sulla porta **submission**, pertanto molti server di posta non accettano più l'autenticazione sulla porta **smtp**. Se il server che funge da relayhost è basato su Postfix, la necessità dell'autenticazione è determinata dal parametro **smtpd_sasl_auth_enable**. Esso viene impostato in **main.cf** relativamente al servizio **smtp** oppure in **master.cf** relativamente al servizio **submission** (nella apposita sezione).+**ATTENZIONE**: secondo le specifiche più recenti ([[https://tools.ietf.org/html/rfc6409|RFC 6409]]) l'invio autenticato deve avvenire sulla porta **submission**, pertanto molti server di posta non accettano più l'autenticazione sulla porta **smtp**. Se il server che funge da relayhost è basato su Postfix, la necessità dell'autenticazione è determinata dal parametro **smtpd_sasl_auth_enable**. Esso viene impostato in **main.cf** relativamente al servizio **smtp** oppure in **master.cf** relativamente al servizio **submission** (nella apposita sezione), se il relayhost vuole rifiutare il submission ai client non autenticati, deve usare l'opzione ''smtpd_client_restrictions=permit_sasl_authenticated,reject''.
  
-Se lo smarthost richiede autenticazione con login e password questi sono i parametri necessari:+Lo smarthost generico viene dichiarato con questa direttiva:
  
 <file> <file>
 relayhost = smtp.example.org relayhost = smtp.example.org
 +</file>
 +
 +Se lo smarthost richiede autenticazione con login e password, questi sono i parametri necessari a configurare Postfix come client. Gli stessi parametri sono necessari ogni qual volta Postfix deve agire come client autenticato, ad esempio quando si stabiliscono dei transport specifici per sender o per recipient.
 +
 +<file>
 +# Enable SASL authentication in the Postfix SMTP client.
 smtp_sasl_auth_enable = yes smtp_sasl_auth_enable = yes
 +# Credentials for SASL authentication to remote hosts.
 smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
 +# Filter the remote SMTP server's list of offered SASL mechanisms.
 smtp_sasl_mechanism_filter = plain, login smtp_sasl_mechanism_filter = plain, login
-smtp_sasl_security_options =+# We use (encrypted) plaintext passwords; the default is noplaintext, noanonymous. 
 +smtp_sasl_security_options = noanonymous 
 +# The default SMTP TLS security level for the Postfix SMTP client: may or encrypt.
 smtp_tls_security_level = may smtp_tls_security_level = may
 </file> </file>
  
-L'opzione **smtp_tls_security_level** definisce se deve essere usata una connessione crittografata TLS; con **may** è facoltativa, per renderela obbligatoria va impostato su **encrypt**. È possibile rendere la cifratura obbligatoria solo se siamo certi che la nostra installazione agirà da client verso server che dispongono tutti di TLS, può essere il caso se utilizziamo sempre un solo relayhost. Ricordarsi che per utilizzare SSL si deve installare il pacchetto **libsasl2-modules**.+L'opzione **smtp_tls_security_level** definisce se deve essere usata una connessione crittografata TLS; con **may** è facoltativa, per renderela obbligatoria va impostato su **encrypt**. È possibile rendere la cifratura obbligatoria solo se siamo certi che la nostra installazione agirà da client verso server che dispongono tutti di TLS, può essere il caso se utilizziamo sempre un solo relayhost. Ad oggi (fine 2023) una buona percentuale di mail exchanger primari (MX di domini mail) non supportano alcuna crittografia. 
 + 
 +Ricordarsi che per utilizzare SSL si deve installare il pacchetto **libsasl2-modules**
 + 
 +L'opzione **smtp_sasl_mechanism_filter** non è strettamente necessaria in quanto abbiamo già definito la lista meccanismi supportati in **/etc/postfix/sasl/smtpd.conf**, che sono ''mech_list: PLAIN LOGIN''
 + 
 +L'opzione **smtp_sasl_security_options** deve essere specificata, altrimenti il valore predefinito **noplaintext, noanonymous** impedirebbe di usare il //mechanism plain// (viene effettivamente trasmessa la password, ma su canale cifrato).
  
 Le credenziali per l'autenticazione vanno messe nel file **''/etc/postfix/sasl_passwd''** che deve essere compilato con **''postmap''**: Le credenziali per l'autenticazione vanno messe nel file **''/etc/postfix/sasl_passwd''** che deve essere compilato con **''postmap''**:
Line 441: Line 470:
 <file> <file>
 smtp.example.org login_name:password smtp.example.org login_name:password
 +</file>
 +
 +Se non si installa il pacchetto **libsasl2-modules** l'errore nei log è qualcosa di simile:
 +
 +<file>
 +warning: SASL authentication failure: No worthy mechs found
 +SASL authentication failed; cannot authenticate to server smtp.example.org[10.11.12.13]: no mechanism available
 </file> </file>
  
Line 615: Line 651:
  
  
-===== Relay to network =====+===== Relay from network =====
  
 Per accettare la posta e farne il relay da un particolare indirizzo IP o network si usa la direttiva **mynetworks** di **''/etc/postfix/main.cf''**: Per accettare la posta e farne il relay da un particolare indirizzo IP o network si usa la direttiva **mynetworks** di **''/etc/postfix/main.cf''**:
Line 642: Line 678:
 ===== Sender rewrite ===== ===== Sender rewrite =====
  
-È possibile riscrivere l'indirizzo di provenienza di una mail, utile soprattutto per le mail generate in automatico da account locale, che altrimenti potrebbero avere indirizzi brutti e poco graditi ai filtri antispam, del tipo **root@localhost** oppure **nagios@host.domain.tld**.+È possibile riscrivere l'indirizzo di provenienza di una mail, utile soprattutto per le mail generate in automatico da account locale, che altrimenti potrebbero avere indirizzi brutti e poco graditi ai filtri antispam, del tipo **root@localhost** oppure **nagios@mail.mydomain.org**.
  
 Postfix dispone della direttiva **''sender_canonical_maps''**; basta aggiungere in main.cf qualcosa del genere: Postfix dispone della direttiva **''sender_canonical_maps''**; basta aggiungere in main.cf qualcosa del genere:
Line 654: Line 690:
  
 <file> <file>
-root                  user@domain.tld +root                    user@domain.tld 
-root@host.domain.tld  user@domain.tld+root@mail.mydomain.org  user@domain.tld
 </file> </file>
  
Line 690: Line 726:
 </file> </file>
  
-===== Relay domains =====+===== Relay by recipient or domain =====
  
 To relay mail for non-local domains (domains not in ''mydestination'' and not in local virtual domains), use the **''relay_domains''** setting: To relay mail for non-local domains (domains not in ''mydestination'' and not in local virtual domains), use the **''relay_domains''** setting:
Line 698: Line 734:
 relay_domains = www.mydomain.org, mydomain.org relay_domains = www.mydomain.org, mydomain.org
 </file> </file>
 +
 +**WARNING**: The receiving mail server will eventually check the SPF record and thus the relaying server should be placed into the SPF authorized hosts for the relayed domains.
  
 If you want to relay mail to a specific host - eventually not the one listed in MX records - you must provide a specific **transport map**, writing a file **''/etc/postfix/transport''** with something like this: If you want to relay mail to a specific host - eventually not the one listed in MX records - you must provide a specific **transport map**, writing a file **''/etc/postfix/transport''** with something like this:
Line 717: Line 755:
 user@local.domain  smtp:remote.realay.host user@local.domain  smtp:remote.realay.host
 </file> </file>
 +
 +If the relay host requires authentication, you may need to configure the Postfix client behaviour, see the **[[#smarthost_relayhost|relayhost paragraph]]**.
 +
 +
 +===== Relay by sender address =====
 +
 +It is possibile to select a different relay path for messages based on sender address. Add the directive **sender_dependent_relayhost_maps** to **main.cf**:
 +
 +<code>
 +sender_dependent_relayhost_maps = hash:/etc/postfix/sender_dependent_relayhost_maps
 +</code>
 +
 +Each line of the file must contain an expression matching the full sender address or the entire domain (preceeded by the **@**), and the name or address of the relay host:
 +
 +<file>
 +username@rigacci.org     relay2.rigacci.org
 +@domain2.org             relay3.rigacci.org
 +</file>
 +
 +Remember to recompile the file whenever you change it using **postmap** (no need to reload Postfix).
 +
 +All the standard requirements for a relay host are necessary: the relay host must be listed into the **SPF record** of the mail domain and the relay host should accept the original sender (e.g. via the **mynetworks** Postfix directive).
 +
 +If the relay host requires authentication, you may need to configure the Postfix client behaviour, see the **[[#smarthost_relayhost|relayhost paragraph]]**.
  
 ===== HELO hostname ===== ===== HELO hostname =====
Line 737: Line 799:
  
 I messaggi di errore hanno un lifetime a parte, definito dal parametro **bounce_queue_lifetime**. Anche in questo caso il valore predefinito di 5 giorni potrebbe essere eccessivo. I messaggi di errore hanno un lifetime a parte, definito dal parametro **bounce_queue_lifetime**. Anche in questo caso il valore predefinito di 5 giorni potrebbe essere eccessivo.
 +
 +<file>
 +# The message is considered undeliverable if a temporary error
 +# persists for more than "maximal_queue_lifetime" (default: 5d).
 +maximal_queue_lifetime = 1d
 +
 +# A bounce message becomes undeliverable if queued for more
 +# than "bounce_queue_lifetime" (default: 5d).
 +bounce_queue_lifetime = 6h
 +</file>
  
 ===== Delay Warning ===== ===== Delay Warning =====
Line 881: Line 953:
 debug_peer_level = 2 debug_peer_level = 2
 </file> </file>
 +
 +
 +====== Problemi SSL ======
 +
 +Se un server remoto tenta di stabilire una connessione cifrata, ma incontra qualche problema, si può riscontrare questo errore nel log:
 +
 +<code>
 +postfix/smtpd[1630564]: SSL_accept error from unknown[124.132.32.203]: lost connection
 +</code>
 +
 +Se si ha l'impostazione **smtpd_tls_security_level = may**, il server remoto dovrebbe riprovare senza crittografia, ma in caso di server difettosi può essere impossibile ricevere mail da quell'host.
 +
 +Una soluzione temporanea può essere quella di inibire il flag STARTTLS in risposta al comando EHLO, cioè non annunciare SSL a quel particolare host. Questo comportamento si ottiene con una riga in main.cf:
 +
 +<file>
 +# Discard some EHLO features for specific servers.
 +# E.g. disable starttls with broken servers.
 +smtpd_discard_ehlo_keyword_address_maps = hash:/etc/postfix/smtpd_discard_ehlo_keywords
 +</file>
 +
 +E il relativo file **smtpd_discard_ehlo_keywords** che contiene effettivamente l'esclusione:
 +
 +<file>
 +124.132.32.203 starttls
 +</file>
 +
 +Il file va compilato con postmap, ecc.
  
  
doc/appunti/linux/sa/postfix.1613125981.txt.gz · Last modified: 2021/02/12 11:33 by niccolo