вторник, 7 декабря 2010 г.

Создание локального сервера обновлений антивируса Comodo

UPD: доступна новая версия скрипта.

Небольшая фирма использует в своей работе исключительно лицензионные программы. По возможности бесплатные. Поскольку в качестве ОС на рабочих машинах используется Windows, пришлось искать антивирус. Выбор был остановлен на Comodo Internet Secutity, поскольку допускает использование бесплатной версии даже на предприятиях, о чем прямо сказано в EULA:
2.1. Comodo Security Software. Comodo Internet Security (CIS) may be used royalty-free for both commercial and personal use. CIS includes the Comodo Firewall and Antivirus products. No technical or customer support is provided for CIS separate from the Products described in section 2.5. Installation of CIS may include installation of additional Products. Use of these Products may be disabled until you pay for the Products.

Использование бесплатной версии имеет несколько минусов - отсутствие централизованного развертывания/управления/обновления. Каждый экземпляр антивируса выкачивает обновления самостоятельно. Было решено создать локальное зеркало обновлений антивируса.

Схема очень простая - антивирус выкачивает определенный текстовый файл, в котором указаны номер последней базы и номер последнего обновления. Обновления (updates) - это маленькие файлы, их приходит штук по пять-шесть в день, база (base) - это куммулятивное обновление, содержащее в себе все существующие на данный момент updates. Размер более 100mb.

На существующем шлюзе/прокси с Linux был установлен web-сервер. Можно ставить самый простой сервер. Например у Comodo используется nginx, я же использовал уже имеющийся apache (для решения данной задачи apache конечно же избыточен).

В DocumentRoot нашего нового web-сервера нужно создать следующую структуру каталогов (у меня DocumentRoot /var/www/comodo):
/var/www/comodo/
/var/www/comodo/av
/var/www/comodo/av/updates50
/var/www/comodo/av/updates50/sigs
/var/www/comodo/av/updates50/sigs/bases
/var/www/comodo/av/updates50/sigs/updates

Кстати, это дерево можно создать одной командой:
# mkdir -p /var/www/comodo/av/updates50/sigs/{bases,updates}

Клиентские машины можно настроить вручную, указав в параметрах обновления новый сервер (убрав галочку с сервера по-умолчанию). Можно через реестр (сервера обновлений хранятся в мультистроковом параметре (REG_MULTI_SZ) UpdateURLS в ветке HKEY_LOCAL_MACHINE\SYSTEM\Software\COMODO\Firewall Pro\Options). Например вручную настроить одну машину, сделать экспорт этой ветки реестра и скриптом (или вручную) импортировать полученный .reg на других машинах. Ну а с доменом и групповыми политиками возможности админа ограничены только его фантазией :)

В кроне ежедневно (но можно и чаще) выполняется следующий скрипт:
#!/bin/bash

COMODO=/var/www/comodo

if [ -f $COMODO/av/updates50/versioninfo.ini ]; then
    cp -f $COMODO/av/updates50/versioninfo.ini{,.1}
fi

cd $COMODO/av/updates50/
wget -q http://downloads.comodo.com/av/updates50/versioninfo.ini
BASE=$(grep MaxBase $COMODO/av/updates50/versioninfo.ini| cut -f2 -d"=")

if [ ! -e $COMODO/av/updates50/sigs/bases/BASE_END_USER_v$BASE.cav ]; then
    cd $COMODO/av/updates50/sigs/bases
    wget -q http://download.comodo.com/av/updates50/sigs/bases/BASE_END_USER_v$BASE.cav && echo "Получена база N$BASE"
fi

let OLD_UPDATE=$(grep MaxAvail $COMODO/av/updates50/versioninfo.ini.1| cut -f2 -d"=")+1

if [ $BASE -gt $OLD_UPDATE ]; then
    let OLD_UPDATE=$BASE+1
fi

NEW_UPDATE=$(grep MaxAvail $COMODO/av/updates50/versioninfo.ini| cut -f2 -d"=")
cd $COMODO/av/updates50/sigs/updates
for i in $(seq $OLD_UPDATE $NEW_UPDATE); do
    wget -q http://downloads.comodo.com/av/updates50/sigs/updates/BASE_UPD_END_USER_v$i.cav && echo "Полученно обновление N$i"
done

Скрипт будет обновляться и дорабатываться, но в данный момент он работает несколько дней, ошибок пока не замечено, антивирусы обновляются с него, как с родного.

9 комментариев:

  1. То, что давно искал!!
    Благодарен за подробное описание. Буду пробовать на днях..

    ОтветитьУдалить
  2. Если возникнут вопросы, буду рад помочь. В логах видно, что клиентские антивирусы пытаются скачать еще несколько файлов. А точнее - рекламный блок в виде xml-файла и картинки к нему. В xml-файле прописано, что этот блок будет демонстрироваться до февраля 2011, поэтому я его выкачал вручную и положил по нужному пути.

    Если реклама будет часто меняться - допишу и про неё.

    ОтветитьУдалить
  3. Всё заработало. Замечен один косяк в логике, но, т.к. я практически ничего не понимаю в скриптах и линуху только начал осваивать - ничего предпринимать не стал. Суть в следующем: в процессе первой закачки что-то глюкнуло и не скачались первые 20 (цифра не точная) обновлений. Долго втыкал, почему клиент всасывает базу и сразу после этого вылетает по ошибке.. Разобрался. Скопировал скрипт, выкинул проверку всех условий и докачал нехватающие апдейты.
    Кстати, вопрос по клиентской части, для специалистов: замечено, что после нескольких неудачных подключений к локальному серверу клиент самовольно меняет поле сервера и начинает долбиться на официальный. Почему так?

    ОтветитьУдалить
  4. Спасибо за пост - настроил - вроде апдейтится. А не подскажешь - что конкретно в клиенте прописать - какой путь? у меня пишет что невозможно обновить - проверьте подключение - хотя через браузер до versioninfo.ini спокойно можно достучаться. например у меня файл лежит по пути -
    http://192.168.1.3/comodo/av/updates53/versioninfo.ini
    на клиенте я прописываю сервер обновления как
    http://192.168.1.3/comodo/
    а обновления не находит(( Подскажи ?

    ОтветитьУдалить
  5. Возможно антивирусу требуется именно корневой каталог. Надо смотреть логи веб-сервера. Я имею в виду, возможно антивирус сразу после доменного имени (ip-адреса) ищет каталог av?...

    Сегодня сделаю еще одну версию, с небольшими исправлениями.

    ОтветитьУдалить
  6. Фишку просек. ВО первых под убунто-сервером юзается Dash в котором нет команды let и соответственно ошибки в операторе if - => пытается получать обновления все начиная с 1. Если запускать как bash upd.sh - то все работает. В общем вроде разобрался и апдейты катятся. Еще раз спасибо за статью :)

    ОтветитьУдалить
  7. а что делать с cis 6.5

    ОтветитьУдалить
    Ответы
    1. Давно уже не пересекался с Comodo, к сожалению, и даже не представляю, что там сейчас. Суть этих моих костылей в предварительном выкачивании всего, что захочет выкачать антивирус. Можно один экземпляр пускать через прозрачный прокси и смотреть в логах, что нужно выкачать для всех остальных, например

      Удалить
    2. так и делаю но все равно хочет что то новое.

      Удалить