Защита системы от вирусов и спама: устанавливаем Clam Antivirus и SpamAssassin на FreeBSD
Этот документ описывает, как проверить входящую почту на предмет наличия вирусов и спама. Все действия показаны на примере транспортного агента qmail и не подходят при использовании sendmail. Этот документ рассказывает, как установить qmail-scanner, расширение для qmail, позволяющее входящей почте проходить сторонние фильтры, до того как она будет помещена в локальные каталоги пользователей. Мы будем рассматривать два фильтра: Clam AntiVirus - антивирусный пакет с открытым исходным кодом и SpamAssassin - детектор спама, так же с открытым кодом.
В системе в качестве транспортного агента используется qmail, так как следующие далее инструкции не будут работать с sendmail. Инструкцию о том, как установить qmail вместо sendmail, читайте в Installing qmail under FreeBSD.
qmail должен быть откомпилирован с опцией WITH_QMAILQUEUE_PATCH в стадии компоновки. Если установка qmail производилась согласно Installing qmail under FreeBSD, то это было сделано.
SpamAssassin и Clam AntiVirus необходимо установить до установки qmail-scanner, поскольку он пытается автоматически обнаружить доступные сторонние сканеры во время инсталляции.
Вы можете выполнять регулярное сканирование дисков с использованием демона cron. В документации Вы можете обнаружить достаточно много примеров для построения собственной схемы проверки. Например Вы можете определить опции --remove, --exclude и т.д.
(Пр.п в настоящее время в этом нет необходимости, так как с пакетом поставляется демон clamd и соответствующая утилита для сканирования clamdscan)
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: 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 запущен.
Как отмечено выше, 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 каждого пользователя должна быть следующая запись:
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.
Вы должны установить 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 изменился бы следующим образом:
Вместе с 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 -MCPAN -e shell
И оттуда уже закачиваем необходимый модуль:
cpan> install Time::HiRes
Автор: Paul Hoadley Eric Parsonage | Перевод: Сгибнев Михаил