SpamAssassin

SpamAssassin – это написанный в perl (модуль Mail::SpamAssassin в CPAN) почтовый фильтр с открытым исходным кодом, предназначенный для выявления спама путем проведения эвристических проверок почтовых заголовков и текстов. Работа SpamAssassin основана на взаимодействии ключевых компонентов — оценочного сервиса, транспортного агента и базы шаблонов писем.

SpamAssassin может быть запущен как отдельное приложение, как часть другой программы, либо как клиент (spamc), который взаимодействует с демоном (spamd). Последний способ имеет более высокое быстродействие.

SpamAssassin поставляется с большим набором правил, которые определяют, какие письма являются спамом, а какие нет. Большинство правил основано на регулярных выражениях, которые сопоставляются телу или заголовку сообщения, но SpamAssassin также использует и другие методики. В документации SpamAssassin эти правила называются «tests».

Каждый тест имеет некоторую «стоимость». Если сообщение успешно проходит тест, эта «стоимость» добавляется к общему баллу. Стоимость может быть положительной или отрицательной, положительные значения называются «spam», отрицательные «ham». Сообщение проходит через все тесты, подсчитывается общий балл. Чем выше балл, тем больше вероятность, что сообщение является спамом.

У SpamAssassin'а есть настраиваемый порог, при превышении которого письмо будет классифицировано как спам. Обычно порог таков, что письмо должно подойти по нескольким критериям; срабатывания только одного теста недостаточно для превышения порога.

Установка

  • Установка в Ubuntu.
    # aptitude install spamassassin

    Редактируем файл /etc/default/spamassassin, разрешаем запуск spamd

    # Change to one to enable spamd
    ENABLED=1

    Чтобы получать новейшие правила фильтрации спама, можно включить автоматическое обновление правил

    CRON=1

    Запускаем и смотрим лог

    # /etc/init.d/spamassassin start
    # tail -f /var/log/mail.log | grep spam

Отладка

  • Отладка spamassassin. Проверить все ли модули загружены. Для того чтобы команда вывела только проблемные строки нужно запустить ее без -D (просто spamassassin –lint)
    $ spamassassin -D --lint
    ...
    
    dbg: diag: [...] module installed: IO::Zlib, version 1.10
    dbg: diag: [...] module not installed: Digest::SHA1 ('require' failed)
    dbg: diag: [...] module not installed: Geo::IP ('require' failed)
    dbg: diag: [...] module not installed: Razor2::Client::Agent ('require' failed)
    dbg: diag: [...] module not installed: IO::Socket::IP ('require' failed)
    dbg: diag: [...] module not installed: Encode::Detect ('require' failed)
    dbg: diag: [...] module not installed: Net::Patricia ('require' failed)
    ...

    Нужно установить недостающие модули (пример установки для Ubuntu 14.04.1 LTS)

    # aptitude install perl-doc libgeo-ip-perl libnet-patricia-perl
     razor pyzor libio-socket-ip-perl libencode-detect-perl

    Если искомого модуля нет в систему установим из CPAN, например модуль Digest::SHA1. И перегрузим

    # service spamassassin restart

    Пример поиска в отладочном выводе spamassassin

    # spamassassin -D --lint 2>&1 | grep -i failed

Настройка

  • Встроенная документация
    # perldoc Mail::SpamAssassin::Conf
  • Spamassassin автоматически определяет общие компоненты и использует их, если они присутствуют. Это означает, что нет необходимости настраивать pyzor и razor. Using Pyzor Welcome to Pyzor’s documentation!
    # su - amavis -c 'echo "test" | spamassassin -D pyzor 2>&1 | less'
    dbg: pyzor: network tests on, attempting Pyzor
    dbg: pyzor: pyzor is available: /usr/bin/pyzor
    dbg: pyzor: opening pipe: /usr/bin/pyzor check < /tmp/.spamassassin26391d9kBBgtmp
    dbg: pyzor: [26394] finished: exit 1
    dbg: pyzor: check failed: no response

    Строка check failed: no response говорит о том что проблем с письмом нет.

  • Для настройки используется только файл /etc/spamassassin/local.cf
    local.cf
    rewrite_header Subject *****SPAM*****
    # report_safe (0|1|2)(default: 1)
    report_safe 0
    # trusted_networks 212.17.35.
    # lock_method flock
    required_score 5.0
     
    use_bayes 1
    bayes_auto_learn 1
     
    # отключить проверку сообщений по блэклистам (1-отключить, 0- включить)
    skip_rbl_checks         1
    # pyzor 0- disable
    use_pyzor               1
    # razor2 0- disable
    use_razor2              0
     
    # Whitelist and blacklist addresses are now file-glob-style patterns, so
    # "friend@somewhere.com", "*@isp.com", or "*.domain.net" will all work.
    # whitelist_from        someone@somewhere.com

Обучение

  • Для обучения spamassassin применяется утилита sa-learn. Чтобы обучить программу письмами со спамом выполняется:
    sa-learn --spam путь к каталогу писем со спамом

    Для обучения программы нормальными письмами:

    sa-learn --ham путь к каталогу писем без спама
  • При использовании Настройка amavisd-new. Посмотреть количество изученных писем.
    # su - amavis -c 'sa-learn --dump magic'

    Обучение SPAM должен происходить с правами пользователя от имени которого запущен amavisd-new. Ключ –no-sync используется потому что amavis сам на cron синхронизирует

    # su - amavis -c 'sa-learn --no-sync --spam /tmp/.Spam/cur'
  • Пример скрипт для обучения spamassassin из папки пользователя.
    sa-learn_amavis.sh
    #!/bin/bash
     
    SPAMUSERDIR='/var/vmail/username/.Spam/cur/*'
    SPAMLEARNDIR='/tmp/SPAM'
     
    /bin/mkdir $SPAMLEARNDIR
    /bin/mv $SPAMUSERDIR $SPAMLEARNDIR
    /bin/chown -R amavis:amavis $SPAMLEARNDIR
     
    /bin/su - amavis -c 'sa-learn --dump magic'
    /bin/su - amavis -c "sa-learn --no-sync --spam $SPAMLEARNDIR"
    /bin/su - amavis -c 'sa-learn --dump magic'
     
    /bin/rm -rf /tmp/SPAM
     
    #service spamassassin reload

Проверка работы

В дистрибутив SpamAssassin входят типовые файлах, с помощью которых можно проверить работает ли программа. Тестируют SpamAssassin стандартной сигнатурой GTUBE.

# spamassassin -t < sample-spam.txt > spam.out
PQ VPS сервера в 28+ странах.