Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    PfSense как сервер обновления ESET NOD32

    Scheduled Pinned Locked Moved Russian
    5 Posts 4 Posters 4.0k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      KAKEP
      last edited by

      Уважаемые знатоки, подскажите возможно ли организовать корпоративный сервер обновления Eset NOD32 на pfSense ?

      1 Reply Last reply Reply Quote 0
      • D
        dr.gopher
        last edited by

        @KAKEP:

        Уважаемые знатоки, подскажите возможно ли организовать корпоративный сервер обновления 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

        FAQ PfSense 2.0

        И не забываем про Adblock дабы не видеть баннеров.

        И многое другое на www.thin.kiev.ua

        1 Reply Last reply Reply Quote 0
        • N
          nomeron
          last edited by

          У меня на Ubuntu 10.04 прекрасно работает.
          Требования простые - вебсервер, скрипт по расписанию и права нужные на доступ.
          Единственный подводный камень - оригинальный скрипт проверял размер загружаемых обновлений файлов на соответствие по файлу описания update.ver, и он не совпадал (писал в Eset, но мне по этому вопросу так и не ответили). Поэтому скрипт немного подправил.
          Сам Nod у меня лицензионный, поэтому  обновляюсь с официальных серверов. Все работает на порядок быстрее, чем через вебсервер самого Nod/

          1 Reply Last reply Reply Quote 0
          • D
            Dinamic
            last edited by

            Был бы благодарен если бы скинул данный скрипт обновления нода

            1 Reply Last reply Reply Quote 0
            • N
              nomeron
              last edited by

              Вроде авторских прав на скрипт не было так что вот:
              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 с"
              
              
              1 Reply Last reply Reply Quote 0
              • First post
                Last post
              Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.