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.1519732083.txt.gz · Last modified:  by niccolo
                
                