Скрипт по обновлению антивирусных баз NOD32 под Linux (PHP)
Вот портировал скрипты по обновлению антивирусных баз NOD32 V2* и V3* в PHP.
Версии скрипта
Буду тут выкладывать описание версий с датами для более удобного отслеживания за изменениями
- Версия 2.16 от 13.01.2016
- Добавлена V9
- Версия 2.15 от 20.08.2015
- Исправлено несколько ошибок
- Добавлен W10UPGRADE Module
- Версия 2.14a от 5.11.2014
- Ошибка выкачивания компонентов V8
- Версия 2.14 от 29.10.2014
- Добавил V8
- Версия 2.13 от 7.11.2013
- Исправил ошибку выкачивания баз для EAV.
- Исправил ошибку скачивания блоков PAGASUS1 и PAGASUS2.
- Версия 2.12 от 30.10.2013
- Добавил отдельное зеркало для V7
- Добавил новую секцию SPECLEAN для V7
- Версия 2.11 от 2.07.2013
- Тк версии файлов для V5 отличались от V6, то добавил отдельное зеркало для V6
- Добавил 2 новых модуля EHM64* и ATON32*
- Версия 2.10 от 15.11.2012
- Исправлена ошибка при закачке обновлений EAV V3.
- Версия 2.9 от 10.09.2012
- Добавил IRIS модуль.
- Версия 2.8 от 16.07.2012
- Убрал закачку V2.
- Версия 2.7
- Версия 2.6 от 20.03.2012
- Добавлена закачка модуля PAGASUS.
- Версия 2.5 от 19.01.2012
- Может снимать ограничение версии для V5
- Устранена ошибка при ошибочном файле /arc/server
- Версия 2.4 от 27.12.2011
- Добавлен путь, как в nod32View для каждой версии базы, например, для версии V5 - eset_upd/v5.
- Убрана опция all_in_one из настроек.
- Устранено несколько мелких ошибок
- Версия 2.3 от 14.11.2011
- Исправлена ошибка, при закачке файлов V5 со свободных серверов, файлы которых собраны с помощью Nod32viewer.
- Исправлена ошибка, при закачке c помощью wget с пустым логином.
- Введена проверка на длину файлов при закачке и обновлении, при этом можно указать в настройках на сколько файлы могут максимально отличаться.
- Версия 2.2 от 7.11.2011
- Добавил возможность выбора из 4 вариантов разархиватора (7zip, unrar из пакетов, free gnu unrar и rar c http://www.rarlab.com/)
- Версия 2.1 от 3.11.2011
- Заменил архиватор unrar на 7zip, тк он есть во всех дистрибутивах и работает с архивами rar.
- Убрал функцию parse_ini_file(), тк 3 параметр появился только в версии php 5.3, а без него нормально не работает. А у многих стоят более старые версии.
- Версия 2.0 от 2.11.2011
- Удалена загрузка файлов через php fopen(). Из-за того, что не может работать через авторизованные прокси.
- Настроена работа через php curl и wget.
- Версия 2.0b от 20.10.2011
- Добавлена загрузка баз V5
- Доработка мелких замечаний.
- Версия 1.22 от 4.05.2011
- Исправлена ошибка, если в update.ver некоторые параметры передаются в кавычках.
- Версия 1.21 от 12.08.2010
- Добавлена закачка файлов нового модуля обновлений ESET "File system protection Module".
- Версия 1.20 от 21.07.2010
- Исправлена ошибка вывода в консоль, если файл update.ver не скачен (На нормальную работу не влияет).
- Версия 1.19 от 25.06.2010
- Возвращена возможность закачки с помощью wget.
- Теперь можно указать в файле настроек - какие компоненты качать (пока русские и английские).
- Версия 1.18 от 6.04.2010
- Исправлена ошибка по выкачиванию программных компонентов.
- Теперь можно указать в файле настроек - качать или нет программные компоненты.
- Если у Вас пароль от EAV, а не от ESS, то указав это в файле настроек, больше не будет возникать ошибки выкачивания файлов.
- Версия 1.17 от 11.03.2010
- Добавил по просьбе Boevik с форума возможность работать и с unrar v3.91 с сайта http://rarlab.com/download.htm.
- Версия 1.16 от 2.02.2010
- Добавил по просьбе Angpeu с форума в update.ver переменную all_in_one для случая, если для доступа к файлам обновлений нужен пароль, а файл update.ver и файлы обновлений находятся в одной директории.
- Версия 1.15 от 25.01.2010
- Убрал сравнение выкаченного файла и данных из update.ver по размеру.
- Данные о размера файла теперь берутся не из секции update.ver, а из реального размера файла.
- Версия 1.14b от 5.11.2009
- Добавлены новые секции для SELFDEFENSE64 и необязательные секции для компонентов для V3 и V4. Те если компоненты будут лежать в директории с обновлениями, а в update.ver нет на них ссылок, то они стираться не будут и будут добавлены в update.ver.
- Устранена ошибка при скачивании обновлений со свободных зеркал, где update.ver лежит вместе с файлами обновлений.
- Добавлена проверка на наличие модулей php-rar или unrar.
- Версия 1.13 от 25.10.2009
- Добавлены новая секция для закачки MAILSERVER.
- Версия 1.12d от 25.09.2009
- Попробовал исправить большинство ошибок при error_reporting = E_ALL в php.ini.
- Добавлены новые секции для закачки
- Версия 1.11 от 10.09.2009
- Исправлено несколько синтаксических ошибок.
- Исправлена ошибка по коду возврата GNU архиватора unrar.
- Не работал цикл по обновлению с другого сервера, если на первом прошла ошибка.
- Версия 1.10b от 13.07.2009
- Изменен архиватор rar на GNU версию unrar путь до архиватора вынесен в setup.php.
- При изменении версии или ошибке, письмо приходит только одно на обе версии базы.
- Версия 1.9b от 11.07.2009
- Закачка через wget изменена на php-cURL.
- Добавлен тихий режим, без отправки сообщений в консоль, если критических ошибок нет
- Если сервер указан, то пытается обновится только с него. Если не указан сервер (это касается только тех кто обновляется с официальных серверов), то список серверов берется из update.ver и скрипт пробует обновить базы с каждого сервера из этого списка, пока не получится. А то иногда бывает проблема с серверами (похоже из-за их перегрузки) - то их видно, то нет.
- Версия 1.8 от 1.07.2009
- Добавлена возможность закачивать файлы через прокси сервер с аутентификацией и без нее.
- Добавлена возможность отсылки дополнительного письма об обновлении баз на указанный п/я, в случае ошибки или удачного обновления с изменением версии.
- Версия 1.7 от 24.06.2009
- Имя пользователя, от которого работает WEB сервер вынесено в setup.php
- В начале скрипта umask меняется на 0022, а после выполнения возвращается на ту, что была до его выполнения.
- Версия 1.6 от 19.06.2009
- Если происходит ошибка при выкачивании файла, то обновление сразу завершается и восстанавливает базу данной версии Нода, которая была до этого. Раньше скрипт пытался выкачивать остальные файлы, а потом все равно происходило восстановление.
- Версия 1.5 от 16.03.2009 Теперь можно обновлять базы для NOD32 V4.
- Добавлены секции, которых не было в вервии V3 [SYSTEMSTATUS0], [SYSTEMSTATUS1],[SYSTEMSTATUS2],[SYSTEMSTATUS640],[SYSTEMSTATUS641],[SYSTEMSTATUS642],[SELFDEFENSE0],[SELFDEFENSE1],[SELFDEFENSE2],[SELFDEFENSE640],[SELFDEFENSE641],[SELFDEFENSE642]. Обновляется только файл секций section.php.
- Версия 1.4 от 21.01.2009
- Исправлена ошибка записи имени файла в создаваемой update.ver, если этого файла еще не было.
- Версия 1.3 от 16.01.2009
- Если при обновлении NOD32 V2 происходила ошибка, то она не сбрасывалась и для NOD32 V3
- Не правильно формировался блок [data0001] в файле update.ver в NOD32 V3, если в этой секции встречался знак =.
- Убрано отображение некоторых ненужных сообщений.
- Версия 1.2 от 2.12.2008
- Исправлено удаление файла, если он уже не нужен
- Версия 1.1 от 18.11.2008
- Первая версия.
Что умеет скрипт.
Умеет все тоже, что и скрипт на bash, только работает быстрее, один скрипт может обновлять обе версии и можно использовать на любой платформе (сам не пробовал) .
- Обновляет базы с официальных и бесплатных серверов NOD32 (для официальных серверов нужно задать имя и пароль для обновления). Причем, при обновлении с бесплатных серверов скрипт пробует обновится со всех серверов, указанных в update.ver и прекращает работу при первом удачном обновлении.
- Может работать через прокси сервер с аутентификацией и без нее.
- Может отправлять сообщение на указанный п/я с информацией об ошибке или при удачном обновлении с изменением версии базы.
- Обновляет базы для V3, V5, V6 и V7 и V8.
- Если на сервере названия файлов не совпадают с локальными - не качает, а переименовывает файлы.
- Сам создает файл update.ver. Те при обновлении с зеркал обновляются только компоненты с более новыми версиями.
- Автоматически создает папки, нужные для работы программы, в том числе и для Web сервера.
- Создает папку на веб сервере с файлами обновления.
- При ошибке обновления восстанавливает базу в том виде, которая была до обновления.
Скрипт автоматически создает папки для временного хранения копий баз /var/lib/nod32/mirror_V2, /var/lib/nod32/mirror_V3 /var/lib/nod32/mirror_V5 и загружает туда файлы антивирусных баз. Если обновление прошло успешно, то переписывает базы в WEB директорию, а если произошла ошибка, то наоборот, восстанавливает базы, переписывая их из WEB директории в папку временного хранения.
Спасибо Kode - использовал его функции. Так как не очень большой спец в PHP, то прошу не пинать, а если можно то помочь доработать.
Из чего состоит
- update.php - Сам скрипт
- function.php - Файл функций
- section.php - Файл описания секций
- setup.php - Файл установок
Инсталяция
Установка пакетов
Для Mandriva
- Устанавливаем пакеты php-cli.*.rpm, php-rar*.rpm, php-curl*.rpm, unrar*.rpm и 7zip*.rpm, если не установлен.
Для Ubuntu
sudo apt-get install php5-cli php5-curl php5-dev php-pear g++ sudo pecl install rar
Создаем файл /etc/php5/mod-available/rar.so
; configuration for php rar module ; priority=20 extension=rar.so
Далее
sudo php5enmod rar sudo service apache2 restart
Установка скрипта
- Выкачиваем архив nod_upd_php_v2.16.tar.bz2) и распаковываем в любой каталог, например, /etc/upd_prog/.
- Редактируем файл setup.php для каждого варианта антивируса - Устанавливаем:
- Измените, если нужно, путь до папки, где будут храниться временные файлы работы скрипта, например (define("DEFAULT_SAVE_PATH","/var/lib/nod32");).
- Отредактируйте, если нужно, имя пользователя от которого работает WEB сервер, например, define("HTTP_USER", "apache");.
- Если не установлен модуль php-rar:
- Разкоментируем нужную строку с переменной $unrar, где указан нужный Вам разархиватор.
- Разкоментируем строку с переменной $unrar[path], где указываем путь до вашего архиватора bash (можно узнать, запустив из консоли, например: whereis 7z).
- Если нужна закачка с помощью wget, то разкоментируем строку ($wget='/usr/bin/wget';) и указываем путь до wget в Вашей системе (можно узнать по команде из консоли: whereis wget). Если она закоментирована, будет использоваться php-curl.
- Если нужна, дополнительная отправка почты, то разкоментируйте строку с переменной $user_mail и укажите там нужный email. (Но при этом дб настроен и запущен почтовый сервер (postfix, sendmail или другой).)
- Если Вы хотите или должны использовать HTTP-Proxy, разкоментируйте строку с переменной $proxy и укажите свои параметры Прокси сервера, например, $proxy = 'http://login:passwd@www.rrr.ru:8080';.
- Если хотите, то можете указать, на сколько в байтах могут отличаться размер реальных файлов и размер, указанный в update.ver ($diff=1). Обычно эти размеры не отличаются более чем на 1 байт, а в 99% равны. По умолчанию принято $diff=1.
- Установите $quit=1 - не отображать сообщения на консоли, кроме сообщений об ошибках и $quit=0 - отображать сообщения на консоли.
- Имя пользователя, для всех серверов прописываем, например, $userV2='EAV-5075555'; или '$userV2=""; - для бесплатных серверов
- Пароль, например, $pswV2='kd3m4567'; или $pswV2=; - для бесплатных серверов
- Для каждой версии сервера настраиваем:
- Адрес сервера, например ('host'=>'http://89.202.157.139/',). Если он не указан, то список серверов берется из update.ver (для официальных серверов), если указан, то закачка происходит только с него. Адрес можно указать двумя способами, например, для версии V5 - http://host.ru/nod325/ и http://host.ru/nod325/eset_upd/v5/.
- Web каталог для каждой версии баз, например, 'www'=>'/var/www/nod32/',.
- Программные компоненты, тут комментируем строки с ненужными программными компонентами, то они выкачиваться не будут, а если были до этого выкачаны, то будут удалены. Я, например, для V2 оставил все программные компоненты, а для V3 - нет, тк размер файлов компонентов для V3 более 80Mb, а я постоянно переписываю базы на флешку и мне эти 80 Mb не нужны. Те решайте сами - нужны они или нет. К тому же на Офе лежат старые версии компонентов.
- Версия пароля для обновлений. Если у Вас логин и пароль для EAV - укажите 'ess'=>0, если от ESS, то 'ess'=>1.
- Для V5 можно указать снять ограничение версии для обновления компонентов. Но я бы не рекомендовал это делать, пока нельзя записать альтернативные сервера, без изменения реестра и перезагрузки, тк после обновления придется снова менять реестр.
- Пробуем из под root запустить файл update.php.
- Теперь в crontab прописываем запуск скрипта
# Обновление баз NOD32* 00 09,15 * * * root /etc/upd_prog/php/update.php
и наслаждаемся автоматическим обновлением 2 раза в сутки
Настройка сервера Apache для доступа к базам по паролю
Инструкция взята тут
Итак, если нам хочется настроить Ваше зеркало так, что бы только нужные пользователи могли обновляться с нашего сервера, то тогда нужно сделать следующее.
Создание файла с паролями
Файл с учетными данными обычно называется .htpasswd и располагается в каталоге, доступ к которому необходимо ограничить. По умолчанию в Apache запрещен доступ ко всем файлам, которые начинаются на .ht, так что файл с паролями, как и файл .htaccess, не сможет быть прочитан ни одним посетителем вашего сайта. Но для ускорения работы сервера лучше использовать конфигурационный файл apache и файл паролей.
В каждой строке файла паролей хранятся данные об одном пользователе. Логин и зашифрованный пароль разделены двоеточием. Пример:
admin:YFC5nYLiUI2ig vasya:bnqw1eZHP2Ujs
Допустим, что мы хотим создать доступ по паролю пользователя admin.
Для шифрации паролей применяется утилита htpasswd, которая поставляется в комплекте с Apache. Чтобы создать новый файл с данными о пользователе admin, войдите в каталог, где нужно ограничить доступ и будет лежать файл паролей (я использовал каталог с настройками apache - /var/www/html/nod32 (/var/www/html/nod323) и введите команду:
$ htpasswd -c .htpasswd admin
Внимание- При использовании ключа -c будет затерт старый файл с паролями, без всякого предупреждения.
Для добавления в уже существующий файл используется команда:
$ htpasswd .htpasswd vasya
После запуска, утилита попросит дважды ввести пароль и, если они совпадут, данные о пользователе будут добавлены.
Настройка сервера Apache
Теперь, чтобы включить запрос на авторизацию при попытке доступа, необходимо внести изменения в файл конфигурации.
Эти строки нужно вставить в файл конфигурации вашего сервера:
<Directory "/var/www/html/nod32"> AllowOverride All </Directory> <Directory "/var/www/html/nod323"> AllowOverride All </Directory>
AllowOverride AuthConfig или AllowOverride All - необходимо, что бы сервер при работе учитывал параметры файла .htaccess
Если данные параметры установлены на весь сервер, то тут их вписывать необязательно.
После внесения изменений в файл конфигурации, не забудьте перезагрузить Apache.
Создание файлов .htaccess
Интересное описание структуры .htaccess с примерами я нашел тут.
В директориях с файлами баз (/var/www/html/nod32 и /var/www/html/nod323, в моем случае) создаем файлы .htaccess, следующего содержания
<FilesMatch "\.(nup)$"> AuthName "Private zone" AuthType Basic require valid-user AuthUserFile /var/www/nod323/.htpasswd Order deny,allow Deny from all Allow from 172.16.130.0/24 Satisfy Any </FilesMatch>
FilesMatch "\.(nup)$" - означает, что на все файлы в данной директории с расширением .nup, сервер будет запрашивать пароль.
Вам необходимо изменить путь к файлу с паролями (AuthUserFile)- путь должен быть полным и строку-приглашение (AuthName), которая выдается на экран пользователю при запросе пароля.
Если Вы хотите, что бы в вашей локальной сети (172.16.130.0/24 - в моем случае) все обновлялись без пароля, добавьте еще три строки
Order deny,allow Deny from all Allow from 172.16.130.0/24 Satisfy Any
Я их показал снова, что бы было понятно, что за что отвечает.
Значение других директив вы можете узнать из документации Apache.