Устанавливаем Clam Antivirus и SpamAssassin на FreeBSD (virus clamav spam mail freebsd qmail)
Ключевые слова: virus , clamav , spam , mail , freebsd , qmail , (найти похожие документы )
From: Сгибнев Михаил <http://www.dreamcatcher.ru> ;
Newsgroups: http://www.dreamcatcher.ru/
Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC)
Subject: Устанавливаем Clam Antivirus и SpamAssassin на FreeBSD
Оригинал: http://www.dreamcatcher.ru/docs/clamav.html
Защита системы от вирусов и спама: устанавливаем Clam Antivirus и
SpamAssassin на FreeBSD
Paul Hoadley Eric Parsonage
Copyright © 2002 by Paul Hoadley and Eric Parsonage
Перевод: Сгибнев Михаил
Этот документ описывает, как проверить входящую почту на предмет
наличия вирусов и спама. Все действия показаны на примере
транспортного агента qmail и не подходят при использовании sendmail.
Этот документ рассказывает, как установить qmail-scanner, расширение
для qmail, позволяющее входящей почте проходить сторонние фильтры, до
того как она будет помещена в локальные каталоги пользователей. Мы
будем рассматривать два фильтра: Clam AntiVirus - антивирусный пакет с
открытым исходным кодом и SpamAssassin - детектор спама, так же с
открытым кодом.
Содержание:
1. Вводные
2. Установка Clam AntiVirus
3. Установка SpamAssassin
4. Установка qmail-scanner
5. Получение и установка модулей PERL с CPAN
6. Связь с авторами
Вводные
-------
Примем следущие вводные:
* В системе в качестве транспортного агента используется qmail, так
как следующие далее инструкции не будут работать с sendmail.
Инструкцию о том, как установить qmail вместо sendmail, читайте в
Installing qmail under FreeBSD.
http://www.clamav.net/doc/0.70/FreeBSD-HowTo/qmail-how-to.html
* 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 http://clamav.elektrapro.com/doc/html ).
Вы можете проверить сканер, выполнив:
# 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 выдаст предупреждение об имеющихся зависимостях.
Установите необходимые модули используя инструкцию [15]ниже.
Затем компиляция:
# 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.
1 , Andrey (?? ), 19:55, 03/03/2005 [ответить ]
+ /–
Пока не добавил в $HOME/.procmailrc
:0:
$HOME/Maildir/
и не удалил из .qmail ./Maildir/
cпам продолжал приходить, хотя и складывался в указанную директорию.