Jak zastąpić SpamAssassina Bogofilterem w filtrowaniu poczty
(na podstawie przekopywania dokumentacji, wujka Google'a)
Dotychczas korzystałem z amavisd-new, który wołał ClamAV-a oraz SpamAssassina. Niemniej chciałem przetestować Bogofilter, aby zobaczyć, czy nie będzie to lepsze rozwiązanie. W tym celu należy popełnić zmiany w konfiguracji.
Przygotowania w systemie
Pierwszym krokiem jest wykonanie katalogów dla dedykowanego użytkownika uruchamiającego filter:
cp /usr/local/etc/bogofilter.cf.example /usr/local/etc/bogofilter.cf chmod +w /usr/local/etc/bogofilter.cf mkdir -p /var/spool/bogofilter pw add group bfilter pw add user bfilter -g bfilter -s /sbin/nologin -d /home/bogofilter -m -C "Bogofilter Account"
Następnie utworzenie skryptu do nauki bogofiltra (skrypt jest w dokumentacji, więc nie przepisuję):
vi /home/bogofilter/postfix-filter.sh chmod +x /home/bogofilter/postfix-filter.sh chown -R bfilter:bfilter /home/bogofilter/
Oraz utworzenie pustych baz (list słów kluczowych):
touch /tmp/emptydb bogoutil --db-transaction=no -l /var/spool/bogofilter/wordlist.db < /tmp/emptydb bogoutil --db-transaction=no -l /var/spool/bogofilter/ignorelist.db < /tmp/emptydb # ustawienie uprawnien chown -R bfilter:bfilter /home/bogofilter/ /var/spool/bogofilter
Konfiguracja postfix-a
Zmiany wykonujemy w master.cf. UWAGA!!! Nie wykonujemy zmian zapisanych w dokumentacji bogofilter (dla smtp/smtpd)). Za to wykonujemy zmiany ponizsze:
pickup fifo n - n 60 1 pickup
-o content_filter=bfilter unix - n n - 10 pipe
flags=Rq user=bfilter argv=/home/bogofilter/postfix-filter.sh -f ${sender} -- ${recipient}W konfiguracji serwisu powrotnego dodajemy wartość do content_filter (do tej pory było puste):
localhost.bsdserwis.com:10025 inet n - - - - smtpd
-o content_filter=bfilter:dummy
[...]
Zmiany w amavisd-new
Jedyna i najważniejsza zmiana, to wyłączenie sprawdzania SpamAssassina:
# --- lista domen, dla kt/orych pomijany jest antyspam ---------------------- # @bypass_spam_checks_maps = (1);
Utworzenie kont w LDAP/Cyrus-imapd
Konta w LDAPie najlepiej utworzyć za pomocą PHP LDAP Adminem, natomiast w Cyrus-imapd to już skryptem:
/usr/local/admin/vmail/useradd_mail.pl bfzly /usr/local/admin/vmail/useradd_mail.pl bfdobry
Nauczanie bogofiltra
Pozostaje już tylko ustawić nauczanie bogofiltra na podstawie nadesłanych emaili. Niemniej bogofilter najlepiej czuje się albo z mailboxami albo z formatem Maildir(++). Tak więc trzeba emaile nadesłane do "łowców" wydłubać z Cyrusa.
A zatem, często gęsto rozwiązania najprostsze są najlepsze:
find /var/spool/imap/b/user/bfdobry/ -type f -maxdepth 1 -name '[0-9]*.' | xargs -n1 -t bogofilter -n -I /usr/local/cyrus/bin/ipurge -d 1 -f user.bfdobry find /var/spool/imap/b/user/bfzly/ -type f -maxdepth 1 -name '[0-9]*.' | xargs -n1 -t bogofilter -s -I /usr/local/cyrus/bin/ipurge -d 1 -f user.bfzly
Znalazłeś błąd? Zgłoś go administratorowi.
