ClamAV
Материал из Wiki Open Book.
Содержание |
[править] Описание
Наиболее распространенным бесплатным антивирусом в мире Linux является ClamAV. Он входит в стандартную поставку многих дистрибутивов, но со Slackware Linux он не поставляется, поэтому там его приходится устанавливать из исходных кодов.
Надо дописать
[править] Сборка и установка
Сначала необходимо добавить пользователя и группу, с правами которых будет работать антивирус.
# groupadd clamav # useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav #
Возьмите последнюю версию исходных кодов антивируса и распакуйте архив.
$ tar -xzf clamav-0.88.tar.gz $ cd clamav-0.88 $ ls acinclude.m4 clamd/ COPYING INSTALL mkinstalldirs* aclocal.m4 clamdscan/ database/ install-sh* NEWS AUTHORS clamscan/ depcomp* libclamav/ README BUGS config.guess* docs/ libclamav.pc.in shared/ ChangeLog config.sub* etc/ ltmain.sh sigtool/ clamav-config.h.in configure* examples/ Makefile.am test/ clamav-config.in configure.in FAQ Makefile.in TODO clamav-milter/ contrib/ freshclam/ missing* UPGRADE $
Как видите, в исходных кодах есть программа configure, а это значит, что процедура сборки будет стандартная: configure, make и make install. И еще мы сделаем пакет для Slackware Linux, так будет удобнее работать.
$ ./configure –prefix=/usr --sysconfdir=/etc –localstatedir=/var --enable-milter $ make $ su # make install DESTDIR=/tmp/clamav # cd /tmp/clamav # ls etc usr #
Мы указали, что файлы программы будут находится в директории /usr. Конфигурационные файлы в директории /etc, а файлы с данными в /var. Затем запустили процедуру сборки. Установка программы была произведена во временную директорию /tmp/clamav. Это необходимо для того, что бы создать пакет для Slackware Linux. Параметр --enable-milter заставляет собирать специальную программу для связи с почтовым сервером Sendmail. Мы подробно поговорим о ней, когда будем настраивать подключение ClamAV к Sendmail.
Теперь создадим несколько файлов, необходимых для создания пакета.
# mkdir install # mkdir -p var/run/clamav #
Переименуем конфигурационные файлы антивируса и программы обновления антивирусной базы. Это необходимо для того, чтобы при обновлении пакета старые конфигурационные файлы остались не тронутыми. А рядом с ними появились новые с расширением .new.
# mv etc/clamd.conf etc/clamd.conf.new # mv etc/freshclam.conf etc/freshclam.conf.new #
В директории install создадим файл slack-desk, предназначенный для описания пакета. В нем можно писать все что угодно, но я взял описание из готового пакета для Slackware Linux с сайта www.linuxpackages.net.
|-----handy-ruler------------------------------------------------------| clamav: clamav (Clam Antivirus Suite) clamav: clamav: Clam AntiVirus is a GPL anti-virus toolkit for UNIX. The package clamav: provides a flexible and scalable multi-threaded daemon, a command clamav: line scanner, and a tool for automatic updating via Internet. The clamav: programs are based on a shared library distributed with the Clam clamav: AntiVirus package, which you can use with your own software. clamav: clamav: The Homepage for clamav is http://www.clamav.net clamav: clamav:
Так же прийдется создать файл, выполняющийся при установке пакета — doinst.sh. Он тоже должен находиться в директории install. Его содержимое приведено ниже. Содержимое скрипта было взято из того же пакета. Я только сделал вольный перевод комментариев на русский язык.
config() {
NEW="$1"
OLD="`dirname $NEW`/`basename $NEW .new`"
# Если нет конфигурационных файлов с этим именем, переименуем файлы
# с расширением .new в реальные конфигурационные файлы
if [ ! -r $OLD ]; then
mv $NEW $OLD
elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then # оставим старую копию
rm $NEW
fi
# Otherwise, we leave the .new copy for the admin to consider...
# Иначе, оставляем файл .new на рассмотрение администратора
}
config etc/clamd.conf.new
config etc/freshclam.conf.new
if ! egrep "clamav" /etc/group &> /dev/null; then
groupadd clamav
fi
if ! egrep "clamav" /etc/passwd &> /dev/null; then
useradd -g clamav -f -s /bin/false clamav
fi
chown clamav.clamav -R /usr/share/clamav
chown clamav.clamav -R /var/run/clamav
Теперь создадим пакет.
# makepkg -l y -c n ../clamav-0.88.i686.tgz Slackware package maker, version 2.1. Searching for symbolic links: No symbolic links were found, so we won't make an installation script. You can make your own later in ./install/doinst.sh and rebuild the package if you like. This next step is optional - you can set the directories in your package to some sane permissions. If any of the directories in your package have special permissions, then DO NOT reset them here! Would you like to reset all directory permissions to 755 (drwxr-xr-x) and directory ownerships to root.root ([y]es, [n]o)? n Creating tar file clamav-0.88.i686.tar... ./ usr/ usr/lib/ usr/lib/libclamav.so.1.0.17 usr/lib/libclamav.la usr/lib/libclamav.a usr/lib/pkgconfig/ usr/lib/pkgconfig/libclamav.pc usr/include/ usr/include/clamav.h usr/bin/ usr/bin/clamscan usr/bin/clamdscan usr/bin/freshclam usr/bin/sigtool usr/bin/clamav-config usr/sbin/ usr/sbin/clamd usr/share/ usr/share/clamav/ usr/share/clamav/main.cvd usr/share/clamav/daily.cvd usr/man/ usr/man/man1/ usr/man/man1/clamscan.1 usr/man/man1/freshclam.1 usr/man/man1/sigtool.1 usr/man/man1/clamdscan.1 usr/man/man5/ usr/man/man5/clamd.conf.5 usr/man/man5/freshclam.conf.5 usr/man/man8/ usr/man/man8/clamd.8 usr/man/man8/clamav-milter.8 etc/ etc/clamd.conf.new etc/freshclam.conf.new install/ install/doinst.sh install/slack-desc var/ var/run/ var/run/clamav/ tar-1.13: clamav-0.88.i686.tar is the archive; not dumped Gzipping clamav-0.88.i686.tar... Renaming clamav-0.88.i686.tar.gz to clamav-0.88.i686.tgz... Moving clamav-0.88.i686.tgz to ..... Package creation complete. #
Установим полученный пакет.
# installpkg clamav-0.88.i686.tgz
Проверим, появился ли пакет в списке установленных пакетов.
# ls /var/log/packages/clamav-0.88.i686 /var/log/packages/clamav-0.88.i686 #
Пока не удаляете файлы из директории /tmp, мы к ним еще вернемся.
[править] Конфигурация
Конфигурация антивируса заключается в редактировании его конфигурационного файла /etc/clamd.conf.
Строчку со словом Example необходимо удалить.
Параметр LogFile определяет месторасположения файла журнальной регистрации. По умолчанию файл не создается и не используется.
Параметр LogFileMaxSize определяет максимальный размер журнального файла. Значение по умолчанию — 1 Мбайт.
Параметр LogSyslog заставляет программу посылать сообщения в стандартную систему журнальной регистрации Syslog. Это можно делать в том случае, когда предполагается небольшой поток информации. Поскольку у меня не очень нагруженный сервер я буду использовать Syslog.
LogFacility определяет средство, которое будет использоваться при посылке сообщений в Syslog. В моем случае антивирус будет использоваться только с почтовым сервером, поэтому я переопределю значение параметра.
LogFacility LOG_MAIL
Параметр PidFile определяет файл, в котором будет находиться PID процесса. Он нам потребуется для создания стартовых скриптов.
PidFile /var/run/clamav/clamd.pid
DatabaseDirectory определяет директорию в которой будут находиться антивирусные базы данных. Укажем директорию которая будет использоваться в Slackware.
DatabaseDirectory /usr/share/clamav
Параметр LocalSocket определяет файл типа socket, через который программы могут посылать данные на проверку антивирусом.
LocalSocket /var/run/clamav/socket
При помощи параметра TCPSocket можно указать номер порта, на котором программа будет слушать запросы от клиентов. Поскольку в нашем случае антивирус и почтовый сервер находятся на одной машине, лучше применять файл типа socket. Поэтому мы не будем явно определять этот параметр.
Параметр User определяет пользователя с правами которого будет выполняться программа.
User clamav
Параметр ArchiveMaxFileSize позволит указать максимальный размер архива, который будет сканироваться на вирусы. Значение по умолчанию — 10Мбайт.
[править] Конфигурация обновления антивирусных баз
Для обновления антивирусных баз используется программа freshclam. У нее есть конфигурационный файл freshclam.conf. Сейчас мы его немного отредактируем.
Удалите строку Example.
Параметр DatabaseDirectory должен указывать на ту же директорию, что и аналогичный параметр в файле clamd.conf.
DatabaseDirectory /usr/share/clamav
DatabaseOwner определяет пользователя которому будут принадлежать файлы антивирусных баз.
DatabaseOwner clamav
DatabaseMirror определяет имя компьютера, откуда программа будет брать обновления антивирусных баз.
DatabaseMirror db.ru.clamav.net
[править] Запуск
Сначала запустим программу обновления антивирусных баз.
# freshclam ClamAV update process started at Thu Jan 12 17:15:36 2006 WARNING: DNS record is older than 3 hours. WARNING: Invalid DNS reply. Falling back to HTTP mode. Reading CVD header (main.cvd): OK main.cvd is up to date (version: 35, sigs: 41649, f-level: 6, builder: tkojm) Reading CVD header (daily.cvd): OK Downloading daily.cvd [*] daily.cvd updated (version: 1239, sigs: 474, f-level: 7, builder: diego) Database updated (42123 signatures) from db.ru.clamav.net (IP: 62.181.41.8) #
Теперь запустим сам антивирус.
# clamd #
Убедимся, что был создан socket файл.
# ls -l /var/run/clamav/ total 4 -rw-rw---- 1 clamav clamav 4 2006-01-12 17:05 clamd.pid srwxrwxrwx 1 clamav clamav 0 2006-01-12 17:05 socket #
Вообщем, антивирус заработал, но ведь Вы не будете каждый раз запускать его вручную. Давайте напишем стартовые скрипты для Slackware Linux. В дистрибутивах, где clamav входит в стандартную поставку этого делать не надо.
[править] Стартовый скрипт
Стартовый скрипт антивируса достаточно простой. Создайте файл rc.clamav.new следующего содержания.
#! /bin/bash
start()
{
if [ -f /var/run/clamav/clamd.pid ]; then
if ps xa | grep ^$(head -1 /var/run/clamav/calmd.pid) > /dev/null; then
echo "ClamAv working!"
else
rm -r /var/run/clamav/clamd.pid
fi
fi
echo "Start a ClamAv antivirus"
clamd
if [ -f /var/run/clamav/freshclam.pid ]; then
if ps xa | grep ^$(head -1 /var/run/clamav/freshcalm.pid) > /dev/null; then
echo "FreshClam working!"
else
rm -r /var/run/clamav/freshclam.pid
fi
fi
echo "Start a freshclam"
freshclam -d
}
stop()
{
killall clamd
killall freshclam
}
case $1 in
start)
start ;;
stop)
stop ;;
restart)
stop
start ;;
*)
echo "Usage rc.clamav start|stop|restart"
exit 88
esac
Нам прийдется внести кое какие изменения в пакет, который мы создавали для Slackware Linux. В нем нет стартовых скриптов. Поэтому создадим директорию rc.d и поместим в нее стартовый скрипт.
# cd /tmp/clamav # mkdir etc/rc.d # cp rc.clamav.new etc/rc.d # chmod a-x etc/rc.d/rc.clamav.new #
Обратите внимание на то, что мы сбросили бит x в ноль. Это необходимо, что бы скрипт не запускался автоматом при старте системы после установки. Пусть администратор решает надо ему это или нет.
И еще добавим в файл doinst.sh строку:
config etc/rc.d/rc.clamav.new
После этого создадим пакет снова. Теперь у нас правильный пакет.
| Внимание! | В стартовых скриптах запуск антивируса необходимо писать в ручную. Например в файле /etc/rc.d/rc.sendmail. Или других скриптах, запускающих другие почтовые серверы. |
| Внимание! | Антивирус необходимо запускать перед стартом почтового сервера. |
[править] Подключение антивируса к почтовым серверам
[править] Настройка Sendmail для работы с ClamAV
Для подключения антивируса к Sendmail можно использовать два метода:
- При помощи программы procmail.
- При помощи входных фильтров sendmail и библиотеки milter.
Procmail доставляет почту в почтовые ящики пользователей и заодно может выполнять различные действия с почтой. Но в этом случае на вирусы будет проверяться только входящая почта пользователей. Исходящая почта проверяться не будет. Поэтому второй способ предпочтительнее.
Для начала, нам потребуется специальная программа, которая будет использовать функции библиотеки milter. Задачи этой программы:
- Получить письмо от sendmail.
- Передать его на проверку демону clamd.
- Если все хорошо, отдать его sendmail на дальнейшую доставку. Если вирус был обнаружен, тогда действие зависит от конфигурации.
Нам повезло, такая программа поставляется непосредственно с clamav и называется clamav-milter.
Теперь настройки самого sendmail. В файле my.mc (см. настрока Sendmail) нам необходимо добавить строку:
INPUT_MAIL_FILTER(`clmilter',`S=local:/var/run/clamav/milter.socket,F=,T=S:4m;R:4m')dnl
Макрос определяет входной фильтр — программу которой будут передаваться письма и некоторые дополнительные параметры. Кроме того, он автоматически определяет специальную переменную confINPUT_MAIL_FILTERS, которая указывает какие фильтры будут использоваться.
Создайте новый файл sendmail.cf, но пока не перезапускайте sendmail. Должен существовать файл типа socket, через который он будет общаться с clamav-milter.
Clamav-milter — это демон. Поэтому его необходимо запускать один раз.
clamav-milter -lo --external /var/run/clamav/milter.socket
| Внимание! | Sendmail следует запускать только после запуска clamav-milter. |
[править] Стартовые скрипты
Для того, что бы Sendmail мог запускаться при старте системы, нам прийдется внести кое какие изменения в его стартовые скрипты.
Во первых в функции sendmail_start, перед запуском sendmail добавим следующие строки:
if [ -x /etc/rc.d/rc.clamav ]; then /etc/rc.d/rc.clamav start fi if ps xa | grep -v grep | grep 'clamav-milter -lo \ --external /var/run/clamav/milter.socket' > /dev/null then echo "clamav-milter working!" else echo "Starting clamav-milter" clamav-milter -lo --external /var/run/clamav/milter.socket fi
Так же в функции sendmail_stop, сразу после остановки sendmail, добавим строку:
killall clamav-milter if [ -x /etc/rc.d/rc.clamav ]; then /etc/rc.d/rc.clamav stop fi

