Проверка вирусов используя ClamAV и Postfix



Диалог у телевизора или как мы к postfix-у clamav прикручивали

frend> Привет

greenh> я кажется спарвился с clamav

frend> Через что?

greenh> amavis-new

frend> Ну да, я тоже пытался через него.

greenh> и что получается?
greenh> что пишет?
greenh> в общем если что - могу попробовать подсказать

frend> М-м-м... интересно.

greenh> :)

frend> Я сейчас запустил amavisd-new на make install. Пока ставит
всякие перловые кусочки.

greenh> ок
greenh> а clamav стоит?

frend> Да.

greenh> запускается?
greenh> не матерится влогах?

frend> Пока не запускал.

greenh> запусти clamav-clam.sh rcvar
greenh> сорри clamav-clamd.sh rcvar должен быть в usr/local/etc/rc.d
greenh> ты под чем? freebsd?

frend> да.
frend> Там есть только clamav.sh

greenh> если его запустить без параметров, что он говорит?

frend> Собственно, он у меня уже запущен.
frend> bash# ps -ax | grep clam
3 ?? Ss 0:00,91 /usr/local/bin/freshclam -d -c 2 -l
/var/log/freshcla

greenh> нет
freshclam - это обновление

frend> Ничего не говорит. Запустился еще один freshclam

greenh> а что ты ставил из портов?

frend> В смысле?

greenh> там три варианта clam
greenh> и какой clam стоит?

frend> М-м-м...
frend> Не из портов.
frend> Поставить из портов?

greenh> поставь из портов
он в security живет

frend> [ ] MILTER Compile the milter interface
Это не надо?

greenh> я ставил, но по моему не использовал
поставь, гне помешает
greenh> только предыдущий грохни

frend> Угу.
frend> Компилится.

greenh> ок
скажешь когда, ок?

frend> ОК
frend> make install

greenh> сделал?

frend> да

greenh> ок
rehash
и смотри что там в /usr/local/etc/rc.d/

greenh> и make clean ^)

frend> rehash - это что?

greenh> обновление всяких системных переменных типа pach и тп

frend> Не знает такой команды :)

frend> bash# ./clamav-clamd.sh rcvar
# clamav_clamd
$clamav_clamd_enable=NO

greenh> как так:???
ну и пес с ним
ага
теперь в rc.conf пишеим
clamav_clamd_enable='YES'

greenh> это была первая пакость :)

frend> Мнда.
frend> Что дальше?

greenh> теперь запускай clamav_clamd.sh start

frend> На конфиги ругается.

greenh> что говрит?

frend> bash# ./clamav-clamd.sh start
Starting clamav_clamd.
ERROR: Please edit the example config file /usr/local/etc/clamav.conf.
ERROR: Can't open/parse the config file /usr/local/etc/clamav.conf

greenh> ага
ясно
сейчас, 1 сек

frend> При том, что он там есть :)

greenh> 2 мин, ща приду
greenh> там есть .conf или .conf.default?

frend> Собственно, я его запустил.

greenh> т.е.?

frend> Tue Sep 7 15:51:27 -> +++ Started at Tue Sep 7 15:51:27
Tue Sep 7 15:51:27 -> clamd daemon 0.75.1 (OS: freebsd4.9, ARCH:
i386, CPU : i386)

frend> Tue Sep 7 15:51:36 -> Archive support enabled.
Tue Sep 7 15:51:36 -> RAR support disabled.
Tue Sep 7 15:51:36 -> Mail files support disabled.
Tue Sep 7 15:51:36 -> OLE2 support enabled.
Tue Sep 7 15:51:36 -> Self checking every seconds.

greenh> ага
ок
теперь запускай в отдельной консоли
freshclam
просто, без .sh

greenh> он должен начать обновлятся

frend> bash# bash# freshclam
ClamAV update process started at Tue Sep 7 15:57:38
Reading CVD header (main.cvd): OK
main.cvd is up to date (version: 26, sigs: 5, f-level: 2, builder: tomek)
Reading CVD header (daily.cvd): OK
daily.cvd is up to date (version: 481, sigs: , f-level: 2, builder: tomek)

frend> Правда, в лги ничего не написалось.

greenh> вот и замечательно
amavis-new стал?

frend> Я его еще не запускал.

greenh> и не запускай
стал?

frend> Ну да.

greenh> $mydomain = 'kristall-service.net';
$daemon_user = 'vscan';
$file = '/usr/bin/file';
$daemon_group = 'wheel';
$TEMPBASE = "/tmp";
$ENV{TMPDIR} = $TEMPBASE;
$max_servers = 5;
$max_requests = 10;
$child_timeout=5*60;
$unix_socketname = "$MYHOME/amavisd.sock";
$inet_socket_port = 4;
$inet_socket_bind = '127.0.0.1';
@inet_acl = qw( 127.0.0.1 );
$DO_SYSLOG = 0;
$LOGFILE = "/var/log/amavis.log";
$log_level = 2; # (defaults to 0)
$hdr_encoding = 'koi8-r'; # (default: 'iso--1')
$bdy_encoding = 'koi8-r'; # (default: 'iso--1')

@av_scanners = (
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ]);

$virus_admin = "greenh\@kristall-service.net";
$spam_admin = "abuse\@$mydomain";
$mailfrom_notify_admin = "postmaster\@$mydomain";
$mailfrom_notify_recip = "postmaster\@$mydomain";
$mailfrom_notify_spamadmin = "postmaster\@$mydomain";
$QUARANTINEDIR = '/var/mail/virtual/kristall-service.net/virus/new';
$virus_quarantine_to = 'virus-quarantine'; # traditional local
quarantine
$spam_quarantine_to = 'spam-quarantine';

greenh> это amavisd.conf
первую строчку пофикси

greenh> есть?

frend> Это полный конфиг?

greenh> то, что работает у меня
а в полном конфе столько всего.....

frend> Сделал
frend> Опять Rc.conf править? :)

greenh> ага
запусти amavis.sh rcvar и если нужно....

greenh> блин... :)
amavisd.sh rcvar

frend> Так.
frend> bash# ./amavisd.sh start
Starting amavisd.
ERROR: MISSING REQUIRED BASIC MODULES:
IO::Wrap
IO::Stringy
Unix::Syslog
Mail::Field
Mail::Address
Mail::Header
Mail::Internet
MIME::Head
MIME::Body
MIME::Entity
MIME::Parser
MIME::Decoder::Base64
MIME::Decoder::Gzip64
MIME::Decoder::QuotedPrint
BEGIN failed--compilation aborted at /usr/local/sbin/amavisd line 138.

greenh> стоп
а что у на с перлом?
какой стоит?

frend> Вроде, обновлял.

greenh> до 5,8?

frend> да

greenh> странно
а посмотри в/var/db/pkg модули есть?

frend> This is perl, v5.8.5 built for i386-freebsd-64int
frend> До хрена там.
frend> Может, из-за того, что я не перебутился после обновления перла?

greenh> а сделай к примеру в /var/db/pkg
а ты делал use.perl port
greenh> ????

frend> Да, делал.

greenh> а сделай к примеру в /var/db/pkg
portupgrade p5-MIME-Base64-3.01

frend> мнда
frend> bash# portupgrade p5-MIME-Base64-3.01
bash: portupgrade: command not found

greenh> cd /usr/ports/sysutils/portupgrade
make
make install clean

frend> Stop in /usr/ports/lang/ruby18.
*** Error code 1

frend> Dependency warning: used OpenSSL version contains known vulnerabilities
Please update or define either WITH_OPENSSL_BASE or WITH_OPENSSL_PORT
*** Error code 1

greenh> а ну так идм в порт с ruby и делай make WITH_OPENSSL_BASE=yes

frend> угу

greenh> там же make install clean
и потом собирай portupgrade

frend> Это ясно :)

greenh> ну как?

frend> идет...
frend> bash# portupgrade p5-MIME-Base64-3.01
[Rebuilding the pkgdb <format:bdb1_btree> in /var/db/pkg ... - 140
packages found (-0 +140)
......................................................................
......................................................................
done]
** No such installed package: p5-MIME-Base64-3.01

greenh> что и требовалось доказать
portupgrade -f p5-MIME-Base64-3.01

frend>
bash# portupgrade -f p5-MIME-Base64-3.01
** No such installed package: p5-MIME-Base64-3.01

greenh> ясно
cd //usr/ports/converters/p5-MIME-Base64
и вперед

frend> А вот нифига.
frend> bash# cd //usr/ports/converters/p5-MIME-Base64
bash# make
bash# make install
Для продолжения нажмите любую клавишу...
bash#

frend> Оно уже стоит :(

greenh> правильно
greenh> он стоял, но после пересборки перла его не стало
из var/db/pkg руками удаляешь его
greenh> а потом собираешь

frend> Только его? Или еще что-то надо?

greenh> а все, на что ругается amavis
по одному

frend> Ни фига себе

greenh> можно сделать portupgrade для всех установленных пакетов, но
вопервых это долго, а во вторых я этой манупуляции побаиваюсь

greenh> так что лучше так
а что, там полтора десятка модулей

frend> А что значит "руками удалять"? Удалить соответствующую директорию?

greenh> они маленькие, собираются быстро
greenh> да

frend> То есть, удаляю директорию, а потом - make install? Так?

greenh> да

frend> Попробуем

greenh> давай
greenh> я именно так и делал

frend> Поставил. Директория появилась. Делаю
bash# portupgrade p5-MIME-Base64-3.01
[Updating the pkgdb <format:bdb1_btree> in /var/db/pkg ... - 140
packages found (-0 +1) . done]
** No such installed package: p5-MIME-Base64-3.01

greenh> я мин через 10 буду

frend> Это нормально?

greenh> нет
greenh> а ты что переставлял?

frend> Именно его.

greenh> странно
greenh> погоди
greenh> тогда portupgrade -a -f
только внимательно следи, что он делает
а то он может с дуру начать squid или XFree обновлять

frend> И что тогда - прерывать? :)

greenh> ctrl-c

frend> bash# bash# portupgrade -a -f
Stale dependency: amavisd-new-2.1.1,1 --> unrar-3.30_1,3 -- manually
run 'pkgdb -F' to fix, or specify -O to force.

greenh> cltkfq

frend> ?

greenh> сделай

frend> bash# pkgdb -F
---> Checking the package registry database
Missing origin: postfix-2.0.7,1
Skip this for now? [yes]
?

greenh> y
greenh> ну как?

frend> Блин. Поругался...

greenh> кто на кого?

frend> Там до хрена всего было.

greenh> ну pkgdb выполнился?

frend> Stale dependency: amavisd-new-2.1.1,1 -> unrar-3.30_1,3
(archivers/unrar):
New dependency? (? to help):

greenh> y
а потом более новую версию

frend> Так.
frend> bash# pkgdb -F

---> Checking the package registry database
[Updating the pkgdb <format:bdb1_btree> in /var/db/pkg ... - 139
packages found (-0 +1) . done]
Missing origin: postfix-2.0.7,1
Skip this for now? [yes]
To skip it without asking in future, please list it in HOLD_PKGS.
Missing origin: screen-3.9.15
Skip this for now? [yes]
To skip it without asking in future, please list it in HOLD_PKGS.

frend> Всё.

greenh> попробуйтеперь portupgrade для одного пакета

frend> Для какого?

greenh> для того же

frend> bash# portupgrade p5-IO-stringy-2.108
Вроде, прошло.

greenh> а ты ж не для него делал
greenh> и вообще, попробуй amavis, может запустится
greenh> хотя врятли

frend> Пробовал.

greenh> ну и?

frend> ERROR: MISSING REQUIRED BASIC MODULES:
IO::Wrap
IO::Stringy
Unix::Syslog
Mail::Field
Mail::Address
Mail::Header
Mail::Internet
MIME::Head
MIME::Body
MIME::Entity
MIME::Parser
MIME::Decoder::Base64
MIME::Decoder::Gzip64
BEGIN failed--compilation aborted at /usr/local/sbin/amavisd line 138.

greenh> portupgrade -f p5-MIME-Base64-3.01 пробуй
greenh> или какая у твоего версия

frend> Так. Один пакет руками поставил. Теперь:
ERROR: MISSING REQUIRED BASIC MODULES:
Unix::Syslog
Mail::Field
Mail::Address
Mail::Header
Mail::Internet
MIME::Head
MIME::Entity
BEGIN failed--compilation aborted at /usr/local/sbin/amavisd line 138.

greenh> это лучше
а руками - это как?

frend> Из портов

greenh> ставь таким же макаром остальные

frend> Угу.

greenh> поставил этот?
p5-MIME-Base64-

frend> Неа. p5-IO-stringy-2.108

greenh> ну и замечательно
а p5-MIME-Base64 ты поставил до этого

frend> Потихоньку.
frend> :)

greenh> остальное ставится?

frend> А там же придется прописывать конфиги постфикса?

greenh> придется
но позже
а пока нада amavis запустить

frend> Теперь новая напасть:
bash# bash# ./amavisd.sh start
Starting amavisd.
Problem in the Amavis::Unpackers code: Can't locate Convert/TNEF.pm in
@INC (@INC contains: lib /usr/local/lib/perl5/site_perl/5.8.5/mach
/usr/local/lib/perl5/site_perl/5.8.5 /usr/local/lib/perl5/site_perl
/usr/local/lib/perl5/5.8.5/BSDPAN /usr/local/lib/perl5/5.8.5/mach
/usr/local/lib/perl5/5.8.5) at (eval 60) line 17.
BEGIN failed--compilation aborted at (eval 60) line 17.
bash#

greenh> бля ща, посмотрю, кто это такой
greenh> /usr/ports/converters/p5-Convert-TNEF
greenh> посмотри, нет ли его установленного в /var/db/pkg
greenh> есть?

frend> Да.
frend> Снести?

greenh> да
greenh> и поставить :)
greenh> ставится?

frend> Там уже следубщий пошел :)
frend> Problem in the Amavis::Unpackers code: Can't locate
Convert/UUlib.pm in @INC (@INC contains: lib
/usr/local/lib/perl5/site_perl/5.8.5/mach
/usr/local/lib/perl5/site_perl/5.8.5 /usr/local/lib/perl5/site_perl
/usr/local/lib/perl5/5.8.5/BSDPAN /usr/local/lib/perl5/5.8.5/mach
/usr/local/lib/perl5/5.8.5) at (eval 60) line 18.
BEGIN failed--compilation aborted at (eval 60) line 18.

greenh> ну, и дальше тоже самое....
greenh> не понятно, но почекму-то при перестановке перла такие грабли
происходят или я что-то не понимаю?

frend> Угу :(
frend> Всё.
bash# ./amavisd.sh start
Starting amavisd.
bash#

frend> bash# ps -ax | grep ama
3 ?? Ss 0:04,57 amavisd (master) (perl)
4 ?? S 0:00,03 amavisd (virgin child) (perl)
5 ?? S 0:00,02 amavisd (virgin child) (perl)
6 ?? S 0:00,03 amavisd (virgin child) (perl)
7 ?? S 0:00,03 amavisd (virgin child) (perl)
8 ?? S 0:00,03 amavisd (virgin child) (perl)

greenh> ок
а теперь amavis.log в студию....

frend> Весь? :)
frend> Sep 7 17:49:31 sibproject.com /usr/local/sbin/amavisd[8]: starting.
/usr/local/sbin/amavisd at sibproject.com amavisd-new-2.1.1, Unicode aware,
LC_ALL=ru_RU.KOI8-R, LANG=ru_RU.KOI8-R
Sep 7 17:49:31 sibproject.com /usr/local/sbin/amavisd[8]: user=vscan,EUID:
(); group=, EGID: ( )
Sep 7 17:49:31 sibproject.com /usr/local/sbin/amavisd[8]: Perl version 5.05
Sep 7 17:49:32 sibproject.com /usr/local/sbin/amavisd[3]: Net::Server:
Process Backgrounded
Sep 7 17:49:32 sibproject.com /usr/local/sbin/amavisd[3]: Net::Server:
/09/07-17:49:32 Amavis (type Net::Server::PreForkSimple) starting! pid(3)
Sep 7 17:49:32 sibproject.com /usr/local/sbin/amavisd[3]: Net::Server:
Binding to UNIX socket file /var/amavis/amavisd.sock using SOCK_STREAM
Sep 7 17:49:32 sibproject.com /usr/local/sbin/amavisd[3]: Net::Server:
Binding to TCP port 4 on host 127.0.0.1
Sep 7 17:49:32 sibproject.com /usr/local/sbin/amavisd[3]: Net::Server:
Group Not Defined. Defaulting to EGID ' '
Sep 7 17:49:32 sibproject.com /usr/local/sbin/amavisd[3]: Net::Server:
User Not Defined. Defaulting to EUID ''
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: Module Amavis::Conf 2.031
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: Module Archive::T

greenh> да
он же пока небольшой должен быть

frend> 5К

greenh> это все?

frend> Нет.

greenh> меня интересуют последние строки
greenh> ~10

frend> Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: Found $file
at /usr/bin/file
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $arc, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $gzip, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $bzip2, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $lzop, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $lha, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $unarj, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $uncompress, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $unfreeze, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $unrar, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $zoo, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $cpio, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $rpm2cpio, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $cabextract, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]: No $dspam, not using it
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]:
Using internal av scanner code for (primary) ClamAV-clamd
Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]:
SpamControl: initializing Mail::SpamAssassin
Sep 7 17:49:51 sibproject.com /usr/local/sbin/amavisd[3]: SpamControl: done

greenh> отлично!!!!!!!!!!!
greenh> Sep 7 17:49:33 sibproject.com /usr/local/sbin/amavisd[3]:
Using internal av scanner code for (primary) ClamAV-clamd

greenh> теперь
greenh> идем в /usr/local/etc/postfix/main.cf

frend> угу

greenh> в конец пишем
content_filter = smtp-amavis:[127.0.0.1]:4

greenh> потом в master.cf
smtp-amavis unix - - n - 5 smtp
-o smtp_data_done_timeout=
-o disable_dns_lookups=yes

127.0.0.1:5 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes


greenh> я через 2 мин буду

frend> Вроде, работает.

greenh> постфикс переставил?

frend> Конечно.

greenh> вирусы ловит?

frend> Проверряю :)

greenh> кинуть что-рить?

frend> Там же есть в дистрибутиве :)
frend> Пока не надо.

greenh> что есть?

frend> Sep 7 18:02:40 sibproject.com /usr/local/sbin/amavisd[6]: (6-01) WARN:
all primary virus scanners failed, considering backups
Sep 7 18:02:40 sibproject.com /usr/local/sbin/amavisd[6]: (6-01)
TROUBLE in check_mail: virus_scan FAILED: virus_scan: ALL VIRUS SCANNERS
FAILED: ClamAV-clamd av-scanner FAILED: Too many retries to talk to
/var/run/clamav/clamd (Can't connect to UNIX socket /var/run/clamav/clamd:
No such file or directory) at (eval 51) line 243.

frend> Это из лога.

greenh> clamav запущен?

frend> В дистрибутиве amavisd-new есть каталог test-messages:
<sample-virus-simple.txt
$ sendmail -i your-address@example.com <sample-virus-nested.txt
$ sendmail -i your-address@example.com <sample-nonspam.txt
$ sendmail -i your-address@example.com <sample-spam-GTUBE-junk.txt
$ sendmail -i your-address@example.com <sample-spam-GTUBE-nojunk.txt
$ sendmail -i your-address@example.com <sample-spam.txt # old sample
$ sendmail -i your-address@example.com <sample-42-mail-bomb.txt

frend> bash# bash# ps -ax | grep clam
9 ?? Ss 0:00,01 /usr/local/sbin/clamd

greenh> посмотри, что clamav в логах пишет?
greenh> /var/run/clamav/clamd: папка есть?
greenh> ау

frend> ага.

greenh> а что в логах пишут?

frend> Tue Sep 7 18:07:15 -> Log file size limited to bytes.
Tue Sep 7 18:07:15 -> Reading databases from /usr/local/share/clamav
Tue Sep 7 18:07:21 -> Protecting against 8 viruses.
Tue Sep 7 18:07:23 -> ERROR: Socket file /tmp/clamd is in use by
another process.
Tue Sep 7 18:07:24 -> No stats for Database check - forcing reload
Tue Sep 7 18:07:28 -> Reading databases from /usr/local/share/clamav
Tue Sep 7 18:07:33 -> Database correctly reloaded (8 viruses)

greenh> А ЧТО В ПАПКЕ /var/run/clamav/clamd

frend> А ничего. :(

greenh> ЯСНО

frend> И мне ясно :)

greenh> в clamav.conf должно быть такое
PidFile /var/run/clamav/clamd.pid
есть?

frend> Нету.

greenh> вообще про PidFile ничего не сказано?

frend> В логе?

greenh> в rjyat
greenh> в конфе

frend> PidFile /var/run/clamav/clamd.pid
frend> LocalSocket /var/run/clamav/clamd

greenh> а их там нету?

frend> неа
frend> Похоже, что-то с правами доступа.

greenh> а проверь права
greenh> :)

frend> Угу. Всё есть. И сокет и pid

greenh> отлично
перезапускай постфикси пробуй :)

frend> Gkj[j ^(

greenh> что такое?

frend> Fuf/
frend> Ага. :)

greenh> ???
greenh> ну?

frend> Ща
frend> Ловит :)

greenh> отлично
что и требовалось доказать
шлифовку уже сам, а то я еще не разбирался

frend> Угу. Спасибо! Пока!

greenh> пока

Обновлено: 13.03.2015