Защита системы от вирусов и спама: устанавливаем Clam Antivirus и SpamAssassin на FreeBSD

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

[Paul Hoadley (paulh@logicsquad.net), Eric Parsonage (eric@eparsonage.com). Перевод: Михаил Сгибнев (mixa@dreamcatcher.ru)]

Защита системы от вирусов и спама: устанавливаем Clam Antivirus и SpamAssassin на FreeBSD



Paul Hoadley Eric Parsonage

Copyright c 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.
  • 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
    

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

Этот документ был написан Полем Ходли (Paul Hoadley) и Эриком Персонейджем (Eric Parsonage). Этот документ описывает, что мы делали с qmail-scanner, работающим совместно с Clam AntiVirus и SpamAssassin на двух системах, управляемых FreeBSD 4.7 Ваши результаты могут отличаться от приведенных здесь. Если вы обнаружили какие-либо ошибки, или нашли, что программное обеспечение работает существенно по-другому, пожалуйста, сообщите нам.

Статья взята с сайта DreamCatcher. Англоязычную версию можно найти по адресу: http://www.clamav.net/doc/0.70/FreeBSD-HowTo/qmail-scanner-how-to.html.

[ опубликовано 31/03/2004 ]

Paul Hoadley (paulh@logicsquad.net), Eric Parsonage (eric@eparsonage.com). Перевод: Михаил Сгибнев (mixa@dreamcatcher.ru) - Защита системы от вирусов и спама: устанавливаем Clam Antivirus и SpamAssassin на FreeBSD   Версия для печати