Ключевые слова:mail, virus, clamav, freebsd, rar, compress, patch, (найти похожие документы)
From: Victor Ustugov <victor на corvax.kiev.ua>
Newsgroups: exim-conf maillist
Date: Mon, 19 May 2005 14:31:37 +0000 (UTC)
Subject: ClamAV 0.80 и RAR3 под FreeBSD
Оригинал: http://www.mta.org.ua/pipermail/exim-conf/2004-November/000208.html
пишу в оба листа, потому как на generic@ почему-то не подписываются,
хотя надо бы такие письма (не относящиеся к какому-то конкретному MTA)
отсылать именно в generic@
итак... вчера вечером в одном российском форуме мне показали линк:
http://mcmcc.bat.ru/clam_rar3.html
тут описано, как прикрутить поддержку rar3 к clamav 0.80, приведены
линки на патчи и на говотовые пакеты для RedHat/Fedora.
теперь о том, как все это реализовать на FreeBSD:
1. либа libunrar3.
в портах ее нет. но в портах есть archivers/unrar, который собирается из
тех же исходников, из которых должна собираться libunrar3. одно но:
после накладывания патча http://mcmcc.bat.ru/clamav/unrar-3.4.3_fix.patch
target unrar отказывается собираться. с диагностикой я не возился, поскольку меня
устаивало создание нового порта.
берем скрипт patch_unrar.sh из аттача и выполняем его.
скрипт содает копию содержимого каталога /usr/ports/archivers/unrar в
каталоге /usr/ports/archivers/libunrar3, после чего меняет название
порта, добавляет использование вышеуказанного патча и меняет набор
файлов, входящих в состав package, потом пересобирает и устанавливаем порт.
2. пересборка clamav 0.80.
берем патч patch-libclamav::stdlib.patch из аттача и сохраняем в
каталоге /usr/ports/security/clamav/files
берем скрипт patch_clamav.sh из аттача и выполняем его.
скрипт дополняет набор патчей, дополняет флаги компиляции кламава,
накладывает патчи, выполняет запуск необходимых для конфигурирования
программ, пересобирает порт. но не устанавливает его.
make install как-нибудь сами выполните.
что все это дает:
до пересборки clamav 0.80 из зараженного сообщения был извлечен
прикрепленный файл и сохранен в файле Win32.HLLM.Beagle.18848.
после этого файл был запакован архиватором rar 2.90 в архив с именем
Win32.HLLM.Beagle.18848.rar2.rar и архиватором rar 3.11 в архив с
именемWin32.HLLM.Beagle.18848.rar3.rar
вот результаты проверки до пересборки clamav'а:
# clamdscan Win32.HLLM.Beagle.18848.rar2.rar
Win32.HLLM.Beagle.18848.rar3.rar
/tmp/Win32.HLLM.Beagle.18848.rar2.rar: Worm.Bagle.AT FOUND
/tmp/Win32.HLLM.Beagle.18848.rar3.rar: RAR module failure ERROR
/tmp/Win32.HLLM.Beagle.18848.rar3.rar: OK
----------- SCAN SUMMARY -----------
Infected files: 1
Time: 0.164 sec (0 m 0 s)
вот результаты проверки после пересборки clamav'а (clamd.conf остался
без изменеий):
# clamdscan Win32.HLLM.Beagle.18848.rar2.rar
Win32.HLLM.Beagle.18848.rar3.rar
/tmp/Win32.HLLM.Beagle.18848.rar2.rar: Worm.Bagle.AT FOUND
/tmp/Win32.HLLM.Beagle.18848.rar3.rar: Worm.Bagle.AT FOUND
----------- SCAN SUMMARY -----------
Infected files: 2
Time: 0.212 sec (0 m 0 s)
все тесты проводились с использованием следующих портов:
# pkg_info -I unrar\* libunrar\* clam\*
clamav-0.80 Command line virus scanner written entirely in C
libunrar3-3.43,3 Extract, view & test RAR archives
unrar-3.43,3 Extract, view & test RAR archives
patch_clamav.sh
#!/bin/sh
DIST_FILE=clamav-libunrar3.patch
DIST_FILE_FULL=/usr/ports/distfiles/${DIST_FILE}
PORT_DIR=/usr/ports/security/clamav
if [ ! -f ${DIST_FILE_FULL} ]; then
wget http://mcmcc.bat.ru/clamav/${DIST_FILE} -O${DIST_FILE_FULL}
fi
#cp files/patch-libclamav::stdlib.patch ${PORT_DIR}/files/
cd ${PORT_DIR}
echo "PATCHFILES=${DIST_FILE}" > ${PORT_DIR}/Makefile.local
echo "PATCH_DIST_STRIP=-p1" >> ${PORT_DIR}/Makefile.local
echo "CPPFLAGS+= -I\${LOCALBASE}/include/libunrar3" >> ${PORT_DIR}/Makefile.local
echo "LDFLAGS+= -lunrar3" >> ${PORT_DIR}/Makefile.local
#perl -ni -e "print \$_ unless (/${DIST_FILE}/)" ${PORT_DIR}/distinfo
#echo "MD5 (${DIST_FILE}) = `md5 ${DIST_FILE_FULL} | awk '{print $4}'`" >> ${PORT_DIR}/distinfo
#echo "SIZE (${DIST_FILE}) = `ls -l ${DIST_FILE_FULL} | awk '{print $5}'`" >> ${PORT_DIR}/distinfo
make clean
make makesum
make patch
cd work/clamav-0.80
aclocal
autoconf
automake
cd ../..
make build
patch_unrar.sh
#!/bin/sh
DIST_FILE=unrar-3.4.3_fix.patch
DIST_FILE_FULL=/usr/ports/distfiles/${DIST_FILE}
PORT_DIR=/usr/ports/archivers/libunrar3
SRC_PORT_DIR=/usr/ports/archivers/unrar
rm -rf ${PORT_DIR}
rsync -avz ${SRC_PORT_DIR}/ ${PORT_DIR}/
if [ ! -f ${DIST_FILE_FULL} ]; then
wget http://mcmcc.bat.ru/clamav/${DIST_FILE} -O${DIST_FILE_FULL}
fi
cd ${PORT_DIR}
echo "PATCHFILES=${DIST_FILE}" > ${PORT_DIR}/Makefile.local
echo "PATCH_DIST_STRIP=-p1" >> ${PORT_DIR}/Makefile.local
#perl -ni -e "print \$_ unless (/${DIST_FILE}/)" ${PORT_DIR}/distinfo
#echo "MD5 (${DIST_FILE}) = `md5 ${DIST_FILE_FULL} | awk '{print $4}'`" >> ${PORT_DIR}/distinfo
#echo "SIZE (${DIST_FILE}) = `ls -l ${DIST_FILE_FULL} | awk '{print $5}'`" >> ${PORT_DIR}/distinfo
perl -pi -e 's/(\@\$\{SED\} -e)/$1 "s\|all:\tunrar\|all:\tlib\|" -e/' ${PORT_DIR}/Makefile
perl -pi -e 's/^(PORTNAME=\s*)\S+$/${1}libunrar3/' ${PORT_DIR}/Makefile
perl -pi -e 's/^.*INSTALL_PROGRAM.+\/unrar.*$/\t\@\$\{MKDIR\} \$\{PREFIX\}\/include\/libunrar3
\t\$\{INSTALL_DATA\} \$\{WRKSRC\}\/dll.hpp \$\{PREFIX\}\/include\/libunrar3
\t\$\{INSTALL_DATA\} \$\{WRKSRC\}\/libunrar3.so \$\{PREFIX}\/lib
/' ${PORT_DIR}/Makefile
make makesum
make patch
make build NOPORTDOCS=yo
make deinstall install
diff -urN ../clamav-0.80.orig/libclamav/unrarlib.c ../clamav-0.80/libclamav/unrarlib.c
--- ../clamav-0.80.orig/libclamav/unrarlib.c Fri Nov 5 12:51:17 2004+ ../clamav-0.80/libclamav/unrarlib.c Fri Nov 5 12:47:21 2004
@@ -27,6 +27,7 @@
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/param.h>
+#include <stdlib.h>
#include <libunrar3/dll.hpp>
#include "clamav.h"
#include "others.h"