[Comm] Kaspersky AVP & Postfix
Пирогов Алексей
=?iso-8859-1?q?ipalex_=CE=C1_ferplast=2Ecom=2Eua?=
Чт Авг 7 12:20:24 MSD 2003
В сообщении от 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 \___)=(___/
Подробная информация о списке рассылки community