Средство «Зеркало» для Linux
Средство «Зеркало» необходимо для автономного обновления модулей обнаружения вирусов. Если у клиентских компьютеров нет подключения к Интернету и при этом им нужны обновления модулей обнаружения вирусов, вы можете использовать средство «Зеркало» для загрузки файлов обновления с серверов обновления ESET и их локального хранения.
Средство «Зеркало» загружает обновления модуля обнаружения и другие модули программ и не загружает обновления компонентов программы и данные ESET LiveGrid®. Оно также может создать полностью автономный репозиторий. Или же можно обновлять продукты по отдельности.
Необходимые условия
• Целевая папка должна быть доступна для совместного использования, Samba/Windows или службы HTTP/FTP в зависимости от нужного способа получения доступа к обновлениям.
• У вас должен быть доступный автономный файл лицензии , содержащий имя пользователя и пароль. При создании файла лицензии обязательно установите флажок рядом с параметром Добавление имени пользователя и пароля . Кроме того, нужно указать имя файла лицензии. Автономный файл лицензии необходим для активации средства «Зеркало» и создания зеркала обновления.
Использование средства «Зеркало»
1. Скачайте средство «Зеркало» со страницы загрузки ESET (раздел Автономные установщики ).
2. Распакуйте загруженный архив.
3. Откройте терминал в папке, где находится файл MirrorTool .
4. Запустите следующую команду, чтобы просмотреть все доступные параметры средства «Зеркало»:
Используя его, нужно указывать полный URL-адрес сервера обновлений.
Нужно указать путь к автономному файлу лицензии (как указано выше).
Вы можете указать коды языков. Например, для французского языка введите код fr_FR . Коды других языков приведены в таблице ниже. Чтобы выбрать несколько языков, введите их через пробел, например: en_US zh_TW de_DE
Можно указать строку, которую средство «Зеркало» будет использовать в качестве фильтра загрузок. Средство «Зеркало» загружает только те файлы, обычное имя которых содержит указанную строку. Вы можете выбрать несколько продуктов, добавив другие аргументы, например: —productFilterForRepository Antivirus Security
Средство «Зеркало» загрузит все выбранные языки для каждого выбранного продукта.
Аргументы указывать не нужно. Используйте этот параметр, чтобы загружать также устаревшие пакеты. Если его не использовать, загрузка устаревших пакетов производиться не будет. Узнать, какие продукты считаются устаревшими, можно в меню Установка программного обеспечения > Клиентская задача, Настройки > Пакет для установки > Выбрать пакет > Устаревшие .
Новые параметры в средстве «Зеркало», распространяемом с версией ESMC 7.2 и ESET PROTECT
Аргументы указывать не нужно. Если этот параметр установлен, будут загружаться только обновления уровней (нанообновления загружаться не будут). Дополнительные сведения о типах обновлений см. в статье базы знаний .
Этот параметр предназначен только для опытных пользователей!
Прежде чем использовать параметр —mirrorFileFormat, убедитесь, что в вашей среде нет более старых (6.5 и более ранних) и более новых (6.6 и более поздних) версий продукта по обеспечению безопасности ESET. Неправильное использование этого параметра может привести к неправильным обновлениям продуктов по обеспечению безопасности ESET.
Можно указать, какие файлы обновлений будут загружаться. Возможные значения (с учетом регистра):
• dat — используйте это значение, если в вашей среде имеются только продукты по обеспечению безопасности ESET версии 6.5 и более ранних.
• dll — используйте это значение, если в вашей среде имеются только продукты по обеспечению безопасности ESET версии 6.6 и более поздних.
Этот параметр игнорируется при создании зеркала для устаревших продуктов ( ep4 , ep5 ).
Все фильтры нужно указывать с учетом регистра.
Зеркало сервера обновлений ESET на Linux
Каждый из вас, кому приходится держать корпоративный linux-сервер может сталкивается с тем, что у замечального антивируса ESET нет сервера обновлений под linux, виртуалку windows с ESET Remote Administrator Server под такое поднимать, конечно, нет желания, а это значит настала пора его написать самим. Тема не претендует на новшество, этот вопрос достаточно рассмотрен в интернете, однако, мне не попадалось хороших решений, давайте же доведем скрипт до ума. Наш скрипт должен уметь находить новые пароли к официальным серверам на просторах интернетов и поддерживать базы для всей линейки продуктов, таких как Smart Security, Business Edition, Home Edition, Exchange Server.
Оставим легитимность данных действий на вашей совести, статья дается для ознакомления с особенностями обновления баз антивируса, и не является руководством к нарушению законности. Во избежание нарушений вы должны пользоваться только Evaluation License от ESET.
Итак, неонка внутре:
0. Место действия
Представим, что у нас есть домашний каталог /var/www/site.ru/web, который является DocumentRoot для вашего виртуалхоста. Подразумеваем, что мы все файлы кладем туда, если не сказано иного. Поэтому, если мы хотим запускать скрипт через cron, в начале нашего основного скрипта мы должны поставить следующие действия.
CURDIR=/var/www/site.ru/web
cd $CURDIR
1. Где брать аккаунты лицензий?
На глаза попалось мне несколькомегабайтное творение под примерным названием «Eset Password Finder», не помню точно. Трудно встретить куда более эффективный способ распространить malware безантивирусным юзерам. Бегло просмотрев exe-шник hex-вьюером, в символах была обнаружена ссылка на китайский сайт http://www.nnvv.org, где ежедневно, выкладываются свежие пароли. Напишем простой парсер, который на выходе выдает пару переменных в формате bash:
USERNAME=EAV-xxx
PASSWORD=xxx
Не будем придумывать велосипед и плодить сущности, возьмем готовый фреймворк PHP simplehtmldom для обхода дерева DOM. Благодаря ему у нас скрипт примет следующий вид:
./getpass.php:
#!/usr/bin/php
require(‘simple_html_dom.php’); // положите файл фреймворка в наш каталог
$html = file_get_html(‘http://www.nnvv.org/’);
$a=$html->getElementById(«#nod32ids»)->children(0)->children(0)->plaintext;
$a = str_replace(«Username:», ‘USERNAME=’, $a);
$a = str_replace(«Password:», ‘PASSWORD=’, $a);
echo $a.»\n»;
?>
сделаем его исполняемым chmod 755 ./getpass.php и на этом его так и оставим.
2. Создание необходимых директорий
mkdir -p ./download/engine3
mkdir -p ./download/engine3ess
mkdir -p ./eset_upd
mkdir -p ./download/win/emsx
mkdir -p ./download/win/v3eav
mkdir -p ./download/win/v3ess
mkdir -p ./download/win/v3eav/pre
mkdir -p ./download/win/v3ess/pre
Структура полностью повторяет иерархию каталогов на официальных серверах.
3. Получение информации об обновлениях
Данные о текущих базах хранится в файле http://update.eset.com/eset_upd/update.ver и запакован он старым бесплатным архиватором unrar-0.0.1, который, впрочем, несовместим с Рошалевским. Скачайте unrar-0.0.1, скомпилируйте, после компиляции положите бинарник unrar к нам в каталог нашего места действия. После распаковки update.ver можно распарсить, сгенерировав списки URL файлов обновлений.
wget -q —timestamping http://update.eset.com/eset_upd/update.ver
mv -f update.ver update.rar
cd eset_upd
../unrar e -f -y -c- ../update.rar 2>&1 >/dev/null
cd ..
mv -f update.rar update.ver
grep file= $CURDIR/eset_upd/update.ver |grep «engine3/»| sed -e ‘s/file\=/http\:\/\/um10.eset.com/’ |grep -v data > downlist1.txt
grep file= $CURDIR/eset_upd/update.ver |grep engine3ess| sed -e ‘s/file\=/http\:\/\/um10.eset.com/’ |grep -v data > downlist2.txt
grep file= $CURDIR/eset_upd/update.ver |grep emsx| sed -e ‘s/file\=/http\:\/\/um10.eset.com/’ |grep -v data > downlist5.txt
grep file= $CURDIR/eset_upd/update.ver |grep v3eav|grep -v pre| sed -e ‘s/file\=/http\:\/\/um10.eset.com/’ |grep -v data > downlist3.txt
grep file= $CURDIR/eset_upd/update.ver |grep v3ess|grep -v pre| sed -e ‘s/file\=/http\:\/\/um10.eset.com/’ |grep -v data > downlist4.txt
grep file= $CURDIR/eset_upd/update.ver |grep v3eav|grep pre| sed -e ‘s/file\=/http\:\/\/um10.eset.com/’ |grep -v data > downlist6.txt
grep file= $CURDIR/eset_upd/update.ver |grep v3ess|grep pre| sed -e ‘s/file\=/http\:\/\/um10.eset.com/’ |grep -v data > downlist7.txt
4. Получаем обновления
Грабим свежие пароли с помощью PHP скрипта, который мы сделали ранее.
./getpass.php > ./pass.sh
sed -i ‘s/\r//’ pass.sh # убираем виндовый перенос строки после первой строчки, иначе wget с параметром —http-user=$USERNAME не может подключиться к серверу.
source ./pass.sh
Для получения баз используем wget с параметром —timestamping, что позволит нам не скачивать повторно уже ранее загруженные файлы. Для осторожности используем официальный —user-agent, для авторизации используется обычная пара —http-user/—http-password. Список файлов для wget можно передать параметром —input-file=.
wget —timestamping —http-user=$USERNAME —http-password=$PASSWORD —input-file=../../downlist1.txt —user-agent=»ESS Update (Windows; U; 32bit; VDB 7001; BPC 4.0.474.0; OS: 5.1.2600 SP 3.0 NT; CH 0.0; LNG 1049; x32c; UPD http://um10.eset.com; APP ess; BEO 1; CPU 5964; ASP 0.0)»
cd ../engine3ess/
wget —timestamping —http-user=$USERNAME —http-password=$PASSWORD —input-file=../../downlist2.txt —user-agent=»ESS Update (Windows; U; 32bit; VDB 7001; BPC 4.0.474.0; OS: 5.1.2600 SP 3.0 NT; CH 0.0; LNG 1049; x32c; UPD http://um10.eset.com; APP ess; BEO 1; CPU 5964; ASP 0.0)»
cd ../win/v3eav/
wget —timestamping —http-user=$USERNAME —http-password=$PASSWORD —input-file=../../../downlist3.txt —user-agent=»ESS Update (Windows; U; 32bit; VDB 7001; BPC 4.0.474.0; OS: 5.1.2600 SP 3.0 NT; CH 0.0; LNG 1049; x32c; UPD http://um10.eset.com; APP ess; BEO 1; CPU 5964; ASP 0.0)»
cd ../v3ess/
wget —timestamping —http-user=$USERNAME —http-password=$PASSWORD —input-file=../../../downlist4.txt —user-agent=»ESS Update (Windows; U; 32bit; VDB 7001; BPC 4.0.474.0; OS: 5.1.2600 SP 3.0 NT; CH 0.0; LNG 1049; x32c; UPD http://um10.eset.com; APP ess; BEO 1; CPU 5964; ASP 0.0)»
cd ../emsx/
wget —timestamping —http-user=$USERNAME —http-password=$PASSWORD —input-file=../../../downlist5.txt —user-agent=»ESS Update (Windows; U; 32bit; VDB 7001; BPC 4.0.474.0; OS: 5.1.2600 SP 3.0 NT; CH 0.0; LNG 1049; x32c; UPD http://um10.eset.com; APP ess; BEO 1; CPU 5964; ASP 0.0)»
cd ../v3eav/pre/
wget —timestamping —http-user=$USERNAME —http-password=$PASSWORD —input-file=../../../../downlist6.txt —user-agent=»ESS Update (Windows; U; 32bit; VDB 7001; BPC 4.0.474.0; OS: 5.1.2600 SP 3.0 NT; CH 0.0; LNG 1049; x32c; UPD http://um10.eset.com; APP ess; BEO 1; CPU 5964; ASP 0.0)»
cd ../../v3ess/pre/
wget —timestamping —http-user=$USERNAME —http-password=$PASSWORD —input-file=../../../../downlist7.txt —user-agent=»ESS Update (Windows; U; 32bit; VDB 7001; BPC 4.0.474.0; OS: 5.1.2600 SP 3.0 NT; CH 0.0; LNG 1049; x32c; UPD http://um10.eset.com; APP ess; BEO 1; CPU 5964; ASP 0.0)»
Это все. Не забываем полученный скрипт(назовем его nodupdate.sh, например) прописать в cron
# sudo crontab -e
50 * * * * /var/www/site.ru/web/nodupdate.sh 2> /dev/null
5. Настройка клиента
- Вызываем окно антивируса
- Нажимаем F5, появится окно настроек Advanced setup
- Update — Update server — Edit — Add
- Добавляем строчку http://site.ru если мы работали в DocumentRoot, то место обновления у нас как бы корень, то есть / а не /mirror/ или /update/, как встречается кое-где.
- жмем ОК.
- Для пущей важности очистить кеш обновлений — Clear update cache. Дело в том, что неочищенный кеш обновлений может стать причиной, по которой антивирус, порой, перестает обновляться.
6. Резюме
Полный текст скрипта вы можете найти на Pastebin.
Как оказалось, не требуется специальных утилит или особых знаний, чтобы сделать свое зеркало обновлений. Надо понимать, что цель данного поста — только ознакомление с особенностями работы системы обновлений продуктов ESET, а цель решения — только экономия корпоративного трафика, и ни в коем случае не способ нарушить закон. По идее, чтобы воспользоваться данным скриптом, у вас должны быть легально приобретенные лицензии на все обновляемые с зеркала экземпляры антивируса, это остается на вашей совести. Можно переписать код так, чтобы он искал только Evaluation License, пользоваться которыми, вроде, достаточно законно. Данным решением один знакомый пользуется уже три года, практически без изменений. Вес всех обновлений будет где-то 300 мегабайт, с учетом последующих докачек может вырасти до 700-900 метров. Раз в полгода можно удалять файлы баз, чтобы избавиться от устаревших файлов. Сам формат файла update.ver очень прост, разбит по секциям, оттуда можно узнать всю структуру каталогов на сервере, и после выхода новых продуктов ESET просто дописывать в скрипт эти пути.
UPD 2012.04.24: Небольшие изменения (спасибо zombicy).
Вместо getpass.php используем getpass.sh:
$ cat getpass.sh
Скрипт забирает username/password за сегодняшнее число.
В скрипте nodupdate.sh соответственно заменяем getpass.php на getpass.sh и комментируем строку
sed -i ‘s/\r//’ pass.sh,
в ней нет необходимости.