PfSense как сервер обновления ESET NOD32
-
Уважаемые знатоки, подскажите возможно ли организовать корпоративный сервер обновления Eset NOD32 на pfSense ?
-
Уважаемые знатоки, подскажите возможно ли организовать корпоративный сервер обновления Eset NOD32 на pfSense ?
Не пробовал, имхо можно
Вот вариант для
фри http://www.lissyara.su/articles/freebsd/security/nod32_mirror/для линукс http://thin.kiev.ua/index.php?option=com_content&view=article&id=408:354654654654&catid=39:linux&Itemid=63
-
У меня на Ubuntu 10.04 прекрасно работает.
Требования простые - вебсервер, скрипт по расписанию и права нужные на доступ.
Единственный подводный камень - оригинальный скрипт проверял размер загружаемых обновлений файлов на соответствие по файлу описания update.ver, и он не совпадал (писал в Eset, но мне по этому вопросу так и не ответили). Поэтому скрипт немного подправил.
Сам Nod у меня лицензионный, поэтому обновляюсь с официальных серверов. Все работает на порядок быстрее, чем через вебсервер самого Nod/ -
Был бы благодарен если бы скинул данный скрипт обновления нода
-
Вроде авторских прав на скрипт не было так что вот:
1. Скрипт обновления баз#!/bin/bash ## Путь к базам данных PATHN=/var/lib/nod32/mirror3 # Имя пользователя login_name="EAV-xxxxxxxxxxxx" # Пароль password="xxxxxxxxxxxxxxxxx" RAR=/usr/bin/unrar ## Адреса серверов обновлений (адреса дб без /nod_upd) URLN0=http://um10.eset.com URLN1=http://um12.eset.com #URLN2=http://89.202.157.227 URLN2=http://um14.eset.com #URLN3=http://62.67.184.68 URLN3=http://um16.eset.com set -x if [ -n "$login_name" ]; then url2="/eset_upd" else secret="" url2="" fi if [ $URLN = "http://update.eset.com" ]; then url2="/eset_eval" fi set +x cd $PATHN/arc rm -f update.ver # Получаем свежий update.ver URLNn=$URLN0 wget -c --http-user=$login_name --http-password=$password $URLNn$url2/update.ver if [ $? -eq 1 ]; then URLNn=$URLN1 wget -c --http-user=$login_name --http-password=$password $URLNn$url2/update.ver if [ $? -eq 1 ]; then URLNn=$URLN2 wget -c --http-user=$login_name --http-password=$password $URLNn$url2/update.ver else echo "Не могу получить update.ver" exit 1 fi fi if [ -n "$login_name" -o -n "url2" ]; then mv update.ver update.rar $RAR x -y update.rar code1=$? if [ $code1 -eq 1 ]; then cp update.rar update.ver fi rm update.rar fi cd $PATHN # Функция записи данных в файл update.ver func1 () { echo "[$1]" >> update.ver version=`echo "$2" | grep -a -m1 version= | cut -d "=" -f2| col` echo "version=$version" >> update.ver platform=`echo "$2" | grep -a -m1 platform= | cut -d "=" -f2| col` echo "platform=$platform" >> update.ver versionid=`echo "$2" | grep -a -m1 version= | cut -d "=" -f2| cut -d " " -f1 | col` if [ -z "$versionid" ]; then versionid=0 fi echo "versionid=$versionid" >> update.ver type=`echo "$2" | grep -a -m1 type= | cut -d "=" -f2| col` echo "type=$type" >> update.ver GROUP=`echo "$2" | grep -a -m1 group= | cut -d "=" -f2| col` echo "group=$GROUP" >> update.ver date1=`echo "$2" | grep -a -m1 "date=" | cut -d "=" -f2| col` echo "date=$date1" >> update.ver echo "file=$3" >> update.ver buildregname=`echo "$2" | grep -a -m1 buildregname= | cut -d "=" -f2|cut -d "\"" -f2| col` echo "buildregname=$buildregname" >> update.ver build=`echo "$2" | grep -a -m1 build= | cut -d "=" -f2| col` echo "build=$build" >> update.ver level=`echo "$2" | grep -a -m1 level= | cut -d "=" -f2| col` echo "level=$level" >> update.ver base=`echo "$2" | grep -a -m1 base= | cut -d "=" -f2| col` echo "base=$base" >> update.ver category=`echo "$2" | grep -a -m1 category= | cut -d "=" -f2| col` echo "size=$4" >> update.ver echo "category=$category" >> update.ver echo >> update.ver } fileok=`grep -m1 "ENGINE0" arc/update.ver | col` if [ $fileok == "[ENGINE0]" ]; then upd_new=`cat arc/update.ver | col` rm update.ver # Находим перечень проверяемых файлов nodfiles=`ls -1 *.nup` # Для каждого файла делаем проверку for row in $nodfiles; do text=`head -17 $row` # Название секции section=`echo "$text" | grep -a -m1 name= | cut -d "=" -f2| col` # Название билда build_old=`echo "$text" | grep -a -m1 build= | cut -d "=" -f2| col` # Выделяем секцию в 14 строк с началом названия секции text_new=`echo "$upd_new"| grep -A14 "\[$section\]"` # Находим его номер build_new=`echo "$text_new" |grep build= | cut -d "=" -f2 ` # Находим путь до файла path_new=`echo "$text_new" |grep file= | cut -d "=" -f2 ` # Находим название файла files_new=`basename "$path_new"` # Находим размер файла на диске size_old=`ls -l $row | awk '{print $5}'` # Находим размер файла из update.ver size_new=`echo "$text_new" |grep size= | cut -d "=" -f2 ` # Если секция ENGENE2, то запоминаем номер версии if [ $section = ENGINE2 ]; then version_old=`echo "$text" | grep version= | cut -d "=" -f2` version_new=`echo "$text_new" |grep version= | cut -d "=" -f2 ` fi # Если этот файл есть в update.ver if [ -n "$build_new" ]; then # Если номер билда не совпадает if [ $build_old -lt $build_new ]; then echo " Номер билда $build_old и $build_new не совпадает" echo "Удаляем старый $row и загружаем $files_new" rm -f $row wget -c --http-user=$login_name --http-password=$password $URLNn/$path_new if [ $? -eq 1 ]; then echo "Ошибка загрузки файла $files_new" exit 1 fi text=`head -14 $files_new` row=$files_new # Если билды равны elif [ $build_old -eq $build_new ]; then # Проверяем если размер файлов совпадает if [ $size_old -eq $size_new ]; then # Проверяем если названия файлов не совпадают if [ $files_new != $row ]; then echo "Переименовываем $row в $files_new" mv $row $files_new row=$files_new fi else echo "Размеры файлов $files_new и $row не совпадают" echo "Удаляем старый $row и загружаем $files_new" rm -f $row wget -c --http-user=$login_name --http-password=$password $URLNn/$path_new if [ $? -eq 1 ]; then echo "Ошибка загрузки файла $files_new" exit 1 fi # Определяем размер полученого файла size_wget=`ls -l $files_new | awk '{print $5}'` text=`head -14 $files_new` row=$files_new # Сравниваем его с размером из update.ver # if [ $size_wget -ne $size_new ]; then # echo "Размер файла $row не совпадает с данными из update.ver" # exit 1 # fi fi # Если новый билд меньше старого elif [ $build_old -gt $build_new ]; then # Проверяем если названия файлов не совпадают if [ $files_new != $row ]; then echo "Переименовываем $row в $files_new" mv $row $files_new row=$files_new fi fi # Определяем размер файла на диске size=`ls -l $row | awk '{print $5}'` # Записываем данные о файле в файл update.ver if [ -n "`grep $section arc/name_section1`" ]; then func1 $section "$text" $row $size fi else # Если файл есть, но его нет в полученом update.ver, # то проверяем нужен ли он и если нужен, то добавляем в update.ver size=`ls -l $row | awk '{print $5}'` if [ -z "`grep $section arc/name_section3`" ]; then if [ -n "`grep $section arc/name_section1`" ]; then func1 $section "$text" $row $size else # Если файл не нужен, то удаляем echo "Удаляем ненужный файл $row" rm -f $row fi else # Если файл не нужен, то удаляем echo "Удаляем ненужный файл $row" rm -f $row fi fi done # Если в базе не все файлы, то недостающие надо докачать # Находим перечень всех секций в update.ver section_all=`echo "$upd_new" |grep "\["` # Для каждой секции делаем for sec1 in $section_all; do sec=`echo $sec1 | cut -d "[" -f2 | cut -d "]" -f1` # Если данные этой секции нужны if [ -n "`grep $sec arc/name_section1`" ]; then # Выделяем секцию в 13 строк с началом названия секции text_new=`echo "$upd_new"| grep -A13 "\[$sec\]"` # Находим его номер билда build_new=`echo "$text_new" |grep build= | cut -d "=" -f2 ` # Находим путь загрузки path_new=`echo "$text_new" |grep file= | cut -d "=" -f2 ` # Находим название файла files_new=`basename "$path_new"` # Если нет файла , то загрузить if [ ! -s "$files_new" ]; then echo "файла $files_new нет - загрузить" wget -c --http-user=$login_name --http-password=$password $URLNn/$path_new if [ $? -eq 1 ]; then echo "Ошибка получения файла $files_new" exit 1 fi # Выделяем секцию в 6 строк с серединой с названием файла text_new=`echo "$upd_new"| grep -A5 -B5 $files_new` # Определяем размер файла из update.ver size_new=`echo "$text_new" |grep size= | cut -d "=" -f2 ` # Определяем размер полученого файла size_wget=`ls -l $files_new | awk '{print $5}'` # Сравниваем его с размером из update.ver # if [ $size_wget -ne $size_new ]; then # echo "Размер файла $files_new не совпадает с данными из update.ver" # exit 1 # fi text=`head -17 $files_new` # Название секции из файла section_f=`echo "$text" | grep -a -m1 name= | cut -d "=" -f2| col` # Добавляем сведения о файле в update.ver if [ -n "`grep $section_f arc/name_section1`" ]; then func1 $section_f "$text" $files_new $size_new #elif [ -n "`grep $section_f arc/name_section2`" ]; then #func2 $section_f "$text" $files_new $size_new fi if [ $section_f = ENGINE2 ]; then version_new=`echo "$text" |grep version= | cut -d "=" -f2 ` fi fi fi done #Формируем последнюю секцию text_new=`echo "$upd_new"| grep -A2 "\[COMPATLIST\]"` file1=`echo "$text_new" | grep "file" | cut -d "=" -f2` echo "$text_new" >> update.ver echo >> update.ver pole=`echo "$file1"| cut -b -6 ` data1=`echo "$upd_new" | grep -A10 "\[$file1\]" | grep "$pole"` echo "$data1" >> update.ver echo >> update.ver echo "Old version: $version_old" echo "New version: $version_new" else echo "Файл update.ver - плохой" exit 1 fi exit 0
2. Общая логика (то что по расписанию выполняется)
#!/bin/bash # Прграмма по обновлению антивирусных баз NOD32 # Путь к скриптам path_prog=/etc/upd_prog cd $path_prog # Путь до баз на веб path_html=/var/www/eset_upd dir_arc=eset_upd # Путь до баз обновления path_base=/var/lib/nod32/mirror3 if [ ! -d $path_html/nod_upd ]; then mkdir $path_html/$dir_arc fi # Обновляем базы с интернета /etc/upd_prog/NOD32_update3.sh if [ $? -eq 0 ]; then # Удаляем старые файлы rm $path_html/*.nup # Копируем новые cp -p $path_base/* $path_html cp -p $path_base/update.ver $path_html/$dir_arc # Меняем права для доступа appach chown -R www-data $path_html/*.* chgrp -R www-data $path_html/*.* # Убираем все лишнее echo "Обновление антивирусных баз OK" else echo "Обновление антивирусных баз ERROR" echo "Восстанавливаем базу" # Удаляем плохие файлы файлы rm $path_base/*.* # Копируем старые cp -p $path_html/* $path_base fi echo "Время работы сценария $SECONDS с"