<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>we are sorry, we are open &#187; антивирус</title>
	<atom:link href="http://test.kg/tag/antivirus/feed/" rel="self" type="application/rss+xml" />
	<link>http://test.kg</link>
	<description></description>
	<lastBuildDate>Tue, 01 Nov 2011 12:49:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Установка и настройка антивируса DrWeb для sendmail под FreeBSD4.5.</title>
		<link>http://test.kg/drweb-sendmail/</link>
		<comments>http://test.kg/drweb-sendmail/#comments</comments>
		<pubDate>Thu, 30 May 2002 11:18:24 +0000</pubDate>
		<dc:creator>Админ</dc:creator>
				<category><![CDATA[СисАдминство]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[антивирус]]></category>

		<guid isPermaLink="false">http://zed.web.kg/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%b0%d0%bd%d1%82%d0%b8%d0%b2%d0%b8%d1%80%d1%83%d1%81%d0%b0-drweb-%d0%b4%d0%bb/</guid>
		<description><![CDATA[&#171;Поставлю-ка DrWeb под FreeBSD4.5 и sendmail&#187; &#8211; подумал я, и вот результат. Особенно мне понравилось, что демо-версия вполне пригодна для использования &#8211; она не может только лечить заражённые файлы, смотреть почтовые базы и заглядывать в архивы, а мне этого особо и не надо Скачиваем с сайта www.drweb.ru дистрибутив антивируса. Дистрибутивы версии, которую использовал я, можете [...]]]></description>
			<content:encoded><![CDATA[<p>&laquo;Поставлю-ка DrWeb под FreeBSD4.5 и sendmail&raquo; &#8211; подумал я, и вот результат. Особенно мне понравилось, что демо-версия вполне пригодна для использования &#8211; она не может только лечить заражённые файлы, смотреть почтовые базы и заглядывать в архивы, а мне этого особо и не надо <img src='http://test.kg/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
<span id="more-49"></span></p>
<p>Скачиваем с сайта <a href="http://www.drweb.ru">www.drweb.ru</a> дистрибутив антивируса.<br />
Дистрибутивы версии, которую использовал я, можете скачать из моего архива:<br />
<a href="http://diesel.elcat.kg/pub/unix/freebsd/drweb/drweb-4.28.1-freebsd4.tgz">drweb-4.28.1-freebsd4.tgz</a> (1,4Мб)<br />
а также фильтр drweb-smf для сендмейла:<br />
<a href="http://diesel.elcat.kg/pub/unix/freebsd/drweb/drweb-sendmail-4.28.3-freebsd4.tgz">drweb-sendmail-4.28.3-freebsd4.tgz</a> (200Кб)</p>
<p>Схема проверки почты достаточно проста и понятна. Если объяснять своими (моими <img src='http://test.kg/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  словами, то получается примерно так &#8211; сендмейл, получив сообщение, передаёт его фильтру drweb-smf, который, обращаясь к демону<br />
drwebd, проверяет сообщение, если демон не находит в нём вирус, то сообщение попадает к адресату, если же в сообщении найден вирус, то фильтр, в зависимости от настроек, помещает в карантин и рассылает уведомления отправителю, получателю и администратору.</p>
<h4>Установка и настройка сканера и демона DrWeb</h4>
<p align="justify">Во-первых хочу отметить, что для всего есть очень даже приличные описания как на английском, так и на русском языках. Так что особых проблем у меня не возникло.</p>
<p align="justify">Распаковываем файл drweb-4.28.1-freebsd4.tgz и видим дерево каталогов:<br />
etc<br />
opt<br />
usr<br />
var</p>
<p align="justify">Раскладываем всё куда положено, и получается вот что:<br />
/etc/drweb &#8211; конфиги демона и фильтра;<br />
/usr/local/drweb &#8211; бинарники и дока;<br />
/usr/local/etc/rc.d &#8211; скрипт запуска демона drwebd;<br />
/var/drweb &#8211; временные файлы, спул, сокеты.</p>
<p align="justify">Правим в файле /etc/drweb/drweb32.ini некоторые ключики, связанные с путями размещения компонентов антивируса:</p>
<pre>
[BSD]
EnginePath = "/usr/local/drweb/lib/drweb32.dll"
Key = "/usr/local/drweb/drweb.key"
UpdatePath = "/var/drweb/bases"
[BSD:Daemon]
EnginePath = "/usr/local/drweb/lib/drweb32.dll"
Key = "/usr/local/drweb/drwebd.key"
UpdatePath = "/var/drweb/bases"
</pre>
<p align="justify">Демон может взаимодействовать с фильтром через TCP/IP соединение, например, если демон и фильтр работают на разных машинах. В случае же если и демон и фильтр установлены на одном копьютере, то им лучше взаимодействовать через локальный UNIX-сокет (зачем нам лишний открытый порт). Для этого нам нужно<br />
внести несколько исправлений в конфиг /etc/drweb/drweb32.ini в раздел демона:</p>
<pre>
[BSD:Daemon]
;SocketMode = TCP (закомментировали)
;DaemonPort = 3000 (закомментировали)
SocketFile = "/var/drweb/run/drwebd.socket"
SocketMode = Unix
SocketAccess 0666
</pre>
<p align="justify">Также хотелось бы, чтобы демон работал не от имени рута, а от имени пользователя drweb, для чего, в том же /etc/drweb/drweb32.ini исправляем ключик:</p>
<pre>
User = drweb
</pre>
<p align="justify">Ну и, конечно же, должен быть создан указанный пользователь, лучше в поле пароля задать ему &laquo;*&raquo;, чтобы никто не смог использовать этот логин для других целей, также папка /var/drweb должна принадлежать этому пользователю.</p>
<p align="justify">Теперь попробуем обновить антивирусные базы. Для этого есть скрипт /usr/local/drweb/update/update.pl. Почему он у меня сразу работать не захотел, ругался вот так:</p>
<pre>
mv: rename /tmp/drw42805.vdb0.957098969258368 to
 /var/drweb/bases/*.vdb,/var/drweb/bases/drw42805.vdb: No such file or directory
</pre>
<p align="justify">Оказалось, что неверно описаны пути к базам, исправил:</p>
<pre>
# grep update /etc/drweb/*
drweb32.ini:UpdatePath = "/var/drweb/updates"
drweb32.ini:UpdatePath = "/var/drweb/updates"
</pre>
<p align="justify">Создал указанную папку. После этого обновление работает без ошибок.</p>
<p align="justify">Для проверки можем запустить сканер (/usr/local/drweb/drweb), если всё нормально, то он должен сказать что-то типа этого:</p>
<pre>
Key file: /usr/local/drweb/drweb.key
Registration info:
0100003942
Evaluation Key (ID Anti-Virus Lab. Ltd, St.Petersburg)
This is an EVALUATION version with limited functionality!
To get your registration key, call regional dealer.
Loading /var/drweb/bases/drwtoday.vdb - Ok, virus records: 117
Loading /var/drweb/bases/drw42804.vdb - Ok, virus records: 123
Loading /var/drweb/bases/drw42803.vdb - Ok, virus records: 73
Loading /var/drweb/bases/drw42802.vdb - Ok, virus records: 143
Loading /var/drweb/bases/drw42801.vdb - Ok, virus records: 76
Loading /var/drweb/bases/drwebase.vdb - Ok, virus records: 29405
</pre>
<p align="justify">Отлично! Попробуем подсунуть сканеру какой-нибудь вирус. Для этого лучше использовать специальный тестовый якобы_вирус <img src='http://test.kg/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Почитайте описание этого тестового вируса в файле /usr/local/drweb/doc/readme.eicar</p>
<p>Скопируйте оттуда строку:</p>
<pre>
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
</pre>
<p>в отдельный файл, например, test.com. Этот файл и будем проверять сканером:</p>
<pre>/usr/local/drweb/drweb test.com</pre>
<p align="justify">В отчёте сканера должна быть строчка:</p>
<pre>
...
/usr/local/drweb/test.com infected with EICAR Test File (NOT a Virus!)
...</pre>
<p align="justify">Ура! Сканер работает и находит вирусы.</p>
<p align="justify">Если я не ошибаюсь, сканер в проверке почты никак не участвует. Нас больше интересует демон drwebd. Запускаем его:</p>
<pre>
/usr/local/etc/rc.d/drwebd.sh start
</pre>
<p align="justify">Если демон нормально запустился, то в папке /usr/var/drweb/run должен быть создан сокет (специальный файл) drwebd.socket, а также отчитаться в логи:</p>
<pre>
...
Daemon is installed, UNIX socket created in file /var/drweb/run/drwebd.socket
</pre>
<p align="justify">Метод вывода логов задаётся в конфиге /etc/drweb/drweb32.ini. По-умолчанию, логи передаюся syslog-демону с типом Daemon:</p>
<pre>
SyslogFacility = "Daemon"
</pre>
<p align="justify">В документации сказано, что проверить работу демона можно с помощью клиента drwebc, который прилагается в дистрибутиве. Но, судя по всему, это не относится к данному дистрибутиву, т.к. такой программы я не нашёл. Есть правда программа /usr/local/drweb/clients/demo/drwebdc-demo, но разобраться с ней оказалось сложнее чем настроить непосредственно фильтр drweb-smf.</p>
<h4>Установка и настройка фильтра drweb-smf</h4>
<p align="justify">Распаковываем файл drweb-sendmail-4.28.3-freebsd4.tgz, видим две папки etc и opt. Делаем то же, что и для сканера и демона, т.е. перекладываем etc/drweb в /etc/drweb, а opt/drweb /usr/local/drweb.</p>
<p align="justify">Поправляем конфиг фильтра /etc/drweb/drweb_smf.conf (описание на русском языке прилагается в дистрибутиве):</p>
<pre>
[DaemonCommunication]
Address = local:/var/drweb/run/drwebd.socket

[SendmailCommunication]
Address = local:/var/drweb/run/drweb-smf.sock

[Actions]
ScanningErrors = tempfail
ProcessingErrors = tempfail

[NotificationOptions]
NotifyHashSalt = !!!Chtob_nikto_ne_dogodalsya!!!

[VirusNotifications]
SenderNotify = no
</pre>
<p align="justify">Обязательно нужно исправить первые два ключа Address. Последний ключ я выставляю в no, т.к. не считаю нужным отсылать уведомление о вирусе отправителю, т.к. мне кажется, что чаще всего обратный адрес указан фальсифицированный и лишняя нагрузка на почтовый сервер будет напрасной.</p>
<p align="justify">Также по умолчанию параметр ScanningErrors установлен в reject &#8211; в случае ошибок сканирования отвергать все сообщения, т.е. сообщения вернутся с ошибкой, мне кажется лучше поставить значение tempfail &#8211; временная недоступность, почтовая система будет пытаться отправить сообщение позже. Примерно то же самое относится в параметру ProcessingErrors.</p>
<p align="justify">Интересная, и неожиданная для меня, возможность задания списка исключений для фильтра (/etc/drweb/users.conf), т.е. вы можете указать для каких адресов проверять сообщения, а для каких не проверять. Пример файла<br />
/etc/drweb/users.conf:</p>
<pre>
[version=2]
# не проверять входящую почту для этих адресов:
deny     to   subst     malik@mydomain.kg
deny     to   subst     igor@mydomain.kg
# для остальных проверять входящую почту:
allow    to   regex     .*
</pre>
<p align="justify">В данном случае получается, что фильтр должен проверять почту только для пользователей igor@myhost.kg и malik@myhost.kg, а почту для остальных адресов домена не проверять.</p>
<p align="justify">Об угловых скобках. В примерах из поставки адреса указаны без угловых скобок, но у меня точное соответствие (exact) без них никак не получалось. А вот с угловыми скобками всё отлично работает, но всё равно надёжнее указывать не точное соответствие exact, а поиск подстроки subst.</p>
<p align="justify"><b>ВАЖНО!!!</b> Однажды очень долго боролся с этими списками, пока не задал вопрос на форуме производителя DrWeb-а (спасибо Sergey Akhapkin). Короче говоря, при использовании этих списков необходимо проверить значение параметра DenyMode в конфиге почтового фильтра (drweb_smf.conf) и выставить подходящее значение.</p>
<p align="justify">В конце концов, запускаем фильтр (демон должен быть уже запущен) и проверяем наличие в процессах демона и фильтра:<br />
ps xa|grep drweb</p>
<h4>Перекомпиляция сендмейла с поддержкой milter-а</h4>
<p align="justify">Для работы drweb-фильтра необходим сендмейл, скомпилированный с поддержкой milter-а. К сожалению, сендмейл на моей машине оказался без оной. Ну раз уж нужно перекомпилировать сендмейл скачаю последнюю версию: sendmail.8.12.3.tar.gz (1,8Мб)</p>
<p align="justify">Компилирую и устанавливаю сендмейл с поддержкой milter-а (все пути даются относительно папки с дисрибутивом):<br />
- дописываю в файл devtools/Site/site.config.m4 (если такого файла нет, то<br />
 создаём):</p>
<pre> APPENDDEF(`conf_sendmail_ENVDEF', `-DMILTER')</pre>
<p>- в папке libmilter говорим</p>
<pre>
 Build
 Build install</pre>
<p>- в папке дистрибутива sendmail запускаю:</p>
<pre>
 Build -c
 Build install</pre>
<p align="justify">Готово &#8211; скомпилировали и установили. Про стандартную настройку сендмейла не говорю, это должен знать каждый (кто взялся за установку антивируса <img src='http://test.kg/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <br />
В моём случае, предыдущая версия сендмейла не отличалась от новой по настройкам, поэтому ничего менять не пришлось.<br />
Запускаю и проверяю работоспособность моей почтовой системы &#8211; 25-й порт слушает, почту получает/отправляет, логи пишет &#8211; красота <img src='http://test.kg/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h4>Правим sendmail.cf</h4>
<p align="justify">Чтобы сообщения передавалиь фильтру drweb-smf нужно внести некоторые изменения в конфиг сендсейла. Считается, что правильнее внесить изменения в sendmail.cf при помощи m4, но в данном случае мне этот метод показался слишком громоздким и длинным (да простят меня знатоки сенмейла <img src='http://test.kg/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Я просто, как описано в документации к фильтру, добавил несколько строк в существующий sendmail.cf:</p>
<pre>
# Input mail filters
O InputMailFilters=drweb-filter

O Milter.LogLevel=6
O Milter.macros.envfrom=i

Xdrweb-filter,  S=local:/var/drweb/run/drweb-smf.sock, F=T,T=S:5m;R:5m;E:1h
</pre>
<p align="justify">Говорим сендмейлу о необходимости перечитать свой конфиг:</p>
<pre>kill -HUP `head -1 /var/run/sendmail.pid`</pre>
<p align="justify">Смотрим логи сендмейла /var/log/maillog и, если всё нормально, пробуем послать сообщение с вложенным тестовым вирусом. Если возникают какие-либо проблемы &#8211; внимательно читайте логи. Можно увеличить уровень логирования в sendmail.cf:</p>
<pre>
O Milter.LogLevel=14</pre>
<p align="justify">А также изменить в конфиге фильтра /etc/drweb/drweb_smf.conf значение параметра в секции [Logging]:</p>
<pre>Level = Verbose</pre>
<h4>Запуск</h4>
<p align="justify">Теперь необходимо запускать демон и фильтр при загрузке системы.<br />
Правильнее для этого поместить скрипт в папку /usr/local/etc/rc.d При этом скрипт обязательно должен понимать ключи start и stop, и иметь расширение &#8216;sh&#8217;.<br />
<br />Учтите также, что если работа завершилась неправильно (например, комьютер перезагрузился из-за скачка напряжения), то сохранившийся сокет фильтра (/var/drweb/run/drweb-smf.sock) не позволит ему запуститься в следующий раз.<br />
<br />У меня получился вот такой скрипт:</p>
<pre>
#!/bin/sh

RETVAL=0
case "$1" in
    start)
        echo -n "Starting Dr. Web daemon..."
        /usr/local/drweb/drwebd
        rm /var/drweb/run/drweb-smf.sock
        /usr/local/drweb/drweb-smf
    ;;
    stop)
        echo -n "Shutting down Dr. Web daemon..."
        kill -TERM `cat /var/drweb/run/drwebd.pid | head -1`
        killall -TERM drweb-smf
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    RETVAL=1
esac
exit $RETVAL
</pre>
<p align="justify">Для полного счастья осталось только регулярно запускать скрипт обновления, например, из папок /etc/periodic/daily или /etc/periodic/weekly</p>
<p align="justify">Ну вот вроде и всё.</p>
<p align="justify">Май 2002.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://test.kg/drweb-sendmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

