Size: 13614
Comment:
|
Size: 20290
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 13: | Line 13: |
=== Limitazioni di configurazione per antispam e antivirus === Idealmente, avrei voluto permettere ad ogni singolo utente di scegliere cosa fare dello spam, permettendogli di scegliere se bloccare (nel senso di rifiutare la mail a livello di protocollo SMTP rifiutandola con una permanent failure), oppure marcare con un header X-Spam-qualcosa le mail di spam, oppure non fare proprio il controllo antispam. Purtroppo questo e` un problema quando ci sono degli alias in gioco, perche` al momento in cui faccio il check (cioe` alla fine del blocco "DATA" dell'smtp) non sono in grado di determinare se il destinatario ultimo di una mail che viene diretta ad un alias vuole o no la funzione antispam/antivirus, per saperlo dovrei espandere l'alias fino agli indirizzi finali, e se questi sono piu` di uno e richiedono comportamenti diversi, ancora non saprei come comportarmi. Per uscire da questa impasse ci sono due soluzioni: una delle due e` quella di non fare il controllo antispam al momento della connessione SMTP entrante ma farlo al momento del delivery locale (questo metodo pero` mi impedisce di rifiutare il messaggio, ma mi costringe ad accettarlo e poi eventualmente cancellarlo) e l'altra e` quella che ho usato e che spiego nel dettaglio qui sotto. Nel sistema che uso, il controllo antispam/antivirus puo` essere gestito solo entro certi termini: * Se il destinatario della mail e` un utente, questo ha il controllo completo di cosa fare dello spam (non controllarlo, marcarlo o rifiutarlo) e di cosa fare dei virus (non controllarli o rifuitarli) mediante le apposite opzioni nel file /var/vmail/users/<dominio.tld>. * Se il destinatario della mail e` un alias, sia che questo ridiriga ad un solo utente che a una lista di utenti, il controllo antivirus sara` sempre attivo (i virus vengono rifiutati) e il controllo antispam sara` condfigurato nel file /var/vmail/aliases/<dominio.tld> per l'alias stesso, quindi le configurazioni degli utenti ai quali l'alias ridirige sono ignorate, e` la configurazione dell'alias che determina il comportamento dell'antispam. * Se il destinatario della mail e` un utente (o un alias) di un "domain alias", ovvero di un dominio configurato come alias di un altro nel file /etc/vmail/domain_aliases, allora il controllo antivirus sara` sempre attivo, e il controllo antispam potra` essere configurato a livello di intero dominio e non a livello di utente, nel file /etc/vmail/domain_aliases stesso. |
|
Line 18: | Line 28: |
* dovecot-imapd dovecot-pop3d | * dovecot-imapd dovecot-pop3d (versione 1.0rc presa da backports.org) |
Line 29: | Line 39: |
Per installare Dovecot da backports la soluzione semplice e`: * Aggiungere backports a /etc/apt/sources.list: {{{ deb http://www.backports.org/debian sarge-backports main contrib non-free }}} * Eseguire un update e poi installare i pacchetti necessari forzando l'uso di backports. I pacchetti di Backports hanno priorita` bassa quindi non si installeranno mai al posto di quelli ufficiali a meno che non li si forzi. Installando i pacchetti di backports si installano ovviamente anche le dipendenze da backports, quindi attenzione che queste non creino problemi. Nel caso, dovrete compilarvi dovecot dai sorgenti, perche` quello in Sarge e` proprio vecchio. {{{ apt-get update apt-get -t sarge-backports install dovecot-imapd dovecot-pop3d }}} |
|
Line 34: | Line 55: |
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 (necessario per poter usare autenticazioni in cui la password non viaggia in chiaro sulla linea) da un file di testo. Se si vuole usare mailbox, basta cambiare la parola "maildir" in "mailbox". La configurazione ` in /etc/dovecot/dovecot.conf. Vale la pena di leggersi la documentazione perche` questa configurazione e` funzionante ma minimale, ci sono mille features che possono essere messe a punto come meglio credete. Soprattutto, leggete le parti che riguardano i tweak per la compatibilita` con i client imap rognosi. {{{ |
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 (necessario per poter usare autenticazioni in cui la password non viaggia in chiaro sulla linea) da un file di testo. Se si vuole usare mailbox, basta cambiare la parola "maildir" in "mailbox" (ovviamente anche exim andra` adattato per lavorare in mailbox e non in maildir). La configurazione ` in /etc/dovecot/dovecot.conf. Vale la pena di leggersi la documentazione perche` questa configurazione e` funzionante ma minimale, ci sono mille features che possono essere messe a punto come meglio credete. Soprattutto, leggete le parti che riguardano i tweak per la compatibilita` con i client imap rognosi. {{{ |
Line 41: | Line 60: |
protocols = imap pop3 | protocols = imap pop3 imaps pop3s |
Line 52: | Line 71: |
# Consenti l'autenticazione plaintext disable_plaintext_auth = no |
|
Line 84: | Line 105: |
# un file per dominio, nella forma passwd.<dominio.tld> | # un file per dominio, con il nome di file <dominio.tld> |
Line 97: | Line 118: |
* Creare la directory /etc/vmail e le sottodirectory che conterranno tutte le configurazioni dei domini virtuali | {{{ mkdir /var/vmail chown mail.mail /var/vmail chmod 770 /var/vmail }}} * 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. |
Line 102: | Line 129: |
}}} * 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. |
mkdir /etc/vmail/filters touch /etc/vmail/domain_aliases }}} * 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. |
Line 108: | Line 137: |
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. attachment:exim4.conf | 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; lo trovate qui: attachment:exim4.conf. |
Line 114: | Line 143: |
* Manca ancora completamente la gestione dei filtri per gli utenti virtuali (l'equivalente del ".forward" nella home degli utenti reali) * per fare test, sono comodi i comandi "exim -bs -d" (sessione smtp con debug violento a console) ed "exim -e 'expressione'" per testare l'espressione (espansioni di variabili, if, e quant'altro). E` utile anche "exim -bh <indirizzo ip>.<porta> -d" che finge una sessione smtp provienente dall'indirizzo ip e porta indicati. |
* per fare test, sono comodi i comandi "exim4 -bs -d" (sessione smtp con debug violento a console) ed "exim4 -e 'expressione'" per testare l'espressione (espansioni di variabili, if, e quant'altro). E` utile anche "exim4 -bh <indirizzo ip>.<porta> -d" che finge una sessione smtp provienente dall'indirizzo ip e porta indicati. |
Line 120: | Line 148: |
* Volendo, modificare il file {{{/etc/spamassassin/local.cf}}} per modificare i punteggi. Il mio attuale e` modificato per aumentare il punteggio di Razor e diminuire quello di Habeas, il quale viene puntualmente abusato. {{{ |
* 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: {{{ OPTIONS="--create-prefs --max-children 5 --helper-home-dir --socketpath=/var/run/spamd.ctl" }}} Questa configurazione e` piu` sicura in quanto non usa il tcp ma solo un socket locale, pero` ovviamente impedisce di usare exim su una macchina e spamassassin su un'altra (o su un pool di altre macchine, opzione valida per fare load balancing). E` importante ricordare che se si usa il socket occorre dirlo anche ad Exim, modificando exim.conf. La configurazione qui allegata usa il socket. * Volendo, modificare il file {{{/etc/spamassassin/local.cf}}} per disattivare il check delle RBL da parte di spamassassin, in quanto il check e` gia` fatto da Exim prima di passare le mail a spamassassin. Inoltre e` possibile nello stesso file modificare i punteggi dati ai vari filtri. Il mio attuale e` modificato per aumentare il punteggio di Razor e diminuire quello di Habeas, il quale viene puntualmente abusato. {{{ # disattivazione check RBL skip_rbl_checks 1 # modifiche dei punteggi |
Line 125: | Line 163: |
Line 135: | Line 174: |
logfile = sys-syslog (questo non funziona attualmente) | # logfile = sys-syslog (questo non funziona attualmente, quindi e` inutile abilitarlo) |
Line 153: | Line 192: |
Dopo aver installato clamd (questa config usa clamd e non clamscan), occorre aggiungere l'utente clamd al gruppo debian-exim dentro /etc/groups, altrimenti clamd non puo` accedere ai files che exim gli passa da scansionare. | Dopo aver installato clamd (questa config usa clamd e non clamscan), occorre aggiungere l'utente "clamav" al gruppo "Debian-exim" dentro /etc/groups, altrimenti clamd non puo` accedere ai files che exim gli passa da scansionare. Dopo aver fatto questa modifica riavviare clamd. |
Line 174: | Line 214: |
Per avere degli alias nel dominio virtuale "pippo.com", occorre creare un file {{{/etc/vmail/aliases/pippo.com}}}. Questo file contiene un alias seguito da ":" e poi da tanti indirizzi mail quanti si vuole, sia appartenenti al dominio che no. Tutti gli indirizzi mail a destra del ":" vanno necessariamente messi completi di dominio, anche se si riferiscono al dominio locale. Una riga contenente "*:" alla fine del file ridirige qualsiasi indirizzo che non sia stato precedentemente elencato o che non esista come utente (quindi qualsiasi indirizzo "sbagliato") agli utenti indicati a destra del ":" | Per avere degli alias nel dominio virtuale "pippo.com", occorre creare un file {{{/etc/vmail/aliases/pippo.com}}}. Questo file contiene un alias seguito da ":" e poi da tanti indirizzi mail quanti si vuole, sia appartenenti al dominio che no, seguito da ":" e dalla stringa "spam=xxx" per attivare o disattivare il controllo dello spam per l'alias (vedasi la spiegazione del controllo dello spam e dei virus e delle relative limitazioni). Tutti gli indirizzi mail a destra del ":" vanno necessariamente messi completi di dominio, anche se si riferiscono al dominio locale. Una riga contenente "*:" alla fine del file ridirige qualsiasi indirizzo che non sia stato precedentemente elencato o che non esista come utente (quindi qualsiasi indirizzo "sbagliato") agli utenti indicati a destra del ":". |
Line 180: | Line 220: |
info: luigi@pippo.com, ubaldo@pippo.com, clodovalvolo@altrodominio.it *: poveroutentecheleggetuttalamailconindirizzierrati@pippo.com }}} Per finire, e` possibile indicare dei domini come "alias" di altri domini. Poniamo che una ditta abbia "pippo.com", "pippo.it" e "pippo.info". dopo aver definito tutti gli utenti e gli alias in "pippo.com", se vuole che gli stessi identici utenti siano raggiungibili anche sugli altri domini che ha, puo` creare un file {{{/etc/vmail/domain_aliases}}} e metterci dentro tante righe ognuna delle quali contiene a sinistra dei ":" il dominio a cui arriva la mail e a destra il dominio (uno solo!) a cui deve essere ridiretta. |
info: luigi@pippo.com, ubaldo@pippo.com, clodovalvolo@altrodominio.it:spam=block *: poveroutentecheleggetuttalamailconindirizzierrati@pippo.com:spam=warn }}} Per finire, e` possibile indicare dei domini come "alias" di altri domini. Poniamo che una ditta abbia "pippo.com", "pippo.it" e "pippo.info". dopo aver definito tutti gli utenti e gli alias in "pippo.com", se vuole che gli stessi identici utenti siano raggiungibili anche sugli altri domini che ha, puo` creare un file {{{/etc/vmail/domain_aliases}}} e metterci dentro tante righe ognuna delle quali contiene a sinistra dei ":" il dominio a cui arriva la mail e a destra il dominio (uno solo!) a cui deve essere ridiretta. Anche in questo caso e` possibile indicare come terzo parametro il comportamento che si vuole ottenere dall'antispam. |
Line 190: | Line 230: |
pippo.info:pippo.com | pippo.info:pippo.com:spam=warn |
Line 195: | Line 235: |
Per finire, in questa configurazione (NON PROVATO, l'ho copiato da exim3 ma non so se va) esiste anche la possibilita` di accettare sessioni smtp autenticate dagli utenti che magari sono fuori ufficio. Per farlo, occorre editare il file {{{/etc/exim4/passwd.smtp}}} inserendo una riga con {{{username:password}}} per ogni utente che si vuole che usi l'smtp autenticato. Di solito e` sufficiente inserire una sola per dominio e poi comunicarla a tutti gli utenti del dominio. Sto cercando di usare gli stessi username e password del pop3/imap4, ma ci vorra` della calma per arrivarci in fondo. | === Configurazione server smtp autenticato === In questa configurazione esiste anche la possibilita` di accettare sessioni smtp autenticate dagli utenti che magari sono fuori ufficio. Per farlo, occorre editare il file {{{/etc/exim4/passwd.smtp}}} inserendo una riga con {{{username:password}}} per ogni utente che si vuole che usi l'smtp autenticato. Di solito e` sufficiente inserire una sola per dominio e poi comunicarla a tutti gli utenti del dominio. Sto cercando di usare gli stessi username e password del pop3/imap4, ma ci vorra` della calma per arrivarci in fondo. === Configurazione filtri per gli utenti dei virtuali === E` possibile impostare dei filtri per gli utenti dei domini virtuali, nella forma di "forward files" o di filtri (Exim filter o Sieve Filter) creando un file per ogni utente, con nome {{{/etc/vmail/filters/<dominio.tld>/<utente>}}}. Questi files, che e` opportuno per motivi di sicurezza che NON siano creabili dagli utenti stessi ma solo dal sysadmin, possono servire per qualsiasi cosa si possa fare con un filtro di Exim. Per come e` fatto ora il sistema, eventuali delivery su file system (file, directory o anche pipe) sono fatti dall'utente "mail" gruppo "mail", per consistenza con il delivery che viene fatto normalmente dagli utenti dei domini virtuali. (al momento ho testato solo il delivery su directory). Il motivo principale per cui ho creato questi filtri e` quello di suddividere direttamente in vari folder i messaggi in base a regole, per esempio per smistare i messaggi in vari folder IMAP a seconda della mailing list a cui appartengono. Un esempio di filtro per dividere i messaggi in folders e` questo: (ovviamente vanno messi a posto i path con i dati giusti al posto di <domain> e <user>) {{{ # Exim filter # Questo e` sempre bene metterlo per evitare loops in caso di errori. if error_message then finish endif # Check se il list_id e` "xxx" allora scrivi nel folder della lista "xxx" if $header_List-id: contains "xxx xxx xxx" then save /var/vmail/<domain>/<user>/.Lista_XXX/ endif # Qui si possono mettere altri check per altre liste }}} |
Mail server con Exim4 / Dovecot / Clamav / Spamassassin
ATTENZIONE: Questa configurazione e` sperimentale e non e` ancora stata provata a fondo!
Questa e` una configurazione di un mail server completo, con supporto per diversi domini, antivirus e antispam. Le configurazioni sono realizzate su files di testo e non su database in quanto ritengo che sia piu` facile, per piccole installazioni che possono essere gestite da un sistemista che sa come editare un file di testo, evitare di usare un database e una interfaccia web per la configurazione. (Nutella ne sta facendo una versione con postgres e una interfaccia web realizzata appositamente, forse la pubblicheremo)
Descrizione tecnica
Questo sistema deve fornire un mail server con funzione di filtraggio dei virus e dello spam, supporto per client pop3 e imap4, e gestione di diversi domini virtuali. La configurazione e` fatta tutta su files di testo, ed e` studiata per essere semplice da gestire, ovvero per aggregare tutti i dati in pochi files per ogni dominio virtuale. Usando dei programmi come Dovecot ed Exim, che sono molto configurabili, e` possibile fare in modo che tutti e due accedano agli stessi files, e li usino "assieme", exim per decidere come fare il delivery della mail, e dovecot per autenticare gli utenti pop3 e imap4. Per lo storage della mail ho scelto di usare maildir, perche` e` molto piu` performante di mailbox, e se si vuole usare imap secondo me la velocita` e` fondamentale. Prevedendo di usare solo pop3, oppure accontentandosi di prestazioni scarse in imap, si puo` anche usare il formato mailbox. La mail viene comunque tutta tenuta in files e directory di proprieta` dell'utente "mail" sotto /var/vmail/<dominio>/<utente>. Gli utenti mail in questo setup sono totalmente svincolati dagli utenti locali della macchina. Usando questa configurazione un mail server che abbia soltanto un dominio deve comunque essere configurato in modo che il dominio sia virtuale, e gli utenti locali della macchina non abbiano nulla a che fare con gli utenti della mail.
I motivi di questa scelta sono diversi: prima di tutto gli utenti della macchina (per come e` configurato exim) non hanno ne` l'antivirus ne` l'antispam, inoltre gli utenti della macchina accederebbero in pop3 e imap usando la stessa password di login, e questo e` decisamente male dal punto di vista della sicurezza. Tra l'altro al momento Dovecot e` configurato in modo da non riconoscere proprio gli utenti della macchina, quindi questi non potrebbero proprio ricevere la mail in pop3 o imap4, ma solo leggerla localmente in shell.
Limitazioni di configurazione per antispam e antivirus
Idealmente, avrei voluto permettere ad ogni singolo utente di scegliere cosa fare dello spam, permettendogli di scegliere se bloccare (nel senso di rifiutare la mail a livello di protocollo SMTP rifiutandola con una permanent failure), oppure marcare con un header X-Spam-qualcosa le mail di spam, oppure non fare proprio il controllo antispam. Purtroppo questo e` un problema quando ci sono degli alias in gioco, perche` al momento in cui faccio il check (cioe` alla fine del blocco "DATA" dell'smtp) non sono in grado di determinare se il destinatario ultimo di una mail che viene diretta ad un alias vuole o no la funzione antispam/antivirus, per saperlo dovrei espandere l'alias fino agli indirizzi finali, e se questi sono piu` di uno e richiedono comportamenti diversi, ancora non saprei come comportarmi. Per uscire da questa impasse ci sono due soluzioni: una delle due e` quella di non fare il controllo antispam al momento della connessione SMTP entrante ma farlo al momento del delivery locale (questo metodo pero` mi impedisce di rifiutare il messaggio, ma mi costringe ad accettarlo e poi eventualmente cancellarlo) e l'altra e` quella che ho usato e che spiego nel dettaglio qui sotto.
Nel sistema che uso, il controllo antispam/antivirus puo` essere gestito solo entro certi termini:
Se il destinatario della mail e` un utente, questo ha il controllo completo di cosa fare dello spam (non controllarlo, marcarlo o rifiutarlo) e di cosa fare dei virus (non controllarli o rifuitarli) mediante le apposite opzioni nel file /var/vmail/users/<dominio.tld>.
Se il destinatario della mail e` un alias, sia che questo ridiriga ad un solo utente che a una lista di utenti, il controllo antivirus sara` sempre attivo (i virus vengono rifiutati) e il controllo antispam sara` condfigurato nel file /var/vmail/aliases/<dominio.tld> per l'alias stesso, quindi le configurazioni degli utenti ai quali l'alias ridirige sono ignorate, e` la configurazione dell'alias che determina il comportamento dell'antispam.
- Se il destinatario della mail e` un utente (o un alias) di un "domain alias", ovvero di un dominio configurato come alias di un altro nel file /etc/vmail/domain_aliases, allora il controllo antivirus sara` sempre attivo, e il controllo antispam potra` essere configurato a livello di intero dominio e non a livello di utente, nel file /etc/vmail/domain_aliases stesso.
Pacchetti
I pacchetti usati sono:
- dovecot-imapd dovecot-pop3d (versione 1.0rc presa da backports.org)
- exim4-daemon-heavy (versione 4.50 di Sarge)
- clamav-daemon
- spamassassin
- razor
Per avere delle versioni aggiornate di clamav (e forse in futuro di spamassassin) e` opportuno usare volatile.debian.net come repository, aggiungendo a /etc/apt/sources.list la riga:
deb http://volatile.debian.net/debian-volatile sarge/volatile main contrib non-free
Per installare Dovecot da backports la soluzione semplice e`:
- Aggiungere backports a /etc/apt/sources.list:
deb http://www.backports.org/debian sarge-backports main contrib non-free
- Eseguire un update e poi installare i pacchetti necessari forzando l'uso di backports. I pacchetti di Backports hanno priorita` bassa quindi non si installeranno mai al posto di quelli ufficiali a meno che non li si forzi. Installando i pacchetti di backports si installano ovviamente anche le dipendenze da backports, quindi attenzione che queste non creino problemi. Nel caso, dovrete compilarvi dovecot dai sorgenti, perche` quello in Sarge e` proprio vecchio.
apt-get update apt-get -t sarge-backports install dovecot-imapd dovecot-pop3d
Nota: e` necessario durante l'installazione rispondere ad alcune delle domande poste dal setup di exim4-config, anche se queste risposte sono totalmente inutili perche` la configurazione Debian di Exim4 sara` rasa al suolo senza pieta`.
Configurazione di Dovecot
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 (necessario per poter usare autenticazioni in cui la password non viaggia in chiaro sulla linea) da un file di testo. Se si vuole usare mailbox, basta cambiare la parola "maildir" in "mailbox" (ovviamente anche exim andra` adattato per lavorare in mailbox e non in maildir). La configurazione ` in /etc/dovecot/dovecot.conf. Vale la pena di leggersi la documentazione perche` questa configurazione e` funzionante ma minimale, ci sono mille features che possono essere messe a punto come meglio credete. Soprattutto, leggete le parti che riguardano i tweak per la compatibilita` con i client imap rognosi.
# Protocols we want to be serving: # imap imaps pop3 pop3s protocols = imap pop3 imaps pop3s # Prefix for each line written to log file. % codes are in strftime(3) # format. log_timestamp = "%Y-%m-%d %H:%M:%S " # Consenti di usare l' UID 8 per fare login first_valid_uid = 8 last_valid_uid = 8 # Consenti l'autenticazione plaintext disable_plaintext_auth = no # Grant access to these extra groups for mail processes. Typical use would be # to give "mail" group write access to /var/mail to be able to create dotlocks. mail_extra_groups = mail ## ## IMAP specific settings ## protocol imap { #imap_client_workarounds = outlook-idle } ## ## POP3 specific settings ## protocol pop3 { pop3_uidl_format = %08Xu%08Xv pop3_logout_format = top=%t/%T, retr=%r/%R, del=%d/%m, size=%s } ## ## AUTH backend su files di testo. ## auth default { mechanisms = plain digest-md5 cram-md5 apop ntlm rpa user = Debian-exim userdb static { args = uid=mail gid=mail home=/var/vmail/%d/%n mail=maildir:/var/vmail/%d/%n } # un file per dominio, con il nome di file <dominio.tld> passdb passwd-file { args = /etc/vmail/users/%d } }
Configurazione di Exim
Prima di tutto, occorre fare alcune operazioni a livello di file system:
- 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.
mkdir /var/vmail chown mail.mail /var/vmail chmod 770 /var/vmail
- 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.
mkdir /etc/vmail mkdir /etc/vmail/users mkdir /etc/vmail/aliases mkdir /etc/vmail/filters touch /etc/vmail/domain_aliases
- 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.
Poi, eliminare tutte le porcherie che Debian mette nella directory /etc/exim4 (se vi piace, conservatele da qualche parte) e crearci dentro un unico file di configurazione monolitico come era per exim3, che almeno cosi` ci si capisce qualcosa.
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; lo trovate qui: attachment:exim4.conf.
NOTE:
- La scansione antivirus la faccio dentro alla acl "acl_smtp_data" usando la funzione "demime" che e` deprecata. Dovrebbe essere fatta dentro l'acl "acl_smtp_mime", ma la versione 4.50 di Exim che c'e` in Sarge e` bacata e la soluzione che uso e` quella che di fatto funziona meglio. Usando versioni piu` nuove di Exim, il check dei virus va modificato.
- 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.
- Il meccanismo di insegnamento al filtro bayesiano NON e` stato minimamente provato
per fare test, sono comodi i comandi "exim4 -bs -d" (sessione smtp con debug violento a console) ed "exim4 -e 'expressione'" per testare l'espressione (espansioni di variabili, if, e quant'altro). E` utile anche "exim4 -bh <indirizzo ip>.<porta> -d" che finge una sessione smtp provienente dall'indirizzo ip e porta indicati.
Configurazione di Spamassassin
Editare il file /etc/defaul/spamassassin ed impostare ENABLED=1
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:
OPTIONS="--create-prefs --max-children 5 --helper-home-dir --socketpath=/var/run/spamd.ctl"
Questa configurazione e` piu` sicura in quanto non usa il tcp ma solo un socket locale, pero` ovviamente impedisce di usare exim su una macchina e spamassassin su un'altra (o su un pool di altre macchine, opzione valida per fare load balancing). E` importante ricordare che se si usa il socket occorre dirlo anche ad Exim, modificando exim.conf. La configurazione qui allegata usa il socket.Volendo, modificare il file /etc/spamassassin/local.cf per disattivare il check delle RBL da parte di spamassassin, in quanto il check e` gia` fatto da Exim prima di passare le mail a spamassassin. Inoltre e` possibile nello stesso file modificare i punteggi dati ai vari filtri. Il mio attuale e` modificato per aumentare il punteggio di Razor e diminuire quello di Habeas, il quale viene puntualmente abusato.
# disattivazione check RBL skip_rbl_checks 1 # modifiche dei punteggi score HABEAS_SWE 0.1 score RAZOR2_CF_RANGE_51_100 3.0
Eseguire /etc/init.d/spamassassin start per avviare il demone spamd (ovviamente al reboot partira` da solo)
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".
Configurazione di Razor
* Editare il file /etc/razor/razor-agent.conf modificandolo come segue:
logic_method = 4 # logfile = sys-syslog (questo non funziona attualmente, quindi e` inutile abilitarlo) ignorelist = 1 report_headers = 0
- Configurare Razor per la prima volta, come utente "mail", visto che poi girera` sempre come utente "mail".
# su - mail $ razor-admin -create $ razor-admin -discover $ razor-admin -register
Le configurazioni di Razor saranno salvate sotto la home dell'utente mail, nella directory ".razor".
Configurazione di Clamav
Dopo aver installato clamd (questa config usa clamd e non clamscan), occorre aggiungere l'utente "clamav" al gruppo "Debian-exim" dentro /etc/groups, altrimenti clamd non puo` accedere ai files che exim gli passa da scansionare. Dopo aver fatto questa modifica riavviare clamd.
Configurazione dei domini virtuali
Alla fine, se vogliamo che funzioni qualcosa, occorre definire almeno un dominio virtuale.
Per creare un dominio virtuale che abbia degli utenti, e` sufficiente creare un file con il nome del dominio dentro a /etc/vmail/users// Per esempio, /etc/vmail/users/pippo.com e` il file che contiene gli utenti del dominio "pippo.com".
Questo file e` composto di tante righe quante sono gli utenti, ognuna delle quali contiene username, password (in chiaro), ed eventualmente variabili che dicono come comportarsi con la scansione antivirus e antispam per l'utente. Queste variabili, facoltative, sono separate dalla password con un carattere ":" e sono separate fra di loro da spazi. Al momento esistono due variabili: "virus" e "spam". La variabile virus puo` essere "off" (virus=off) il che significa che il controllo antivirus viene disattivato per l'utente. Omettendo la variabile "virus" il controllo antivirus e` attivo di default. La variabile "spam" puo` essere "mark" oppure "block". Mark significa che lo spam viene marcato con un header aggiuntivo ma lasciato passare, mentre block significa che lo spam viene rifiutato con un messaggio di fallimento nella sessione smtp (550). Omettendo la variabile "spam" il controllo antispam e` disattivato completamente.
Quello che segue e` un esempio di file di configurazione per un dominio, contenente diversi utenti con diversi parametri. Notare che la sintassi per la password e` necessariamente "{plain}" seguito dalla password che volete, senza spazi in mezzo.
utente1:{plain}password1:virus=off spam=mark utente2:{plain}password2:spam=block utente3:{plain}password3 utente4:{plain}password4:spam=block virus=off utente5:{plain}password5:virus=off
Nei nomi utente e nelle password NON SI POSSONO USARE i ":" che sono riservati alla separazione dei campi fra loro.
Per avere degli alias nel dominio virtuale "pippo.com", occorre creare un file /etc/vmail/aliases/pippo.com. Questo file contiene un alias seguito da ":" e poi da tanti indirizzi mail quanti si vuole, sia appartenenti al dominio che no, seguito da ":" e dalla stringa "spam=xxx" per attivare o disattivare il controllo dello spam per l'alias (vedasi la spiegazione del controllo dello spam e dei virus e delle relative limitazioni). Tutti gli indirizzi mail a destra del ":" vanno necessariamente messi completi di dominio, anche se si riferiscono al dominio locale. Una riga contenente "*:" alla fine del file ridirige qualsiasi indirizzo che non sia stato precedentemente elencato o che non esista come utente (quindi qualsiasi indirizzo "sbagliato") agli utenti indicati a destra del ":".
Per esempio:
gigi: luigi@pippo.com info: luigi@pippo.com, ubaldo@pippo.com, clodovalvolo@altrodominio.it:spam=block *: poveroutentecheleggetuttalamailconindirizzierrati@pippo.com:spam=warn
Per finire, e` possibile indicare dei domini come "alias" di altri domini. Poniamo che una ditta abbia "pippo.com", "pippo.it" e "pippo.info". dopo aver definito tutti gli utenti e gli alias in "pippo.com", se vuole che gli stessi identici utenti siano raggiungibili anche sugli altri domini che ha, puo` creare un file /etc/vmail/domain_aliases e metterci dentro tante righe ognuna delle quali contiene a sinistra dei ":" il dominio a cui arriva la mail e a destra il dominio (uno solo!) a cui deve essere ridiretta. Anche in questo caso e` possibile indicare come terzo parametro il comportamento che si vuole ottenere dall'antispam.
Per esempio:
pippo.it:pippo.com pippo.info:pippo.com:spam=warn
Va notato che in questo caso non e` necessario che esistano files di utenti per i domini "ausiliari" (pippo.it e pippo.info) dentro a /var/vmail/users, tuttavia se esiste un file di utenti per uno di questi domini, all'arrivo di una mail per questo dominio il sistema prima verifichera` se esiste l' utente destinatario della mail nel file degli utenti, e se esiste gli mandera` la mail, poi se non lo trova ridirigera` la mail secondo il file domain_aliases all'utente omonimo in "pippo.com".
Configurazione server smtp autenticato
In questa configurazione esiste anche la possibilita` di accettare sessioni smtp autenticate dagli utenti che magari sono fuori ufficio. Per farlo, occorre editare il file /etc/exim4/passwd.smtp inserendo una riga con username:password per ogni utente che si vuole che usi l'smtp autenticato. Di solito e` sufficiente inserire una sola per dominio e poi comunicarla a tutti gli utenti del dominio. Sto cercando di usare gli stessi username e password del pop3/imap4, ma ci vorra` della calma per arrivarci in fondo.
Configurazione filtri per gli utenti dei virtuali
E` possibile impostare dei filtri per gli utenti dei domini virtuali, nella forma di "forward files" o di filtri (Exim filter o Sieve Filter) creando un file per ogni utente, con nome /etc/vmail/filters/<dominio.tld>/<utente>. Questi files, che e` opportuno per motivi di sicurezza che NON siano creabili dagli utenti stessi ma solo dal sysadmin, possono servire per qualsiasi cosa si possa fare con un filtro di Exim. Per come e` fatto ora il sistema, eventuali delivery su file system (file, directory o anche pipe) sono fatti dall'utente "mail" gruppo "mail", per consistenza con il delivery che viene fatto normalmente dagli utenti dei domini virtuali. (al momento ho testato solo il delivery su directory).
Il motivo principale per cui ho creato questi filtri e` quello di suddividere direttamente in vari folder i messaggi in base a regole, per esempio per smistare i messaggi in vari folder IMAP a seconda della mailing list a cui appartengono.
Un esempio di filtro per dividere i messaggi in folders e` questo: (ovviamente vanno messi a posto i path con i dati giusti al posto di <domain> e <user>)
# Exim filter # Questo e` sempre bene metterlo per evitare loops in caso di errori. if error_message then finish endif # Check se il list_id e` "xxx" allora scrivi nel folder della lista "xxx" if $header_List-id: contains "xxx xxx xxx" then save /var/vmail/<domain>/<user>/.Lista_XXX/ endif # Qui si possono mettere altri check per altre liste