User Tools

Site Tools


doc:appunti:linux:sa:dspam

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:dspam [2009/10/09 00:24] niccolodoc:appunti:linux:sa:dspam [2009/10/09 13:13] (current) niccolo
Line 22: Line 22:
 spamd[7122]: prefork: server reached --max-children setting, consider raising it spamd[7122]: prefork: server reached --max-children setting, consider raising it
 </file> </file>
 +
 +Da approfondire:
 +  * Greylisting con TumgreySPF
 +  * Pacchetto **greylistd** e comando ''greylistd-setup-exim4''
  
 ===== Installazione su Debian Lenny ===== ===== Installazione su Debian Lenny =====
Line 37: Line 41:
  
 Debian mette il front-end web all'indirizzo **''%%http://<host>/dspam/%%''**. Debian mette il front-end web all'indirizzo **''%%http://<host>/dspam/%%''**.
 +
 +===== Configurazione =====
 +
 +**''/etc/dspam/dspam.conf''**
 +
 +<file>
 +# DSPAM storage.
 +Home /var/spool/dspam
 +StorageDriver /usr/lib/dspam/libhash_drv.so
 +
 +# Exim4 integration.
 +TrustedDeliveryAgent "/usr/sbin/exim4 -oi"
 +
 +# Default filtering: active (user can opt-out).
 +Opt out
 +
 +# Daemon configuration.
 +ServerPort              10024
 +ServerPass.Relay1       "8d0b79d1f6a3"
 +
 +# Client configuration.
 +ClientHost      127.0.0.1
 +ClientPort      10024
 +ClientIdent     "8d0b79d1f6a3@Relay1"
 +</file>
 +
 +==== Test ====
 +
 +Per testare il funzionamento del sistema ''dspam'' senza passare dal MTA si può usare un comando del genere:
 +
 +<code>
 +cat spam_message.txt \
 +    | /usr/bin/dspam --deliver=innocent,spam --user niccolo --stdout
 +</code>
 +
 +Il messaggio filtrato viene mostrato a video, indipendentemente dal fatto che sia identificato come spam o meno. L'operazione viene conteggiata nelle statistiche, compare nella history dell'interfaccia web, interessa la quarantena in caso di ''%%--deliver=innocent%%'' (vedi sotto), ecc.
 +
 +==== Storage ====
 +
 +Per default viene usato Hash-Based Driver, una buona alternativa è PostgreSQL. Con l'Hash-Based Driver vengono creati i file con le statistiche per ogni utente in una struttura di directory **''/var/spool/dspam/data/local/<login>/''**.
 +
 +Se lo storage è un PostgreSQL c'è il vantaggio che l'alias per l'invio di spam/nospam può essere unico per tutto il dominio di posta, invece di averne uno per ogni utente.
 +
 +==== Demone ====
 +
 +In condizioni normali viene invocata un'istanza di ''dspam'' per ogni messaggio da filtrare. In alternativa può risultare conveniente attivare una sola istanza **daemon** di ''dspam'' ed eseguire il filtro con l'opzione **''%%--client%%''**.
 +
 +Volendo far girare il demone senza i privilegi di superutente bisogna scegliere una porta > 1024, impostando il parametro **''ServerPort''** (quella predefinita è la **TCP 24**). Per consentire ai client di passare al daemon i parametri del comando (viene usato il protocollo proprietario DLMTP) è necessaria una autenticazione client/server, il modo più semplice è impostare il parametro **''ServerPass.<relay>''**.
 +
 +Infine si imposta **''START=yes''** in **''/etc/default/dspam''** e si avvia il demone con **''/etc/init.d/dspam start''**.
 +
 +Ogni invocazione di ''dspam'' dovrà includere l'opzione **''%%--client%%''** e dovrà trovare nel file di configurazione ''/etc/dspam/dspam.conf'' i tre parametri **ClientHost**, **ClientPort** e **ClientIdent**. In caso contrario ''dspam'' verrà eseguito silenziosamente in modalità stand-alone. Per il massimo dell'efficienza esiste anche il thin-client **''dspamc''**, che include nell'eseguibile solo le funzioni di client.
 +
 +==== Quarantena ====
 +
 +L'azione predefinita di ''dspam'' - quando identifica un messaggio di spam - è metterlo in quarantena, cioè memorizzarlo nel suo storage. Tramite l'**interfaccia web** l'utente può vedere i messaggi in quarantena, cancellarli oppure farli recapitare normalmente.
 +
 +Se l'utente decide di recapitare normalmente un messaggio presente in quarantena, questo **viene considerato non-spam e va ad istruire il filtro Bayesiano** opportunamente. Nella history verrà evidenziato come //Retrained//.
 +
 +Se ''dspam'' è configurato come filtro nel MTA e viene invocato con l'opzione **''%%--deliver=innocent,spam%%''**, il messaggio di spam viene recapitato al destinatario senza essere messo nella quarantena. Viene tuttavia aggiunto l'header **''X-DSPAM-Result: Spam''**.
 +
 +==== Debug ====
 +
 +Se si avvia ''dspam'' con l'opzione **''%%--debug%%''**, viene creato il file **''/var/log/dspam/dspam.debug''**, oltre al normale **''dspam.messages''**.
 +
 +==== Impostazioni system-wide ====
 +
 +Le impostazioni utente sono modificabili dalla scheda **Preferences** dell'interfaccia web. L'amministratore può impostare i valori predefiniti modificando le **Preference** in **''/etc/dspam/dspam.conf''**:
 +
 +<file>
 +Preference "spamAction=tag"
 +Preference "signatureLocation=headers"
 +Preference "showFactors=on"
 +Preference "spamSubject=SPAM"
 +</file>
 +
 +==== Statistiche ====
 +
 +Il superutente può chiedere le statistiche sul filtraggio dei messsaggi con il comando:
 +
 +<code>
 +dspam_stats -H
 +</code>
  
 ===== Integrazione con Exim4 ===== ===== Integrazione con Exim4 =====
Line 58: Line 145:
  
 **''/etc/exim4/conf.d/router/550_local_dspam''** **''/etc/exim4/conf.d/router/550_local_dspam''**
 +
 +Oltre al router che instrada i messaggi al filtro dspam, vengono definiti due alias per ogni utente: **''//login//-spam''** e **''//login//-nospam''** a cui l'utente invierà i falsi negativi e i falsi positivi rispettivamente.
 +
 +Fare attenzione che questo **non funziona in caso di alias diversi dal login** (usati in genere con i domini virtuali), cioè non funziona **''niccolo.rigacci-spam@example.org''**, ma funziona solo **''niccolo-spam@example.org''**.
  
 <file> <file>
Line 97: Line 188:
   transport = dspam_class_innocent   transport = dspam_class_innocent
 </file> </file>
 +
  
 **''/etc/exim4/conf.d/transport/40_local_dspam''** **''/etc/exim4/conf.d/transport/40_local_dspam''**
 +
 +Il transport di Exim4 è configurato come **''driver = pipe''**, cioè il messaggio viene passato via standard input al comando ''dspam'', che viene eseguito con lo UID e GID specificati (''dspam:dspam''). Con questa configurazione ''dspam'' passa la mail filtrata nuovamente ad Exim, quindi non ha bisogno dei privilegi di superutente.
  
 <file> <file>
Line 147: Line 241:
 </file> </file>
  
-Il transport di Exim4 è configurato come **''driver pipe''**, cioè il messaggio viene passato via stdinput al comando ''dspam'', che viene eseguito con lo UID e GID specificati (''dspam:dspam''). Con questa configurazione ''dspam'' passa la mail filtrata nuovamente ad Exim, quindi non ha bisogno dei privilegi di superutente. +===== Alternativa procmail =====
- +
-==== Alternativa ====+
  
 Con la configurazione vista sopra **ciascun messaggio passa per due volte nella mail queue**: prima e dopo essere stato filtrato da ''dspam''. Questo consente di processare ulteriormente il messaggio filtrato con gli strumenti di Exim: instradamento verso altri host, espansione del destinatario tramite alias, applicazione di ACL, ecc. Con la configurazione vista sopra **ciascun messaggio passa per due volte nella mail queue**: prima e dopo essere stato filtrato da ''dspam''. Questo consente di processare ulteriormente il messaggio filtrato con gli strumenti di Exim: instradamento verso altri host, espansione del destinatario tramite alias, applicazione di ACL, ecc.
  
-In alternativa si può configurare ''dspam'' in modo che provveda direttamente a consegnare la posta nella mailbox, ad esempio avvalendosi di ''procmail''.+In alternativa si può utilizzare ''dspam'' come filtro di **''procmail''**. In tal caso dspam può essere attivato sulla singola mailbox, può essere messo in serie ad altri filtri per il dirottamento dello spam su apposita maildir oppure per il controllo antivirus, ecc.
  
-FIXME+Uno svantaggio è che questo metodo può essere usato **solo per utenti di sistema locali**, non funziona quindi con sistemi di virtualizzazione delle mailbox oppure se la mailbox risiede su altro host. Inoltre con il filtraggio tramite ''procmail'' **non si hanno a disposizione gli alias di posta** a cui inoltrare i messaggi non correttamente classificati, funziona solo l'interfaccia web.
  
-==== Alternativa 2 ==== 
  
-In alternativa all'integrazione con l'MTA, ''dspam'' può essere invocato da **''procmail''** durante la fase finale della consegna. +Ecco un esempio di file **''$HOME/.procmailrc''** che lavora su Maildir, filtra i messaggi e salva lo spam in apposita cartella:
- +
-FIXME +
- +
-===== Configurazione ===== +
- +
-**''/etc/dspam/dspam.conf''**+
  
 <file> <file>
-DSPAM storage+#------------------------------------------------------------------------- 
-Home /var/spool/dspam +# $HOME/.procmailrc 
-StorageDriver /usr/lib/dspam/libhash_drv.so+#------------------------------------------------------------------------- 
 +PATH=/usr/local/bin:/usr/bin:/bin 
 +SHELL=/bin/bash 
 +UMASK=007
  
-Exim4 integration+Use user's Maildir instead of /var/mail/
-TrustedDeliveryAgent "/usr/sbin/exim4 -oi"+MAILDIR=$HOME/Maildir/ 
 +ORGMAIL=$MAILDIR 
 +DEFAULT=$MAILDIR 
 +#LOGFILE=$HOME/procmail.log 
 +#VERBOSE=yes
  
-Default filtering: active (user can opt-out). +#------------------------------------------------------------------------- 
-Opt out+# Filter messages (below 512 Kbwith dspam
 +#------------------------------------------------------------------------- 
 +:0 fw 
 +* < 524288 
 +| /usr/bin/dspam --debug --user niccolo --deliver=innocent,spam --stdout
  
-Daemon configuration. +#------------------------------------------------------------------------- 
-ServerPort              10024 +# Spam messages marked by dspam
-ServerPass.Relay1       "8d0b79d1f6a3" +#------------------------------------------------------------------------- 
- +:: 
-Client configuration. +* ^X-DSPAM-Result: spam 
-ClientHost      127.0.0.1 +.Spam/
-ClientPort      10024 +
-ClientIdent     "8d0b79d1f6a3@Relay1"+
 </file> </file>
- 
-==== Demone ==== 
- 
-In condizioni normali viene invocata un'istanza di ''dspam'' per ogni messaggio da filtrare. In alternativa può risultare conveniente attivare una sola istanza **daemon** di ''dspam'' ed eseguire il filtro con l'opzione **''%%--client%%''**. 
- 
-Volendo far girare il demone senza i privilegi di superutente bisogna scegliere una porta > 1024, impostando il parametro **''ServerPort''** (quella predefinita è la **TCP 24**). Per consentire ai client di passare al daemon i parametri del comando (viene usato il protocollo proprietario DLMTP) è necessaria una autenticazione client/server, il modo più semplice è impostare il parametro **''ServerPass.<relay>''**. 
- 
-Infine si imposta **''START=yes''** in **''/etc/default/dspam''** e si avvia il demone con **''/etc/init.d/dspam start''**. 
- 
-Ogni invocazione di ''dspam'' dovrà includere l'opzione **''%%--client%%''** e dovrà trovare nel file di configurazione ''/etc/dspam/dspam.conf'' i tre parametri **ClientHost**, **ClientPort** e **ClientIdent**. In caso contrario ''dspam'' verrà eseguito silenziosamente in modalità stand-alone. Per il massimo dell'efficienza esiste anche il thin-client **''dspamc''**, che include nell'eseguibile solo le funzioni di client. 
- 
-==== Quarantena ==== 
- 
-L'azione predefinita di ''dspam'' - quando identifica un messaggio di spam - è metterlo in quarantena, cioè memorizzarlo nel suo storage. Tramite l'**interfaccia web** l'utente può vedere i messaggi in quarantena, cancellarli oppure farli recapitare normalmente. 
- 
-Se l'utente decide di recapitare normalmente un messaggio presente in quarantena, questo **viene considerato non-spam e va ad istruire il filtro Bayesiano** opportunamente. Nella history verrà evidenziato come //Retrained//. 
- 
-Se ''dspam'' è configurato come filtro nel MTA e viene invocato con l'opzione **''%%--deliver=innocent,spam%%''**, il messaggio di spam viene recapitato al destinatario senza essere messo nella quarantena. Viene tuttavia aggiunto l'header **''X-DSPAM-Result: Spam''**. 
- 
-==== Debug ==== 
- 
-Se si avvia ''dspam'' con l'opzione **''%%--debug%%''**, viene creato il file **''/var/log/dspam/dspam.debug''**, oltre al normale **''dspam.messages''**. 
  
 ===== Link web ===== ===== Link web =====
doc/appunti/linux/sa/dspam.1255040657.txt.gz · Last modified: 2009/10/09 00:24 by niccolo