Clam Antivirus и SpamAssassin на FreeBSD

Этот документ описывает, как проверить входящую почту на предмет наличия вирусов и спама. Все действия показаны на примере транспортного агента qmail и не подходят при использовании sendmail. Этот документ рассказывает, как установить qmail-scanner, расширение для qmail, позволяющее входящей почте проходить сторонние фильтры, до того как она будет помещена в локальные каталоги пользователей. Мы будем рассматривать два фильтра: Clam AntiVirus - антивирусный пакет с открытым исходным кодом и SpamAssassin - детектор спама, так же с открытым кодом.

Содержание:

Вводные

Установка Clam AntiVirus

Установка SpamAssassin

Установка qmail-scanner

Получение и установка модулей PERL с CPAN

Вводные

Примем следущие вводные:

В системе в качестве транспортного агента используется qmail, так как следующие далее инструкции не будут работать с sendmail. Инструкцию о том, как установить qmail вместо sendmail, читайте в Installing qmail under FreeBSD.

qmail должен быть откомпилирован с опцией WITH_QMAILQUEUE_PATCH в стадии компоновки. Если установка qmail производилась согласно Installing qmail under FreeBSD, то это было сделано.

SpamAssassin и Clam AntiVirus необходимо установить до установки qmail-scanner, поскольку он пытается автоматически обнаружить доступные сторонние сканеры во время инсталляции.

Установка Clam AntiVirus

Установка из исходных текстов

(Пр.п - в оригинальном документе указывается, что clamav нет в системе портов, но в настоящее время он находится в /usr/ports/security/clamav)

Получаем и распаковываем исходники:

# cd /usr/local

# mkdir clamav

# cd clamav

# fetch http://clamav.elektrapro.com/stable/clamav-0.51.tar.gz

# gunzip clamav-0.51.tar.gz

# tar -xvf clamav-0.51.tar.gz

Создаем нового пользователя и группу для Clam AntiVirus:

# pw groupadd clamav

# pw useradd clamav -g clamav -d /nonexistent -c "Clam Antivirus"

-s /sbin/nologin

Конфигурируем и устанавливаем Clam AntiVirus:

# cd clamav-0.51

# ./configure

# make install

Проверка работоспособности

Вы должны почитать документацию на lamscan (man clamscan, или online documentation). Вы можете проверить сканер, выполнив:

# clamscan --recursive --log=/tmp/clamscan.log /usr/home

Очевидно, что местоположение файла журнала и сканируемый каталог могут быть любым. Затем выполним команду freshclam для обновления антивирусных баз:

# freshclam --verbose

Запуск freshclam в режиме демона

freshclam, используемый для обновления антивирусных баз может функционировать в режиме демона. Во-первых, создайте журнал для freshclam:

# touch /var/log/freshclam.log

# chmod 644 /var/log/freshclam.log

# chown clamav:clamav /var/log/freshclam.log

Создайте сценарий /usr/local/etc/rc.d/clamav.sh, чтобы запускать freshclam во время начальной загрузки и позволить корректно завершать работу.

#!/bin/sh

#

# Startup / shutdown script for Clam Antivirus

case "$1" in

start)

/usr/local/bin/freshclam -d -c 2 -l /var/log/freshclam.log

echo -n ' freshclam'

;;

stop)

/usr/bin/killall freshclam > /dev/null 2>&1

&& echo -n ' freshclam'

;;

*)

echo ""

echo "Usage: `basename $0` { start | stop }"

echo ""

exit 64

;;

esac

Сделайте этот скрипт выполняемым:

# chmod 744 /usr/local/etc/rc.d/clamav.sh

Регулярное выполнение clamscan

Вы можете выполнять регулярное сканирование дисков с использованием демона cron. В документации Вы можете обнаружить достаточно много примеров для построения собственной схемы проверки. Например Вы можете определить опции --remove, --exclude и т.д.

(Пр.п в настоящее время в этом нет необходимости, так как с пакетом поставляется демон clamd и соответствующая утилита для сканирования clamdscan)

Данный пример сканирует в 6.00 утра каталог /usr:

6 * * * root /usr/local/bin/clamscan --recursive

--infected

--exclude /usr/local/share/clamav/viruses.db

--exclude /usr/local/share/clamav/viruses.db2

--log=/var/log/clamscan.log

/usr/home

Примечание: Часть задания демона cron показана разбитой на строки для наглядности, в реальности это одна строка

Установка SpamAssassin

Сборка и установка из исходников

SpamAssassin имеется в системе портов, но там находится старая версия (2.41). (Пр.п - у меня в портах в настояшее время 2.63) Установка из системы портов будет выглядеть так:

# cd /usr/ports/mail/p5-Mail-SpamAssassin

# make

# make install

Или скачать и установить более свежую версию вручную:

# cd /usr/local

# mkdir spamassassin

# cd spamassassin

# fetch http://spamassassin.taint.org/released/Mail-SpamAssassin-2.43.tar.gz

# gunzip Mail-SpamAssassin-2.43.tar.gz

# tar -xvf Mail-SpamAssassin-2.43.tar

# cd Mail-SpamAssassin-2.43

Создадим Makefile:

# perl Makefile.PL

В этом пункте perl выдаст предупреждение об имеющихся зависимостях. Установите необходимые модули используя инструкцию ниже.

Затем компиляция:

# make

# make install

Проверка

Вы должны теперь проверить работу SpamAssassin на типовых файлах.

# spamassassin -t < sample-spam.txt > spam.out

Посмотрите результирующий файл spam.out. SpamAssassin должен добавить следующий заголовок к письму:

X-Spam-Status: Yes, hits=14.7 required=5.0

tests=ALL_CAPS_HEADER,CALL_FREE,DATE_IN_PAST_24_48,

DRASTIC_REDUCED,FROM_HAS_MIXED_NUMS,HOME_EMPLOYMENT,

INVALID_DATE,INVALID_MSGID,LINES_OF_YELLING,

MSGID_HAS_NO_AT,NO_REAL_NAME,ONCE_IN_LIFETIME,REMOVE_SUBJ,

SMTPD_IN_RCVD,SPAM_PHRASE_21_34,UNDISC_RECIPS

version=2.43

X-Spam-Flag: YES

X-Spam-Level: **************

X-Spam-Checker-Version: SpamAssassin 2.43 (1.115.2.20-2002-10-15-exp)

Дополнительно, будет заголовок, объясняющий подробно, какие критерии применялись.

Затем, проверьте SpamAssassin на работу с подлинной электронной почтой:

# spamassassin -t < sample-nonspam.txt > nonspam.out

Должен быть добавлен только индикатор, о том, что сообщение не признано спамом:

X-Spam-Status: No, hits=0.9 required=5.0

tests=GAPPY_TEXT,LINES_OF_YELLING,PGP_SIGNATURE,

SPAM_PHRASE_02_03,TO_BE_REMOVED_REPLY

version=2.43

X-Spam-Level:

Примечание: SpamAssassin только помечает сообщение, которое он посчитал спамом с помощью заголовка X-Spam- . Он не удаляет спам и поэтому в этой цепочке требуется другой агент, удаляющий такие сообщения. Ниже дана краткая инструкция, как заставить procmail перемещать такие письма в отдельную папку.

Запуск SpamAssassin в режиме демона: spamd

Если SpamAssassin был установлен из системы портов, то сценарий запуска автоматически будет создан как /usr/local/etc/rc.d/spamd.sh. Если SpamAssassin был установлен вручную, то Вы должны создать сценарий запуска spamd (версия демона SpamAssassin), подобно тому, что создали выше для freshclam. Создайте следующий сценарий /usr/local/etc/rc.d/spamd.sh:

#!/bin/sh

#

# Startup / shutdown script for SpamAssassin daemon

case "$1" in

start)

/usr/bin/spamd -a -d && echo -n ' spamd'

;;

stop)

spamdpid=`ps -ax | grep spamd | grep -v grep | grep -v sh | awk '{ print $1 }'`

if [ "$spamdpid" != "" ]; then

kill $spamdpid > /dev/null 2>&1

echo -n " spamd"

fi

;;

*)

echo "Usage: `basename $0` {start|stop}" >&2

;;

esac

exit 0

Затем сделайте этот сценарий выполняемым и запустите его, так как qmail-scanner обнаружит SpamAssassin, только когда SpamAssassin запущен.

# chmod 744 /usr/local/etc/rc.d/spamd.sh

# /usr/local/etc/rc.d/spamd.sh start

Использование procmail для фильтрации спама

Как отмечено выше, SpamAssassin только отмечает спам X-Spam- заголовками. Если Вы не предпримете больше никаких мер, то это письмо все равно окажется у Вас в почтовом ящике, но будет отмечено соответствующим заголовком. Общепринятым решением будет использовать procmail в качестве агента доставки и помещать подозрительные письма в отдельный каталог. Есть много хорошей документации по настройке и установке procmail, и полная настройка этой сложной программы не входит в состав этого документа. Если procmail уже установлен в Вашей системе, или Вы хотите его установить только для того, чтобы переносить спам в специальный каталог, то необходимо выполнить следующее:

Переносим все письма, отмеченные как "спам" в каталог $HOME/Maildir/.Spam/:

:0:

* ^X-Spam-Status: Yes

$HOME/Maildir/.Spam/

Эти инструкции должны быть помещены в файл .procmailrc в домашнем каталоге каждого пользователя. Кроме того, помещая это в файле /usr/share/skel/dot.procmailrc мы гарантируем, что любой новый пользователь, будет иметь сгенерированный .procmailrc файл в своем домашнем каталоге. Каждый пользователь будет также должен иметь .Spam Maildir, куда будет складываться спам. Например, чтобы создать Maildir для paulh, введите:

# su paulh

# cd $HOME

# /var/qmail/bin/maildirmake Maildir/.Spam

# exit

Чтобы заставить qmail вызывать procmail, в файле .qmail каждого пользователя должна быть следующая запись:

|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75

Примечание: Установка и выполнение procmail довольно непростая задача. Читайте документацию и многочисленные FAQ.

Установка qmail-scanner

Установка maildrop

qmail-scanner зависит от команды reformime, доступной как часть пакета maildrop. maildrop доступен в в системе портов FreeBSD и может быть легко установлен:

# cd /usr/ports/mail/maildrop

# make

# make install

Сборка и установка из исходников

Получаем и собираем из исходников: (Пр.п - в портах доступен qmail-scanner 1.2)

# cd /usr/local

# mkdir qmail-scanner

# fetch http://telia.dl.sourceforge.net/sourceforge/qmail-scanner/qmail-scanner-1.14.tgz

# gunzip qmail-scanner-1.14.tgz

# tar -xvf qmail-scanner-1.14.tar

# cd qmail-scanner-1.14

Посмотрите возможные опции конфигурирования:

# ./configure --help

Вы можете явно указать некоторые из параметров установки, которые больше подходят Вашей машине. Вы, как минимум измените --admin и --notify. Запустите процесс конфигурации, используя Ваши опции и опцию --install.

Для примера:

# ./configure --admin postmaster --notify "recips,admin" --install

Вы должны установить SUID бит на команде suidperl:

# chmod 4511 /usr/bin/suidperl

Внимание: установка SUID бита является потенциальной угрозой безопасности! Оцените все послествия этого шага, но qmail-scanner не будет работать без этого изменения.

qmail-smtpd должен знать, что необходимо использовать сценарий qmail-scanner-queue.pl из /var/qmail/bin вместо стандартного qmail-queue. Если ваша машина использует tcpserver, чтобы обработать подключения с qmail-smtpd (как описано в Installing qmail under FreeBSD), /etc/tcp.smtp должна быть установлена переменная среды QMAILQUEUE. Точное содержание этого файла различно и зависит от конфигурации локальной сети. /etc/tcp.smtp файл, созданный в Installing qmail under FreeBSD изменился бы следующим образом:

192.168.0.:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"

127.:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"

:allow,QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"

Перестроим правила tcpserver:

# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

В заключение перезапустим сервер qmail:

# /usr/local/etc/rc.d/qmail.sh stop

# /usr/local/etc/rc.d/qmail.sh start

Проверка

Вместе с qmail-scanner поставляется несколько вирусных сигнатур, необходимых для проверки работы вирусного сканера:

# cd /usr/local/qmail-scanner/qmail-scanner-1.14

# ./contrib/test_installation.sh -doit

Это пошлет три письма на адрес, указанный в параметре --admin при инсталляции. Первый должен прибыть немодифицированным (хотя будет иметь X-Spam-Status: заголовок, если Вы установили SpamAssassin), но второй и третий, должен быть захвачен или внутренним вирусным сканером qmail-scanner или Clam AntiVirus. Перехваченная почта должна находиться в /var/spool/qmailscan/quarantine в формате Maildir.

Получение и установка модулей PERL с CPAN

В течении инсталляции Perl может жалобно вскрикнуть и пожаловаться на то, что ему, поганцу, нехватает модулей. Лечим очень просто, воспользуемся оболочкой CPAN:

# perl -MCPAN -e shell

И оттуда уже закачиваем необходимый модуль:

cpan> install Time::HiRes

Связь с авторами

This document was written by Paul Hoadley and Eric Parsonage. This document describes what we did to get qmail-scanner co-operating with Clam AntiVirus and SpamAssassin on two FreeBSD 4.7 systems. Your mileage may vary. If you notice any errors in this document, or your experience with the software used was vastly different, please let us know. Комментарии (3)

...

written by Valik on сентября 25, 2006

добрый день! у меня проблемма с установкой SpamAssassin (freeBSD 4.3; qmail + vpopmail)

проблема заключается в следующем:

cpan> install ExtUtils::MakeMaker - пишет:

You have File::Spec version 0.6

ExtUtils::MakeMaker requires File::Spec >= 0.8 to build at all.

BEGIN failed--compilation aborted at Makefile.PL line 20.

Running make test

Make had some problems, maybe interrupted? Won't test

Running make install

Make had some problems, maybe interrupted? Won't install

так же ругается на "perl Makefile.PL" при попытке установки Spamassassin

cpan> install Time::HiRes - сделал, не помогло

помогите пожалуйста.

...

written by Mixa on сентября 27, 2006

Так он же пишет - слишком старая версия модуля File::Spec. Обнови ее и все должно получиться

...

written by Raz0R on декабря 27, 2006

Подскажите как при установке spamassassin заставить его работать с двумя процессорами (чтобы он использовал ресурсы обоих процессоров, а не одного?

Заранее благодарен!

Обновлено: 12.03.2015