Both sides previous revisionPrevious revisionNext revision | Previous revision |
linuxdebian:exim4-dovecot [2025/09/28 12:49] – kurgan | linuxdebian:exim4-dovecot [2025/09/28 17:50] (current) – [Autoreply] kurgan |
---|
| |
** Settembre 2025 - Aggiornato per Debian 13 ** In Debian 13 Exim è alla versione 4.98 e non ci sono differenze nella configurazione con la 4.96 di Debian 12, tuttavia Dovecot è alla versione 2.4.1 che è radicalmente diversa dalla 2.3.x, quindi ho dovuto riscrivere la configurazione quasi totalmente. Restano disponibili le versioni delle configurazioni per Debian 11 e 12 oltre alla 13. | ** Settembre 2025 - Aggiornato per Debian 13 ** In Debian 13 Exim è alla versione 4.98 e non ci sono differenze nella configurazione con la 4.96 di Debian 12, tuttavia Dovecot è alla versione 2.4.1 che è radicalmente diversa dalla 2.3.x, quindi ho dovuto riscrivere la configurazione quasi totalmente. Restano disponibili le versioni delle configurazioni per Debian 11 e 12 oltre alla 13. |
| |
| ** Settembre 2025 - Supporto per la compressione della maildir ** Nella config di Dovecot per Debian 13 ho abilitato di default la compressione delle maildir. La compressione richiede di usare Dovecot-LDA come metodo per salvare le mail in Exim (per default viene usato) ed è totalmente trasparente. Dovecot gestisce senza problemi anche email non compresse sul disco, quindi la si può attivare e disattivare quando si vuole anche se abbiamo già delle email non compresse nella nostra maildir. |
| |
**Giugno 2025 - Disabilitato clamav di default.** Visto che ClamAV è ufficialmente inutile, almeno con le signature standard, ho modificato la configurazione di Exim per disabilitare totalmente l'uso di ClamAV. Se volete potete riattivarlo impostando la variabile AVSCAN a "enabled". Questa modifica l'ho applicata solo alla versione per Debian 12 e 13. | **Giugno 2025 - Disabilitato clamav di default.** Visto che ClamAV è ufficialmente inutile, almeno con le signature standard, ho modificato la configurazione di Exim per disabilitare totalmente l'uso di ClamAV. Se volete potete riattivarlo impostando la variabile AVSCAN a "enabled". Questa modifica l'ho applicata solo alla versione per Debian 12 e 13. |
| |
| |
===== Nuovo in Debian 12 - Controllo SPF ed eventuale rifiuto ===== | ===== Nuovo in Debian 12 e 13 - Controllo SPF ed eventuale rifiuto ===== |
| |
In Debian 12 Exim è stato compilato per default con il supporto per la verifica del record SPF (in ricezione), e gestione del risultato nelle ACL. Nel file di configurazione per Debian 12 di exim che trovate allegato qui, ho attivato il controllo del record SPF del mittente. È una cosa in test, volendo potete eliminarla commentando le righe relative nelle ACL. Attualmente, se funziona correttamente, rifiuta le email che falliscono il controllo SPF soltanto se il mittente ha configurato il suo record spf con la stringa "-all" alla fine, ovvero il mittente stesso vuole che i destinatari rifiutino le mail che non passano il test. In ogni altro caso accetta la mail segnando nei log un warning. | |
| |
Questa parte è da collaudare e poi da migliorare, inserirò prossimamente un parametro di configurazione come per le altre funzioni come per dire il greylisting o l'uso delle RBL. | |
| |
| In Debian 12 Exim è stato compilato per default con il supporto per la verifica del record SPF (in ricezione), e gestione del risultato nelle ACL. Nel file di configurazione per Debian 12 e 13 di Exim che trovate allegato qui, ho attivato prova il controllo del record SPF del mittente. Dopo qualche giorno di test mi sono reso conto che in Debian 12 ci sono problemi. Ho trovato almeno un caso di un record SPF corretto (ma complesso) che fallisce il controllo mentre dovrebbe passarlo correttamente. Questo fatto, unito al fatto che moltissimi mittenti hanno SPF configurato male e quindi falliscono il controllo comunque, mi ha fatto decidere di lasciare il tutto in "warn" e non in "deny". In questo modo va tutto nei log e si può poi fare ulteriore statistica e decidere cosa fare in futuro. Non ho ancora avuto modo di verificare se in Debian 13 se non altro hanno corretto il bug per cui i record SPF complessi vengono male interpretati. |
| |
| |
| |
Dovecot va configurato per servire pop3 e imap4 usando delle maildir. Lavora sempre come uid "mail" e gid "mail", per qualsiasi utente di qualsiasi dominio. Legge le password in chiaro da un file di testo. (La scelta di usare password in chiaro è sicuramente controversa; avere le password in chiaro permette di usare metodi di autenticazione che crittano la password sulla linea. D'altro canto se usiamo solo SSL possiamo anche mandare le password in chiaro sulla linea, e tenerle crittate nel file di config) | Dovecot va configurato per servire pop3 e imap4 usando delle maildir. Lavora sempre come uid "mail" e gid "mail", per qualsiasi utente di qualsiasi dominio. Legge le password in chiaro da un file di testo. (La scelta di usare password in chiaro è sicuramente controversa; avere le password in chiaro permette di usare metodi di autenticazione che crittano la password sulla linea. D'altro canto se usiamo solo SSL possiamo anche mandare le password in chiaro sulla linea, e tenerle crittate nel file di config) |
| |
| |
La configurazione è contenuta nel file ''/etc/dovecot/dovecot.conf'' ed è monolitica, non utilizza alcuna altra configurazione (ne` i files dentro conf.d ne` la configurazione del database, in questo caso) | La configurazione è contenuta nel file ''/etc/dovecot/dovecot.conf'' ed è monolitica, non utilizza alcuna altra configurazione (ne` i files dentro conf.d ne` la configurazione del database, in questo caso) |
| |
In allegato trovate i files di config per Debian 11 e 12 (2.3.x) e per Debian 13 (2.4.x) | **In allegato trovate i files di config per Debian 11 e 12 (2.3.x) e per Debian 13 (2.4.x)** |
| |
| * Per Debian 11 e 12 {{ :linuxdebian:exim4-dovecot:dovecot-conf-2_3_x.txt |}} |
| * Per Debian 13 con supporto per la compressione delle mail sul disco {{ :linuxdebian:exim4-dovecot:dovecot-conf-2_4_1.txt |}} |
| |
Se volete attivare il supporto SSL, occorre generare dei certificati, siano essi "buoni" o fatti in casa. Per generare al volo dei certificati fatti in casa si puo` eseguire uno script che ha lo scopo di generare una coppia certificato/chiave e di metterla dove Dovecot si aspetta di trovarla. Prima modificare (volendo) la configurazione per metterci due cose sensate, modificare mkcert.sh per allungare la validita` da un anno a quanto volete voi, e poi eseguire mkcert, come indicato qui di seguito: | Se volete attivare il supporto SSL, occorre generare dei certificati, siano essi "buoni" o fatti in casa. Per generare al volo dei certificati fatti in casa si puo` eseguire uno script che ha lo scopo di generare una coppia certificato/chiave e di metterla dove Dovecot si aspetta di trovarla. Prima modificare (volendo) la configurazione per metterci due cose sensate, modificare mkcert.sh per allungare la validita` da un anno a quanto volete voi, e poi eseguire mkcert, come indicato qui di seguito: |
===== Configurazione di Exim ===== | ===== Configurazione di Exim ===== |
| |
Prima di tutto, occorre fare alcune operazioni a livello di file system: | Il file exim4.conf lo trovate qui allegato. Salvatelo come ''/etc/exim4/exim4.conf'' e guardateci dentro, ci sono tanti parametri da aggiustare per le vostre esigenze. |
* Creare la directory /var/vmail che conterra` la mail degli utenti dei domini virtuali e poi darle permessi 770 e assegnarla all'utente mail gruppo mail. | |
<code> | * Per Debian 11 e Devuan Chimaera (versione 4.94 di Exim) {{ :linuxdebian:exim4-dovecot:exim4.conf.v494.txt }} |
| * Per Debian 12 e 13 (versione 4.96 e 4.98 di Exim) {{ :linuxdebian:exim4-dovecot:exim4.conf.v496.txt }} |
| |
| Oltre a usare la configurazione allegata, occorre fare una serie di altre operazioni: |
| |
| * Creare la directory /var/vmail che conterra` la mail degli utenti dei domini virtuali e poi darle permessi 770 e assegnarla all'utente mail gruppo mail.<code -> |
mkdir /var/vmail | mkdir /var/vmail |
chown mail:mail /var/vmail | chown mail:mail /var/vmail |
</code> | </code> |
| |
* Creare la directory /etc/vmail e le sottodirectory che conterranno tutte le configurazioni dei domini virtuali. Creare il file /etc/vmail/domain_aliases, vuoto, per evitare di avere errori. Questo file potra` poi essere usato o meno, a seconda delle necessita`. Il suo uso e` spiegato piu` avanti. | * Creare la directory /etc/vmail e le sottodirectory che conterranno tutte le configurazioni dei domini virtuali. Creare il file /etc/vmail/domain_aliases, vuoto, per evitare di avere errori. Questo file potra` poi essere usato o meno, a seconda delle necessita`. Il suo uso e` spiegato piu` avanti.<code -> |
<code> | |
mkdir /etc/vmail | mkdir /etc/vmail |
mkdir /etc/vmail/users | mkdir /etc/vmail/users |
* Tutti i files dentro /etc/vmail dovranno essere leggibili (e non scrivibili) dal gruppo "Debian-exim" (con la maiuscola!) che e` il gruppo con cui di default gira Exim4 in Debian. I files che contengono le password devono essere NON LEGGIBILI da tutti. Il consiglio e` quello di fare un ''chown root:Debian-exim'' e poi un ''chmod 640'' dei files. | * Tutti i files dentro /etc/vmail dovranno essere leggibili (e non scrivibili) dal gruppo "Debian-exim" (con la maiuscola!) che e` il gruppo con cui di default gira Exim4 in Debian. I files che contengono le password devono essere NON LEGGIBILI da tutti. Il consiglio e` quello di fare un ''chown root:Debian-exim'' e poi un ''chmod 640'' dei files. |
| |
* Facoltativamente, puliamo /etc/exim4 dalle porcherie del compilatore di config di Debian (che non usiamo) e teniamo tutto da una parte. Se non lo faccio non cambia nulla, Exim userà la config che abbiamo fatto noi ''/etc/exim4.conf'' e ignorerà quella autogenerata. NOTA: se riavviamo Exim per qualsiasi motivo prima di avere creato il file di config nostro e dopo aver eliminato i files nativi debian, systemd si incazza.<code> | * Facoltativamente, puliamo /etc/exim4 dalle porcherie del compilatore di config di Debian (che non usiamo) e teniamo tutto da una parte. Se non lo faccio non cambia nulla, Exim userà la config che abbiamo fatto noi ''/etc/exim4.conf'' e ignorerà quella autogenerata. NOTA: se riavviamo Exim per qualsiasi motivo prima di avere creato il file di config nostro e dopo aver eliminato i files nativi debian, systemd si incazza.<code -> |
mkdir /etc/exim4/old | mkdir /etc/exim4/old |
mv /etc/exim4/* /etc/exim4/old/ | mv /etc/exim4/* /etc/exim4/old/ |
</code> | </code> |
| |
* Creiamo una directory per le chiavi dkim, che e` bene che ci sia anche se non vogliamo usarla. (Io la uso comunque, senza DKIM oramai non mandi la mail a nessuno dei big)<code> | * Creiamo una directory per le chiavi dkim, che e` bene che ci sia anche se non vogliamo usarla. (Io la uso comunque, senza DKIM oramai non mandi la mail a nessuno dei big)<code -> |
mkdir /etc/exim4/dkim | mkdir /etc/exim4/dkim |
</code> | </code> |
| |
| * Creiamo e poi rendiamo eseguibile lo script che invia email di allarme in caso di superamento del rate limit. Questo script va salvato come ''/etc/exim4/ratelimitalert.sh'' <code bash ratelimit.sh> |
Occorre creare lo script che invia email di allarme in caso di superamento del rate limit. Questo script, che si chiama ''/etc/exim4/ratelimitalert.sh'' deve essere eseguibile, e contiene quanto segue:<code> | |
#!/bin/bash | #!/bin/bash |
# script per inviare email in caso di allarme | # script per inviare email in caso di allarme |
</code> | </code> |
| |
| È opportuno usare dei retry molto frequenti per velocizzare l'invio di email a destinatari che usino la greylist. Questo pero` richiede che Exim esegua il run della coda piu` spesso dei 30 minuti standard in Debian. Per ridurre questo tempo, occorre modificare il file ''/etc/default/exim4''. |
| |
Il file exim4.conf lo devo allegare perche` contiene una serie di parentesi graffe che mandano in crisi il renderer del markup language del wiki. | * Per Debian 12, modificando il valore ''QUEUEINTERVAL'', cosi`:<code -> |
* Lo trovate qui per Debian 11 e Devuan Chimaera (versione 4.94 di Exim) {{ :linuxdebian:exim4-dovecot:exim4.conf.v494.txt |}} | |
* Lo trovate qui per Debian 12 e Devuan Daedalus (versione 4.96 di Exim) {{ :linuxdebian:exim4-dovecot:exim4.conf.v496.txt |}} | |
| |
| |
Nella configurazione allegata uso dei retry molto frequenti per velocizzare l'invio di email a destinatari che usino la greylist. Questo pero` richiede che Exim esegua il run della coda piu` spesso dei 30 minuti standard in Debian. Per ridurre questo tempo, occorre modificare il file ''/etc/default/exim4'' modificando il valore ''QUEUEINTERVAL'', cosi`: | |
<code> | |
# how often should we run the queue | # how often should we run the queue |
QUEUEINTERVAL='5m' | QUEUEINTERVAL='5m' |
| </code> |
| * Per Debian 13, modificando il parametro ''EXIMSERVICE'' cosi`:<code -> |
| EXIMSERVICE='-bdf -q5m' |
</code> | </code> |
| |
| |
| ==== NOTE su Exim: ==== |
| |
==== NOTE su Exim: ==== | |
* Le scansioni antivirus e antispam NON vengono fatte per gli utenti veri (quelli in /etc/passwd) della macchina. L'idea e` che questo sistema nasce per servire la mail solo agli utenti virtuali. | * Le scansioni antivirus e antispam NON vengono fatte per gli utenti veri (quelli in /etc/passwd) della macchina. L'idea e` che questo sistema nasce per servire la mail solo agli utenti virtuali. |
* per fare test, sono comodi i seguenti comandi: | * Per fare test sono comodi i seguenti comandi: |
|| ''exim4 -bP'' || Dump nella configurazione che Exim ha in memoria, compresi i valori di default || | |
|| ''exim4 -bs -d'' || Sessione smtp "in console" con debug molto dettagliato || | | ''exim4 -bP'' | Dump nella configurazione che Exim ha in memoria, compresi i valori di default | |
|| ''exim4 -be -d+expand 'espressione''' || per testare una espressione (espansioni di variabili, if, e quant'altro). Notare gli apici singoli intorno all'espressione, fondamentali || | | ''exim4 -bs -d'' | Sessione smtp "in console" con debug molto dettagliato | |
|| ''exim -bt <email address>'' || Per testare i le regole di routing delle mail. Exim finge di mandare una mail a quell'indirizzo e ci mostra con che router e trasporto la manderebbe (sia locale che remoto) || | | ''exim4 -be -d+expand 'espressione''' | per testare una espressione (espansioni di variabili, if, e quant'altro). Notare gli apici singoli intorno all'espressione, fondamentali | |
|| ''exim4 -bh <indirizzo ip>.<porta> -d'' || Esegue una sessione smpt in console fingendo che sia provienente dall'indirizzo ip e porta indicati. || | | ''exim -bt <email address>'' | Per testare i le regole di routing delle mail. Exim finge di mandare una mail a quell'indirizzo e ci mostra con che router e trasporto la manderebbe (sia locale che remoto) | |
| | ''exim4 -bh <indirizzo ip>.<porta> -d'' | Esegue una sessione smpt in console fingendo che sia provienente dall'indirizzo ip e porta indicati. | |
| |
| |
* Editare il file ''/etc/default/spamd'' ed impostare ENABLED=1 (in Debian 11, e` ''/etc/default/spamassassin'') | * Editare il file ''/etc/default/spamd'' ed impostare ENABLED=1 (in Debian 11, e` ''/etc/default/spamassassin'') |
* Debian 11: Volendo, in fondo, mettere CRON=1 per ricevere aggiornamenti alle regole di spamassassin (nota: questa opzione funziona ancora anche in debian 12, anche se in Debian 12 c'e` un timer in systemd che possiamo usare al posto di questa configurazione) | * Debian 11: Volendo, in fondo, mettere CRON=1 per ricevere aggiornamenti alle regole di spamassassin (nota: questa opzione funziona ancora anche in debian 12, anche se in Debian 12 c'e` un timer in systemd che possiamo usare al posto di questa configurazione) |
* Debian 12: volendo possiamo usare il comando ''systemctl enable --now spamassassin-maintenance.timer'' invece di usare CRON=1 come indicato nella riga precedente. | * Debian 12 e 13: volendo possiamo usare il comando ''systemctl enable --now spamassassin-maintenance.timer'' invece di usare CRON=1 come indicato nella riga precedente. |
* Se si vuole usare spamd attraverso un socket e non attraverso una connessione tcp a localhost, e` possibile farlo modificando ''/etc/default/spamassassin'' in modo da aggiungere alle opzioni quella per usare il socket (socketpath=xxx). In questo modo la riga OPTIONS diventa: | * Se si vuole usare spamd attraverso un socket e non attraverso una connessione tcp a localhost, e` possibile farlo modificando ''/etc/default/spamassassin'' in modo da aggiungere alle opzioni quella per usare il socket (socketpath=xxx). In questo modo la riga OPTIONS diventa:<code> |
<code> | |
OPTIONS="--create-prefs --max-children 5 --helper-home-dir --socketpath=/var/run/spamd.ctl" | OPTIONS="--create-prefs --max-children 5 --helper-home-dir --socketpath=/var/run/spamd.ctl" |
</code> | </code> |
</code> | </code> |
| |
* Debian 11: Eseguire ''/etc/init.d/spamassassin start'' per avviare il demone spamd (ovviamente al reboot partira` da solo) | * Eseguire ''systemctl restart spamd'' per riavviare spamassassin |
* Debian 12: Eseguire ''systemctl restart spamd'' | |
| |
In questo setup, spamassassin (in realta` il demone spamd) viene sempre chiamato dall'utente "mail", quindi per qualsiasi utente di qualsiasi dominio il database bayesiano sara` sempre lo stesso, e si trovera` nella home dell'utente mail sotto una directory con nome ".spamassassin". | In questo setup, spamassassin (in realta` il demone spamd) viene sempre chiamato dall'utente "mail", quindi per qualsiasi utente di qualsiasi dominio il database bayesiano sara` sempre lo stesso, e si trovera` nella home dell'utente mail sotto una directory con nome ".spamassassin". |
===== Autoreply ===== | ===== Autoreply ===== |
| |
**Nota: questa soluzione, seppure funzionante, e` resa obsoleta dall'uso di filtri Sieve con Dovecot. (Vedasi [[Dovecot-Sieve]])** | **Nota: questa soluzione, seppure funzionante, e` resa obsoleta dall'uso di filtri Sieve con Dovecot.** |
| |
E` possibile attivare un risponditore automatico in stile "vacation" che risponde alle mail di un utente tramite un messaggio con un subject preimpostato e un testo libero. Per farlo, occorre creare un file con nome ''/etc/vmail/autoreply/<dominio>/<utente>'' (ad esempio, /etc/vmail/autoreply/pippo.it/prova per l'utente "prova@pippo.it"). All'interno di quel file, va scritto il testo della risposta automatica, che puo` essere lungo quanto si vuole e composto di piu` righe senza problemi. L'autoreply e` limitato a una risposta al giorno per mittente, questo limite e` impostabile solo nella configurazione ed e` valido per tutti gli utenti, non si puo` differenziare per singolo utente. Per disattivare l'autoreply, va cancellato o rinominato il file. | E` possibile attivare un risponditore automatico in stile "vacation" che risponde alle mail di un utente tramite un messaggio con un subject preimpostato e un testo libero. Per farlo, occorre creare un file con nome ''/etc/vmail/autoreply/<dominio>/<utente>'' (ad esempio, /etc/vmail/autoreply/pippo.it/prova per l'utente "prova@pippo.it"). All'interno di quel file, va scritto il testo della risposta automatica, che puo` essere lungo quanto si vuole e composto di piu` righe senza problemi. L'autoreply e` limitato a una risposta al giorno per mittente, questo limite e` impostabile solo nella configurazione ed e` valido per tutti gli utenti, non si puo` differenziare per singolo utente. Per disattivare l'autoreply, va cancellato o rinominato il file. |