ALT Linux Community general discussions
 help / color / mirror / Atom feed
From: "Пирогов Алексей" <ipalex@ferplast.com.ua>
To: community@altlinux.ru
Subject: Re: [Comm] Kaspersky AVP & Postfix
Date: Thu, 7 Aug 2003 11:20:24 +0300
Message-ID: <200308071120.24438.ipalex@ferplast.com.ua> (raw)
In-Reply-To: <20030807155608.2718d867.olli@rbauto.ru>

В сообщении от 7 Август 2003 14:56 Oleg K. Artemjev написал(a):
> Так что ежели не в лом отправить кусочки соответствующих конфигов в конфу -
> welcome, думаю кого нибудь да обрадуете.

Ок. Привожу пошаговые инструкцию по установке и настройке демона drwebd, его 
связки с postfix и sendmail (с qmail и exim нету) - частично это описано в 
документации по DrWeb (только там это весьма растянуто), а некоторые вещи 
выяснял методом тыка.
А также пару скриптов для ежедневного обновления, проверки системных и 
домашних каталогов и карантина и отправки отчета по почте.

Установка и настройка демона drwebd
-----------------------------------

1.  Ставим DrWeb
# rpm -ihv drweb-4.29.2-glibc.2.2.i386.rpm
    или
# rpm -ihv drweb-4.29.2-glibc.2.3.i386.rpm

После установки получаем такую картину:
    /opt/drweb - домашний каталог
    /etc/drweb - настройки
    /etc/rc.d/init.d/drwebd - скрипт запуска демона
    /var/drweb - рабочие каталоги

2.  Этот пункт не обязательный, но полезный - по не совсем понятным мне
    причинам DrWeb для Linux устанавливается в каталог /opt, хотя традиционно
    (и так сделано в версии для FreeBSD) приложения находятся в /usr/local,
    поэтому переносим домашний каталог из /opt/drweb в /usr/local/drweb,
    а на старом месте создаем линк - он необходим т.к. привязка к катологу
    зашита в бинарник :(
# mv /opt/drweb /usr/local/drweb
# ln -s /usr/local/drweb /opt/drweb
    Для удобства создаем в домашнем каталоге линки на файл конфигурации и на
    клиента демона
# cd /usr/local/drweb
# ln -s /etc/drweb/drweb32.ini drweb32.ini
# ln -s clients/drwebdc drwebdc

3.  Создаем пользователя drweb
# useradd -d /usr/local/drweb -s /sbin/nologin -M drweb

ЗАМЕЧАНИЯ: 1) не забудьте ключик -M, чтобы в домашний каталог не копировался
	   /etc/skel
	   2) в некоторых дистрибутивах (например ALTLInux) для демонов традиционно
	   принято использовать в качестве shell /dev/null (а не /sbin/nologin)

4.  Меняем владельца и права на рабочие каталоги
    а также исправляем права на каталог конфигурации
    (почему-то по умолчанию туда никого кроме root-а не пускают)
# chown -R drweb:drweb /var/drweb/*
# chown -R root:root /var/drweb/bases
# chmod -R ug+rwX /var/drweb/*
# chmod -R o-rwx /var/drweb/*
# chmod -R a+rX /var/drweb/bases
# chmod -R g-w /var/drweb/bases
# chmod a+rX /etc/drweb

5.  Редактируем файл конфигурации (drweb32.ini)
    задаем бюджет под которым будет работать демон
...
[Linux:Daemon]
...
User = drweb
...

    можно также включить руссификацию (раскомментировать указанные строки)
[Linux]
...
LngFileName = "/usr/local/drweb/lib/russian.dwl"
...
[Linux:Daemon]
...
LngFileName = "/usr/local/drweb/lib/russian.dwl"
...

ЗАМЕЧАНИЕ: Также хорошо заменить все пути /opt/drweb/.* на /usr/local/drweb/.*
	   хотя работаь будет и так, благодаря линке (см. п.2)

6.  Самое время установить лицензионный ключ - см. документацию
    перед установкой лицензионного ключа демо-ключ желательно сохранить
# mv /usr/local/drweb/drwebd.key /usr/local/drweb/drwebd.demo_key
    если лицензионного ключа нету, то этот пункт пропускаем и drweb будет
    работать на демонстрационном ключе и не сможет лечить

7.  Редактируем скрипт запуска демона (/etc/rc.d/init.d/drwebd)
    Этот шаг необязательный, поскольку стандартный скрипт в целом
    работоспособный, но он больше напоминает заготовку, поэтому
    предлагается использовать следующий скрипт:
--------------------------------------------------------------------
#!/bin/sh

# chkconfig: 35 75 75
# description: Runs Dr. Web antivirus daemon

. /etc/init.d/functions

RETVAL=$?

DRWHOMEDIR="/usr/local/drweb"
DRWDPIDFILE="/var/drweb/run/drwebd.pid"
if [ -e $DRWDPIDFILE ]; then DRWDPID=`cat $DRWDPIDFILE | head -1`; fi

start() {
    action $"Starting Dr. Web daemon: " $DRWHOMEDIR/drwebd
    RETVAL=$?
}

stop() {
    action $"Shutting down Dr. Web daemon: " kill $DRWDPID
    RETVAL=$?
}

reload() {
    action $"Reloading Dr. Web daemon: " kill -HUP $DRWDPID
    RETVAL=$?
}

status() {
    if [ -n "$DRWDPID" ];
	then echo "Dr. Web daemon (pid "$DRWDPID") is running..."
	    $DRWHOMEDIR/clients/drwebdc -sv -sb
	else echo "Dr. Web daemon is stopped"
    fi
}

case "$1" in
    start)
	start
    ;;
    stop)
	stop
    ;;
    status)
	status
    ;;
    reload)
	reload
    ;;
    restart)
	stop
	sleep 1
	start
    ;;
    *)
	echo "Usage: $0 {start|stop|status|restart|reload}"
	exit 1
esac

exit $RETVAL
--------------------------------------------------------------------

8.  Запускаем демона
# service drwebd start

9.  Проверяем поднятый сокет
# netstat -napl | grep drweb
tcp   0      0 127.0.0.1:3000    0.0.0.0:*        LISTEN 6697/drwebd
unix  2      [ ]         DGRAM                    348573 6697/drwebd

10. Проверяем работоспособность демона
    для TCP сокета:  drwebdc -nHOSTNAME -pPORTNUM -sv -sb
    для Unix сокета: drwebdc -uSOCKETFILE -sv -sb
# /usr/local/drweb/drwebdc -nlocalhost -p3000 -sv -sb

    а если Вы использовали предложенный скрипт запуска демона,
    то увидеть состояние демона можно командой:
# service drwebd status

11. Проверяем работу демона (см. документацию, как изготовить
    демонстрационный вирусованый файл eicar.com)
# /usr/local/drweb/drwebdc -feicar.com
Results: daemon return code 0x10020 (known virus is found)

можно получить более подробную информацию так (через TCP сокет)
# /usr/local/drweb/drwebdc -w -nlocalhost -p3000 -f eicar.com
если ее не получилось, то надо посмотреть лог демона

Если проверка прошла правильно, значит демон находится в рабочем состоянии



Настройка автоматического обновления антивирусных баз
-----------------------------------------------------
Для автоматического обновления предусмотрен скрипт update/update.pl
Для его работы необходим модуль String::CRC32

1.  Устанавливаем модуль String::CRC32
    Если модуль входит в состав Вашего дистрибутива (например ALTLinux) в виде
    готового пакета, то просто устанавливаем пакет
# rpm -Uhv perl-String-CRC32-1.2-XXX.iX86.rpm
    или через apt (и весьма желательно, если Вы используете apt)
# apt-get install perl-String-CRC32

    Если модуль не входит в состав Вашего дистрибутива, то загружаем его
    (если у нас его еще нет)
# wget http://cpan.org/modules/by-module/String/String-CRC32-1.2.tar.gz
    и собираем (обычно сборку выполняют в /usr/src, но можно и в /tmp)
# tar zxvf String-CRC32-1.2.tar.gz
# cd String-CRC32-1.2
# perl Makefile.PL
# make
# make test
# make install

2.  Проверяем работоспособность
# /usr/local/drweb/update/update.pl

3.  Обеспечиваем ежедневный запуск update.pl
    это реализовано в скрипте /etc/cron.daily/drweb-check (см. ниже) в первых
    двух строках
----------------------------------
cd /usr/local/drweb/update
./update.pl
----------------------------------
    не забудьте сделать его исполняемым
# chmod a+rx /etc/cron.daily/drweb-check
    и перегрузить конфигурацию crond
# service crond reload

При необходимости можно поправить update.pl чтобы он забирал
обновления оттуда, откуда скажете



Установка и настройка связки drweb+postfix
------------------------------------------
1.  Распаковываем и устанавливаем клиента  клиента drweb-postfix
    (и поправляем имя файла ChangeLog, чтобы не затереть основной файл)
# tar zxvf drweb-postfix-4.29.10-linux.tar.gz -C /tmp
# cd /tmp/drweb-postfix
# mv opt/drweb/ChangeLog opt/drweb/ChangeLog.postfix
# cp -fR etc/* /etc/
# cp -fR opt/* /usr/local/

2.  Строим конфигурацию демона drweb-postfix
# cd /usr/local/drweb/doc/postfix
# ./configure.pl
    и внимательно отвечаем на вопросы (не забудте изменить /opt/drweb на
    /usr/local/drweb)
    Конфигурационный скрипт внесет необходимые изменения в
    /etc/postfix/master.cf и /etc/drweb/drweb_postfix.conf

3.  Перезапускаем postfix
# service postfix restart

4.  Проверяем работу антивирусного фильтра
    Пришлите тестовому пользователю письмо, содержащее вложение eicar.com



Установка и настройка связки drweb+sendmail
-------------------------------------------
1.  Распаковываем и устанавливаем клиента  клиента drweb-sendmail
    (и поправляем имя файла ChangeLog, чтобы не затереть основной файл)
# tar zxvf drweb-sendmail-4.29-linux.tar.gz -C /tmp
# cd /tmp/drweb-sendmail
# mv opt/drweb/ChangeLog opt/drweb/ChangeLog.smf
# cp -fR etc/* /etc/
# cp -fR opt/* /usr/local/

3.  Строим конфигурацию демона drweb-sendmail
# cd /usr/local/drweb/doc/sendmail
# ./configure
    и внимательно отвечаем на вопросы

4.  После завершения работы конфигурационного скрипта получим скрипт
    инициализации демона drweb-sendmail, нужно поправить в нем путь
    к домашнему каталогу drweb (с /opt/drweb на /usr/local/drweb)
# vi drweb-sendmail
...

5.  Переносим скрипт инициализации демона drweb-sendmail в каталог
    стартовых скриптов, устанавливаем его запуск и запускаем демона
# mv drweb-sendmail /etc/rc.d/init.d
# chkconfig --add drweb-sendmail
# service drweb-sendmail start

6.  Изменяем конфигурацию sendmail
    (конфигурационный скрипт создает не только скрипт инициализации
    демона drweb-sendmail, но и заготовку для добавления в sendmail.mc,
    это файл sendmail.mc.addon)
    Добавляем содержимое sendmail.mc.addon в sendmail.mc (можно в конце)
# cat sendmail.mc.addon >> /etc/mail/sendmail.mc

7.  Пересобираем конфигурацию sendmail
    (расположение sendmail.cf зависит от настройки sendmail)
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
    или можно так
# make -C /etc/mail

8.  Перезапускаем sendmail
# service sendmail restart

9.  Проверяем работу антивирусного фильтра
    Пришлите тестовому пользователю письмо, содержащее вложение eicar.com



/usr/local/sbin/drweb-antivirus_check
-------------------------------------
#!/bin/sh
DRWEB=/usr/local/drweb/drweb
OPTS="-arn -cnn -fm -ha -upn -mln -sd -ok- -ot"
LOGFILE=/var/drweb/log/last.log

SYSDIRS="/bin /boot /etc /lib /sbin /usr"
HOMEDIRS="/root /home"
VARDIRS="/var/spool/mail /tmp"
DIRS="$SYSDIRS $HOMEDIRS $VARDIRS"

REPORTHEAD=`date '+%Y.%m.%d %R'`"\nCheck directories: sys($SYSDIRS), 
home($HOMEDIRS), var($VARDIRS)\n"

(   echo -e "$REPORTHEAD"
    nice -n 19 $DRWEB $DIRS $OPTS
) > $LOGFILE

REPORT=`cat $LOGFILE | grep -v 'Загрузка /var/drweb/bases/'`
[ -z `echo $REPORT | grep 'инфицирован'` ] && REPORT=$REPORTHEAD"No viruses 
found"
echo -e "$REPORT"



/usr/local/sbin/drweb-quarantine_check
--------------------------------------
#!/bin/sh
DRWEBDC=/usr/local/drweb/drwebdc
QUARANTINE=/var/drweb/infected
LSQFILE=/var/drweb/log/infected.list

MAILSPOOL=/var/spool/mail
MAILER="/usr/lib/sendmail -t"
MAILTO=postmaster

LIST=`ls -1 $QUARANTINE | grep -v -E '\.gz$'`
for FILE in $LIST; do
    $DRWEBDC -h -q -f$QUARANTINE/$FILE
    if [ $? -eq 32 ]; then # 32 = 0x10000 (ok)
	HEAD=`awk '{if ($0=="") exit; print $0}' $QUARANTINE/$FILE`
	(echo "To: $MAILTO"
	echo 'Subject: UNDELIVERED MAIL ('`echo "$HEAD" | grep -E 
'^Subject:|^To:'`')'
	awk '{if (h==0) {if ($0~/^Subject:|^To:/) next; if ($0=="") h=1}; print $0}' 
$QUARANTINE/$FILE
	) | $MAILER
	rm $QUARANTINE/$FILE
    else
	gzip $QUARANTINE/$FILE
    fi
done

COUNT=0
echo -e `date '+%Y.%m.%d %R'`"\nIn quarantine ($QUARANTINE) there are such 
files:"
LSQ=`ls -1 $QUARANTINE`
for FILE in $LSQ; do
    let COUNT=COUNT+1
    VIRINFO=`zcat $QUARANTINE/$FILE | $DRWEBDC -h -q -rv -i`
    VIRNAMES=`(for ITEM in $VIRINFO; do echo $ITEM; done) | grep -v -E 
'DrWeb|report|-----|========'`
    echo "$COUNT. $FILE: "$VIRNAMES
done
echo "Total $COUNT files"

NEWFILES=`echo "$LSQ" | comm -2 -3 - $LSQFILE`
if [ -n "$NEWFILES" ]; then
    echo -e "\nNew files in quarantine:"
    echo "$NEWFILES"
fi
echo "$LSQ" > $LSQFILE


не забудьте сделать эти скрипты исполняемыми
# chmod a+rx /usr/local/sbin/drweb-antivirus_check
# chmod a+rx /usr/local/sbin/drweb-quarantine_check



/etc/cron.daily/drweb-check
---------------------------
#!/bin/sh
cd /usr/local/drweb/update
./update.pl
( service drwebd status 2>&1
  echo -e "\n"
  /usr/local/sbin/drweb-antivirus_check
  echo -e "\n"
  /usr/local/sbin/drweb-quarantine_check
) | mail -s "DrWeb check - "`date +%Y-%m-%d` root



Если кому-то не понравится, просьба ногами сильно не бить :)
-- 
Наилучшие пожелания,                      Registered         .--.
Пирогов Алексей                       Linux User #293162    |@_@ |
mailto:ipalex@ukr.net                                       |!_/ |
mailto:ipalex@ferplast.com.ua                              //   \ \
(AlekseyPirogov@ferplast.com.ua)                          (|     | )
UIN:172368093                                            /'\_   _/`\
                                       Powered by Linux  \___)=(___/

  reply	other threads:[~2003-08-07  8:20 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-08-07  7:13 Sergey V. Golovin
2003-08-07  7:15 ` Пирогов Алексей
2003-08-07 11:48   ` Re[2]: " "KoLyA" 
2003-08-07  7:38     ` Пирогов Алексей
2003-08-07 12:18     ` Re[2]: " Mike Lykov
2003-08-07 11:56   ` Oleg K. Artemjev
2003-08-07  8:20     ` Пирогов Алексей [this message]
2003-08-07 13:36       ` Dmitry Ivanov
2003-08-07  7:37 ` Maxim.Savrilov
2003-08-07 10:26   ` Sergey V. Golovin
2003-08-07 10:53     ` Maxim.Savrilov
2003-08-07 11:04       ` Sergey V. Golovin
2003-08-07  7:51 ` Dmitry Ivanov
2003-08-07  8:19   ` Sergey V. Golovin
2003-08-07  8:56     ` Dmitry Ivanov
2003-08-07 10:23       ` Sergey V. Golovin
2003-08-07 10:38         ` Maxim.Savrilov
2003-08-07  7:57 ` Mike Lykov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200308071120.24438.ipalex@ferplast.com.ua \
    --to=ipalex@ferplast.com.ua \
    --cc=community@altlinux.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git