welcome: please sign in

Diff for "SpamAssassinAdmin"

Differences between revisions 10 and 11
Revision 10 as of 2007-09-17 17:48:52
Size: 4481
Editor: MichaelOlson
Comment: Put spam-learning logic into a script
Revision 11 as of 2008-07-07 04:28:18
Size: 4481
Editor: localhost
Comment: converted to 1.6 markup
No differences found!

Here's how we set up our site-wide SpamAssassin bayes database, including the ability for users to train it.

  1. Create a new user spamd with home /var/local/lib/spamd.

  2. Add "spamd" to /etc/cron.allow.

  3. Perform the following as spamd:

    1. cd ~spamd

    2. maildirmake -S Maildir, to create the shared SpamAssassin mailbox.

    3. maildirmake -f SiteSpam -s write Maildir, to create a writable folder for misclassified spam (or if extracting from a tarball, make sure it has the sticky bit set by doing the following).

      • find ~spamd/Maildir/.SiteSpam -type d -exec chmod o+t {} \;
    4. maildirmake -f SiteHam -s write Maildir, to create a writable folder for misclassified ham (or if extracting from a tarball, make sure it has the sticky bit set by doing the following).

      • find ~spamd/Maildir/.SiteHam -type d -exec chmod o+t {} \;
  4. Add the following to ~spamd/.crontab to learn from and delete messages in those shared folders every five minutes (changing MACHINENAME to be the name of the local machine):

    • MAILTO=logs@MACHINENAME.hcoop.net
      # Learn from submitted spam
      0,10,20,30,40,50 * * * * ~spamd/scripts/learn-spam --spam
      # Learn from submitted ham
      0,10,20,30,40,50 * * * * ~spamd/scripts/learn-spam --ham
      # Remove any tmp cruft
      3 3 * * * find ~spamd/Maildir/.SiteHam/tmp -type f -delete ; find ~spamd/Maildir/.SiteSpam/tmp -type f -delete

      Be sure there's a newline after the last line, or it won't be processed.

  5. Copy the learn-spam script from the spam directory of the hcoop "misc" repository into the directory ~spamd/scripts.

  6. Modify /etc/spamassassin/local.cf with the directive:

    • # Location of bayes data
      bayes_path /var/local/lib/spamd/bayes/.spamassassin/bayes
      # Fix bayes permissions
      bayes_file_mode 0770
      # Directives from old setup
      # [any custom stuff from the old /etc/spamassassin/local.cf that you want to keep]
  7. Modify /etc/default/spamassassin by setting OPTIONS and ENABLEDas follows. The -x prevents spamd from trying to look for per-user configuration, which would be silly because it always runs as the same user here. Without this flag, the cron job triggered every 5 minutes would log an error message, which would lead to an e-mail being sent to the spamd user.

    • # Change to one to enable spamd
      OPTIONS="--create-prefs --max-children 5 --helper-home-dir=/var/local/lib/spamd -u spamd -x -s /var/log/spamd.log"
  8. Make a file called /etc/logrotate.d/spamd with the following contents.

    • /var/log/spamd.log {
                      create 0640 root adm
                      rotate 4
                      [ -f '/var/local/lib/spamd/pid' ] && (kill -HUP `cat /var/local/lib/spamd/pid`) || exit 0
  9. Start the daemon by doing /etc/init.d/spamassassin start. Check /var/log/spamd.log to be sure that it started OK.

  10. Install the .crontab entries that you wrote earlier by doing crontab -u spamd ~spamd/.crontab as root. Do this every time that you make changes to ~spamd/.crontab.

  11. Edit /etc/courier/shared/index as follows, being sure to separate each column with a single TAB character. The second column is UID, and third column is GID -- consult /etc/passwd and /etc/group to make these match the spamd user and group.

    • spamd   116     119     /var/local/lib/spamd
  12. Restart courier's IMAP process: runsv restart courier-imap

  13. Test by checking to see if you can access shared.SpamAssassin.SiteHam and shared.SpamAssassin.SiteSpam from IMAP. If not, do maildirmake --add SpamAssassin=~spamd/Maildir ~/Maildir as your normal user from the machine that does courier (and presumably spamassassin as well). You might need to replace ~ with ~USERNAME if you are using sudo to do this, where USERNAME is your normal username.

  14. Now copy some spammy mail into the SiteSpam directory, wait 5 minutes, and check to see if the mail got learned and deleted.

  15. If so, edit ~spamd/.crontab to pipe the output of sa-learn to /dev/null, and run crontab as specified earlier to propogate this change.


SpamAssassinAdmin (last edited 2010-11-29 17:33:53 by ClintonEbadi)