doc:appunti:linux:sa:postfix
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
doc:appunti:linux:sa:postfix [2018/02/27 12:48] – [Rimuovere messagi dalla coda] niccolo | doc:appunti:linux:sa:postfix [2024/02/26 10:18] (current) – [Socket in /var/run/ e nel chroot di Postfix: problema con tmpfs] niccolo | ||
---|---|---|---|
Line 116: | Line 116: | ||
In questo caso l' | In questo caso l' | ||
+ | |||
+ | ==== Problema virtual_alias_domains, | ||
+ | |||
+ | Dopo che un indirizzo è stato valutato come locale (quando il dominio è contenuto in **virtual_alias_domains**), | ||
+ | |||
+ | < | ||
+ | nome.cognome@domain.tld | ||
+ | </ | ||
+ | |||
+ | A tutti gli effetti si ha quindi un **destinatario locale non qualificato**; | ||
+ | |||
+ | Il pacchetto Postfix di Debian configura **myorigin = / | ||
+ | |||
+ | < | ||
+ | warning: do not list domain mydomain.org in BOTH mydestination and virtual_alias_domains | ||
+ | </ | ||
+ | |||
+ | Se esiste un virtual domain con quel nome, la soluzione più corretta è utilizzare un **nome ad-hoc** per **myorigin** e aggiungerlo **mydestination**: | ||
+ | |||
+ | < | ||
+ | #myorigin = / | ||
+ | myorigin = mail.mydomain.org | ||
+ | mydestination = mail.mydomain.org localhost.localdomain localhost | ||
+ | </ | ||
+ | |||
+ | :!: **ATTENZIONE 1**: Il contenuto di **myorigin** viene usato anche per qualificare l'// | ||
+ | |||
+ | :!: **ATTENZIONE 2**: Il contenuto di **myorigin** viene usato anche per qualificare i messaggi di errore **MAILER-DAEMON@**, | ||
+ | |||
===== Crittografia TLS ===== | ===== Crittografia TLS ===== | ||
Line 207: | Line 236: | ||
</ | </ | ||
- | ===== Autenticazione SMTP ===== | + | ===== Autenticazione SMTP con SASL su PAM ===== |
+ | |||
+ | Questa autenticazione si basa sul sistema PAM (in pratica loing e password di **/ | ||
+ | |||
+ | * Postfix => saslauthd => PAM => / | ||
+ | |||
+ | Questa implementazione è fornita dal pacchetto **sasl2-bin** e va sotto il nome **Cyrus SASL**. In alternativa è possibile appoggiare Postfix all' | ||
Installare i pacchetti **sasl2-bin** e **libsasl2-modules**. | Installare i pacchetti **sasl2-bin** e **libsasl2-modules**. | ||
Line 223: | Line 258: | ||
< | < | ||
- | / | + | systemctl |
rmdir / | rmdir / | ||
+ | mkdir -p / | ||
+ | chown root:sasl / | ||
+ | chmod 0710 / | ||
ln -s / | ln -s / | ||
- | / | + | systemctl |
</ | </ | ||
Line 269: | Line 307: | ||
</ | </ | ||
- | Riavviare postfix con '' | + | Riavviare postfix con '' |
Verificare che l' | Verificare che l' | ||
Line 309: | Line 347: | ||
Il parametro di cui sopra è implicito se si attiva **'' | Il parametro di cui sopra è implicito se si attiva **'' | ||
===== Autenticazione SMTP su Courier Authdaemon ===== | ===== Autenticazione SMTP su Courier Authdaemon ===== | ||
+ | |||
+ | **ATTENZIONE**: | ||
Postfix può utilizzare l' | Postfix può utilizzare l' | ||
Line 320: | Line 360: | ||
</ | </ | ||
- | **ATTENZIONE: | + | **ATTENZIONE: |
+ | |||
+ | Questa ricetta è stata verificata su **Debian 9 Stretch**, verificare il proprietario e i permessi | ||
< | < | ||
Line 328: | Line 370: | ||
chmod 0755 / | chmod 0755 / | ||
- | dpkg-statoverride --add courier courier | + | dpkg-statoverride --add courier courier |
adduser postfix courier | adduser postfix courier | ||
</ | </ | ||
- | |||
- | La directory '' | ||
È necessario rendere disponibile il socket sia alla **posizione originale** (per i servizi Courier POP/IMAP) sia nel **chroot di Postfix**. Il sistema più moderno è un **mount bind**. Invece di aggiungere una entry in ''/ | È necessario rendere disponibile il socket sia alla **posizione originale** (per i servizi Courier POP/IMAP) sia nel **chroot di Postfix**. Il sistema più moderno è un **mount bind**. Invece di aggiungere una entry in ''/ | ||
Line 352: | 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 **''/ | Nelle moderne distribuzioni Debian (da 7 Wheezy in poi) la directory **''/ | ||
- | 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 **/ | + | 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 **/ |
< | < | ||
[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 381: | Line 425: | ||
Al successivo reboot troveremo il socket authdaemon disponibile nel chroot di Postfix. | Al successivo reboot troveremo il socket authdaemon disponibile nel chroot di Postfix. | ||
- | ===== Smarthost ===== | + | ===== Smarthost |
Per consegnare tutta la posta in uscita ad un relay SMTP si aggiunge in **''/ | Per consegnare tutta la posta in uscita ad un relay SMTP si aggiunge in **''/ | ||
< | < | ||
- | relayhost = smtp.example.org | + | relayhost = smtp.example.org:587 |
</ | </ | ||
- | Se lo smarthost richiede | + | Nell' |
+ | |||
+ | **ATTENZIONE**: | ||
+ | |||
+ | Lo smarthost generico viene dichiarato | ||
< | < | ||
relayhost = smtp.example.org | relayhost = smtp.example.org | ||
+ | </ | ||
+ | |||
+ | 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, | ||
+ | |||
+ | < | ||
+ | # 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:/ | smtp_sasl_password_maps = hash:/ | ||
+ | # Filter the remote SMTP server' | ||
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, |
+ | 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 | ||
</ | </ | ||
- | L' | + | L' |
+ | |||
+ | Ricordarsi che per utilizzare SSL si deve installare il pacchetto **libsasl2-modules**. | ||
+ | |||
+ | L' | ||
+ | |||
+ | L' | ||
Le credenziali per l' | Le credenziali per l' | ||
< | < | ||
- | smtp.example.org | + | smtp.example.org |
+ | </ | ||
+ | |||
+ | Se non si installa il pacchetto **libsasl2-modules** l' | ||
+ | |||
+ | < | ||
+ | warning: SASL authentication failure: No worthy mechs found | ||
+ | SASL authentication failed; cannot authenticate to server smtp.example.org[10.11.12.13]: | ||
</ | </ | ||
Line 445: | Line 516: | ||
somedomain.com | somedomain.com | ||
</ | </ | ||
+ | |||
+ | ===== Esempio di RBL zen.spamhaus.org ===== | ||
+ | |||
+ | In generale le RBL (real-time blackhole list) sono in effetti delle **[[wpit> | ||
+ | |||
+ | Il funzionamento di **zen.spamhaus.org** è spiegato nella pagina **[[https:// | ||
+ | |||
+ | < | ||
+ | dig +short 82.61.44.194.zen.spamhaus.org @dns.provider.tld | ||
+ | 127.0.0.4 | ||
+ | 127.0.0.3 | ||
+ | </ | ||
+ | |||
+ | anzitutto notiamo che la richiesta è stata inoltrata al server DNS **dns.provider.tld**, | ||
+ | |||
+ | Per avere un responso più descrittivo è possibile chiedere il **record di tipo TXT**: | ||
+ | |||
+ | < | ||
+ | dig +short -t TXT 82.61.44.194.zen.spamhaus.org @127.0.0.1 | ||
+ | " | ||
+ | " | ||
+ | </ | ||
+ | |||
+ | Attenzione al server DNS utilizzato! Alcuni server DNS pubblici e gratuiti (specificatamente quello di **Google 8.8.8.8**) non rispondono a questo tipo di query. Purtroppo un risultato negativo viene interpretato da Postifix come //indirizzo IP pulito//. È opportuno installare un server DNS locale per una maggiore efficienza delle interrogazioni. | ||
+ | ===== smtpd_sender_restrictions ===== | ||
+ | |||
+ | FIXME: Unificare con il paragrafo successivo. | ||
Se si gestiscono numerosi domini locali è possibile fare un controllo sull' | Se si gestiscono numerosi domini locali è possibile fare un controllo sull' | ||
Line 461: | Line 559: | ||
===== Restrizioni sull' | ===== Restrizioni sull' | ||
- | Si vuole impedire l' | + | Il controllo qui descritto va fatto solo sul servizio **submission** |
+ | |||
+ | **Non è possibile** fare tale controllo sulla normale **porta SMTP** (posta in arrivo da internet), perché la verifica del mittente richiederebbe una **interrogazione sul server MX del mittente**, non sempre possibile o accettata. | ||
< | < | ||
Line 490: | Line 590: | ||
^ reject | ^ reject | ||
- | I messaggi rifiutati saranno evidenziati nel log con i seguenti | + | I messaggi rifiutati saranno evidenziati nel log con i seguenti |
< | < | ||
Line 497: | Line 597: | ||
</ | </ | ||
+ | Con **Postfix 2.11** la verifica dell' | ||
+ | |||
+ | Esiste il [[https:// | ||
+ | |||
+ | < | ||
+ | postfix/ | ||
+ | No such file or directory (possible Berkeley DB bug) | ||
+ | </ | ||
+ | |||
+ | Pare che il bug non abbia conseguenze (parola dell' | ||
+ | |||
+ | <code bash> | ||
+ | mkdir -p / | ||
+ | chown postfix.postfix / | ||
+ | cp -p / | ||
+ | ln -sf / | ||
+ | chown -h postfix.postfix / | ||
+ | </ | ||
===== Restrizioni per localhost (es. PHP) ===== | ===== Restrizioni per localhost (es. PHP) ===== | ||
Line 533: | 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 **''/ | Per accettare la posta e farne il relay da un particolare indirizzo IP o network si usa la direttiva **mynetworks** di **''/ | ||
< | < | ||
- | mynetworks = 127.0.0.0/8 192.168.2.0/ | + | mynetworks = 127.0.0.0/8 192.168.2.0/ |
</ | </ | ||
+ | Notare che gli indirizzip IPv6 vanno racchiusi fra parentesi quadrate. | ||
===== Modifica degli header ===== | ===== Modifica degli header ===== | ||
Line 559: | Line 678: | ||
===== Sender rewrite ===== | ===== Sender rewrite ===== | ||
- | È possibile riscrivere l' | + | È possibile riscrivere l' |
Postfix dispone della direttiva **'' | Postfix dispone della direttiva **'' | ||
Line 571: | Line 690: | ||
< | < | ||
- | root user@domain.tld | + | root |
+ | root@mail.mydomain.org | ||
</ | </ | ||
Line 578: | Line 698: | ||
===== Destinatari locali non qualificati ===== | ===== Destinatari locali non qualificati ===== | ||
- | Ad un destinatario privo di dominio (es. **backup** o **root**) viene aggiunto il dominio specificato dall' | + | Ad un destinatario privo di dominio (es. **backup** o **root**) viene aggiunto il dominio specificato dall' |
- | Questa riscrittura avviene prima di applicare il contenuto di **'' | + | Questa riscrittura avviene prima di applicare il contenuto di **/ |
===== Messaggi di notifica a postmaster locale ===== | ===== Messaggi di notifica a postmaster locale ===== | ||
Line 606: | Line 726: | ||
</ | </ | ||
- | ===== Delay Warning ===== | + | ===== Relay by recipient or domain |
- | + | ||
- | Per impostazione predefinita Postfix non avvisa dei ritardi di consegna dei messaggi, se si vuole attivare questa opzione si imposta il parametro seguente: | + | |
- | + | ||
- | < | + | |
- | delay_warning_time = 4h | + | |
- | </ | + | |
- | ===== Relay domains | + | |
To relay mail for non-local domains (domains not in '' | To relay mail for non-local domains (domains not in '' | ||
Line 621: | Line 734: | ||
relay_domains = www.mydomain.org, | relay_domains = www.mydomain.org, | ||
</ | </ | ||
+ | |||
+ | **WARNING**: | ||
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 **''/ | 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 **''/ | ||
Line 640: | Line 755: | ||
user@local.domain | user@local.domain | ||
</ | </ | ||
+ | |||
+ | If the relay host requires authentication, | ||
+ | |||
+ | |||
+ | ===== 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**: | ||
+ | |||
+ | < | ||
+ | sender_dependent_relayhost_maps = hash:/ | ||
+ | </ | ||
+ | |||
+ | 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: | ||
+ | |||
+ | < | ||
+ | username@rigacci.org | ||
+ | @domain2.org | ||
+ | </ | ||
+ | |||
+ | 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, | ||
+ | |||
===== HELO hostname ===== | ===== HELO hostname ===== | ||
Line 652: | Line 792: | ||
# If we don't have the name registered as an A record, use an IP literal: | # If we don't have the name registered as an A record, use an IP literal: | ||
# | # | ||
+ | </ | ||
+ | |||
+ | ===== Lifetime dei messaggi ===== | ||
+ | |||
+ | Un messaggio che non riesca a ad arrivare a destinazione, | ||
+ | |||
+ | 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. | ||
+ | |||
+ | < | ||
+ | # The message is considered undeliverable if a temporary error | ||
+ | # persists for more than " | ||
+ | maximal_queue_lifetime = 1d | ||
+ | |||
+ | # A bounce message becomes undeliverable if queued for more | ||
+ | # than " | ||
+ | bounce_queue_lifetime = 6h | ||
+ | </ | ||
+ | |||
+ | ===== Delay Warning ===== | ||
+ | |||
+ | Per impostazione predefinita Postfix non avvisa dei ritardi di consegna dei messaggi, se si vuole attivare questa opzione si imposta il parametro seguente: | ||
+ | |||
+ | < | ||
+ | delay_warning_time = 4h | ||
</ | </ | ||
Line 761: | Line 925: | ||
< | < | ||
- | postfix-mx/ | + | postfix-mx/ |
- | postfix-mx/ | + | |
+ | postfix-mx/ | ||
+ | | ||
</ | </ | ||
Line 778: | Line 944: | ||
-o smtpd_client_restrictions=permit_sasl_authenticated, | -o smtpd_client_restrictions=permit_sasl_authenticated, | ||
</ | </ | ||
+ | |||
+ | ===== Debug ===== | ||
+ | |||
+ | Un sistema rapido per tracciare i problemi rispetto ad **uno o più host specifici**, | ||
+ | |||
+ | < | ||
+ | debug_peer_list = 192.168.10.12 10.0.0.13 [2a01: | ||
+ | debug_peer_level = 2 | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====== Problemi SSL ====== | ||
+ | |||
+ | Se un server remoto tenta di stabilire una connessione cifrata, ma incontra qualche problema, si può riscontrare questo errore nel log: | ||
+ | |||
+ | < | ||
+ | postfix/ | ||
+ | </ | ||
+ | |||
+ | Se si ha l' | ||
+ | |||
+ | 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: | ||
+ | |||
+ | < | ||
+ | # Discard some EHLO features for specific servers. | ||
+ | # E.g. disable starttls with broken servers. | ||
+ | smtpd_discard_ehlo_keyword_address_maps = hash:/ | ||
+ | </ | ||
+ | |||
+ | E il relativo file **smtpd_discard_ehlo_keywords** che contiene effettivamente l' | ||
+ | |||
+ | < | ||
+ | 124.132.32.203 starttls | ||
+ | </ | ||
+ | |||
+ | Il file va compilato con postmap, ecc. | ||
+ | |||
====== Postgrey ====== | ====== Postgrey ====== | ||
Line 794: | Line 997: | ||
Le opzioni si configurano in **''/ | Le opzioni si configurano in **''/ | ||
+ | |||
+ | Un messaggio rifiutato temporaneamente genera questa riga in **/ | ||
+ | |||
+ | < | ||
+ | postgrey[760]: | ||
+ | client_name=server.example.org, | ||
+ | sender=niccolo@domain.tld, | ||
+ | </ | ||
+ | |||
+ | Quando invece il messaggio viene accettato questo è il log: | ||
+ | |||
+ | < | ||
+ | postgrey[760]: | ||
+ | client_name=server.example.org, | ||
+ | sender=niccolo@domain.tld, | ||
+ | </ | ||
+ | |||
+ | Con il tool **postgreyreport** è possibile interrogare il database di postgrey (in **/ | ||
+ | |||
+ | < | ||
+ | cat / | ||
+ | </ |
doc/appunti/linux/sa/postfix.txt · Last modified: 2024/02/26 10:18 by niccolo