Проблема в следующем после того как прикрутил к постфиксу drweb-a
в папочке /var/spool/postfix/maildrop
начали застревать письма
вот что происходит
вот такое застревает
T
1059563516FDrWeb AntiVirS"alexey. ....... и т.д
рестарт постфикса не помогаетесли же изменить ручками вот так
T
1059563516F
DrWeb AntiVirS"alexey. ....... и т.д
то после рестарта постфикса писма раскладываются по локальным ящикам.Малоли кто сталкивался.
Заранее спасибо.
В логах postfix что про сессию говорится?
Drweb, видимо, неправильно настроен - может, права где-то не выставлены, etc.
Вот как раз сегодня прислали, может, пригодится:
-------
Date: 7 Август 2003 12:20
From: Пирогов Алексей <ipalex@ferplast.com.ua>
To: community@altlinux.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 drwebdc3. Создаем пользователя 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/drweb5. Редактируем файл конфигурации (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`; fistart() {
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
esacexit $RETVAL
--------------------------------------------------------------------8. Запускаем демона
# service drwebd start9. Проверяем поднятый сокет
# netstat -napl | grep drweb
tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN 6697/drwebd
unix 2 [ ] DGRAM 348573 6697/drwebd10. Проверяем работоспособность демона
для TCP сокета: drwebdc -nHOSTNAME -pPORTNUM -sv -sb
для Unix сокета: drwebdc -uSOCKETFILE -sv -sb
# /usr/local/drweb/drwebdc -nlocalhost -p3000 -sv -sbа если Вы использовали предложенный скрипт запуска демона,
то увидеть состояние демона можно командой:
# service drwebd status11. Проверяем работу демона (см. документацию, как изготовить
демонстрационный вирусованый файл 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::CRC321. Устанавливаем модуль 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.ta...
и собираем (обычно сборку выполняют в /usr/src, но можно и в /tmp)
# tar zxvf String-CRC32-1.2.tar.gz
# cd String-CRC32-1.2
# perl Makefile.PL
# make
# make test
# make install2. Проверяем работоспособность
# /usr/local/drweb/update/update.pl3. Обеспечиваем ежедневный запуск 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.conf3. Перезапускаем postfix
# service postfix restart4. Проверяем работу антивирусного фильтра
Пришлите тестовому пользователю письмо, содержащее вложение 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 start6. Изменяем конфигурацию sendmail
(конфигурационный скрипт создает не только скрипт инициализации
демона drweb-sendmail, но и заготовку для добавления в sendmail.mc,
это файл sendmail.mc.addon)
Добавляем содержимое sendmail.mc.addon в sendmail.mc (можно в конце)
# cat sendmail.mc.addon >> /etc/mail/sendmail.mc7. Пересобираем конфигурацию sendmail
(расположение sendmail.cf зависит от настройки sendmail)
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
или можно так
# make -C /etc/mail8. Перезапускаем sendmail
# service sendmail restart9. Проверяем работу антивирусного фильтра
Пришлите тестовому пользователю письмо, содержащее вложение 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.logSYSDIRS="/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
) > $LOGFILEREPORT=`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.listMAILSPOOL=/var/spool/mail
MAILER="/usr/lib/sendmail -t"
MAILTO=postmasterLIST=`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
doneCOUNT=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Если кому-то не понравится, просьба ногами сильно не бить :)
Из сожившейся ситуации вышел вот так:
SocketFile = "/var/drweb/run/drwebd.socket"
SocketMode = Unix
SocketAccess 0666
Почему на
SocketMode = TCP не работало нормально (точнее глючило) непонятно.