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
Источник — «http://kryukov.biz/wiki/ClamAV»
Инструменты
    
Личные инструменты