Nethence Documentation Lab Webmail Your IP BBDock  


Those documents are obsolete, please use the Nethence Documentation instead.

HomeUnixWindowsOracleObsoleteHardwareDIYMechanicsScriptsConfigsPrivate

Setting up server-side Bayesian mail filtering with procmail and QSF
 
http://pbraun.nethence.com/unix/mail/procmail.html
http://pbraun.nethence.com/unix/mail/procmail-bmf.html
http://pbraun.nethence.com/unix/mail/procmail-qsf.html
 
Configuring Procmail and QSF
Now we are going to setup the Local Delivery Agent for Sendmail, namely the good old procmail, and with the QSF spam filter on top of it. I prefer QSF over BMF because it handles MIME and (hopefully) base64 encoded messages too. I also prefer QSF over bogofilter because it doesn't complain about non-existing databases at first run and lets the messages pass through anyway.
 
Make sure those packages are installed,
echo $PACKAGESITE
pkg_add -r procmail qsf
 
Prepare the Maildir folders,
mkdir -p ~MAILUSER/Maildir/
chown MAILUSER:mail ~MAILUSER/Maildir/
 
Configure Procmail system-wide,
cd /etc/
ftp -a http://pbraun.nethence.com/configs/mail/procmailrc
 
I actually use QSF on a per-user basis only for now. So for QSF to work you also configure Procmail per-user e.g.,
cd ~MAILUSER/
ftp -a http://pbraun.nethence.com/configs/mail/.procmailrc
vi .procmailrc
add this,
#
# Bayesian spam filter
#
:0 wf
| /usr/local/bin/qsf -ra

:0 H
* X-Spam: YES
.spam/
Note. you don't need to enable MAILUSER's shell, procmail SHELL=/bin/ksh and qsf still works without it.
 
Daily QSF learning & unlearning
Create the mailboxes for that,
cd ~MAILUSER/Maildir/
mkdir -p .spam/
mkdir -p .spam.learn/
mkdir -p .spam.unlearn/
cd /home/
chown -R MAILUSER:mail MAILUSER/
chmod 700 MAILUSER/
 
Fetch the scripts to reprocess a Maildir format mailbox,
mkdir -p ~MAILUSER/bin/
cd ~MAILUSER/bin/
ftp -a http://pbraun.nethence.com/scripts/mail/reprocess_maildir
ftp -a http://pbraun.nethence.com/scripts/mail/reprocess_maildir.learn
chmod +x reprocess_maildir*
 
Provide the procmail configuration needed by reprocess_maildir.learn, ".procmailrc.learn",
SHELL=/bin/ksh
DROPPRIVS=yes
VERBOSE=no
ORGMAIL=$HOME/Maildir/
MAILDIR=$HOME/Maildir
DEFAULT=$ORGMAIL
SYSYEAR=`date +%Y`
LOGFILE=$HOME/.procmailrc.log.$SYSYEAR

#
# QSF learn
#
:0
| qsf -a -m
and ".procmailrc.unlearn",
SHELL=/bin/ksh
DROPPRIVS=yes
VERBOSE=no
ORGMAIL=$HOME/Maildir/
MAILDIR=$HOME/Maildir
DEFAULT=$ORGMAIL
SYSYEAR=`date +%Y`
LOGFILE=$HOME/.procmailrc.log.$SYSYEAR

#
# QSF unlearn
#
:0
| qsf -a -M
 
Configure conrtab for user MAILDIR,
cd /etc/
vi crontab
add,
0 4 * * * MAILUSER $HOME/bin/reprocess_maildir.learn
 
Note that if you evern need to re-process messages by yourself you need to enable MAILUSER's shell, at least temporarily,
chsh -s /bin/ksh MAILUSER 
and to disable it back again,
chsh -s /sbin/nologin MAILUSER 
 

Last update: Sep 13, 2014