Хочу помочь коллеге развернуть сервисы исключительно на самом последнем LTS
релизе дистрибутива Ubuntu
, а именно на момент написания заметки это Ubuntu 22.04 Server.
И в качестве первого из них выступит сервис зеркала обновлений ESET NOD32.
Обязательно нужно иметь действующий аккаунт лицензионного ключа nod32
. Я придерживаюсь правила, что для рабочих станций можно использовать дистрибутив ESET Endpoint Antivirus
версии 5.0.2271.3
(обновления скачиваются с развернутого зеркала, настройки следят за работой системы, дистрибутив не нагружает систему).
Сперва проработаю развертывание как связку OS (Ubuntu 22.04 Server + сервис)
, а потом отдельно как контейнер docker.
Шаг №1:
Устанавливаю в систему необходимые пакеты для зеркала обновлений nod32:
ekzorchik@srv-us2204a:~$ sudo apt-get -y install nginx unrar curl unzip mc mercurial net-tools ekzorchik@srv-us2204a:~$ sudo rm -f /var/www/html/index.nginx-debian.html
Шаг №2:
Скачиваю либо из интернета, либо из своего локального хранилища пакет nod32mirror
ekzorchik@srv-us2204a:~$ wget https://lin.ekzorchik.ru/wp-content/uploads/2021/11/master18012020.zip
Шаг №3:
Распаковываю и копирую нужные каталоги в место где есть корневой каталог Web
—сервиса nginx:
ekzorchik@srv-us2204a:~$ unzip master18012020.zip ekzorchik@srv-us2204a:~$ mv nod32-update-mirror-master/ nod32 ekzorchik@srv-us2204a:~$ sudo mkdir /var/www/html/nod32 ekzorchik@srv-us2204a:~$ sudo cp -r nod32/nginx/html/* /var/www/html/nod32/ ekzorchik@srv-us2204a:~$ sudo chown -R www-data:www-data /var/www/html/
Шаг №4:
Производим настройку файлов зеркала обновлений nod32:
ekzorchik@srv-us2204a:~$ sudo mkdir /etc/nod32 ekzorchik@srv-us2204a:~$ sudo cp nod32/src/nod32-mirror.sh /etc/nod32/ ekzorchik@srv-us2204a:~$ sudo cp -r nod32/src/include/ /etc/nod32/ ekzorchik@srv-us2204a:~$ sudo cp nod32/src/settings.conf /etc/nod32/ ekzorchik@srv-us2204a:~$ sudo chmod +x /etc/nod32/nod32-mirror.sh ekzorchik@srv-us2204a:~$ sudo mv /etc/nod32/settings.conf /etc/nod32/settings.conf.backup ekzorchik@srv-us2204a:~$ sudo nano /etc/nod32/settings.conf export NOD32MIRROR_DEBUG_MODE=0; export NOD32MIRROR_USE_FREE_KEY=0; export NOD32MIRROR_MIRROR_DIR="/var/www/html/nod32"; export NOD32MIRROR_SERVER_0='http://update.eset.com:80/eset_upd/ EAV-логин EAV-пароль'; export NOD32MIRROR_LANGUAGES='1033 1049'; export NOD32MIRROR_VERSIONS='pcu 5'; export NOD32MIRROR_LOG_PATH="/var/log/nod32/nod32mirror.log"; export NOD32MIRROR_CURL_BIN='false'; export NOD32MIRROR_TEST_URI='http://update.eset.com:80/v8-rel-sta/mod_010_smon_1036/em010_32_l0.nup'; export NOD32MIRROR_TIMESTAMP_FILE_NAME='lastevent.txt'; export NOD32MIRROR_VERSION_FILE_NAME='version.txt';
Шаг №5:
Наполняем свое зеркало обновления для используемой версии антивируса на рабочем месте:
ekzorchik@srv-us2204a:~$ sudo /etc/nod32/nod32-mirror.sh -u [09:31:06] Checking server (http://update.eset.com:80/eset_upd/ [EAV-0293046026:**********]).. Available [09:31:07] Starting mirroring "http://update.eset.com:80/eset_upd/" -> "/var/www/html/nod32" [09:31:07] Download versions file (http://update.eset.com:80/eset_upd/update.ver).. Success [09:31:07] Parsing & writing new (/var/www/html/nod32/update.ver) versions file
ожидаю закачки файлов обновления….
[09:37:05] Download file "http://update.eset.com:80/ep5-rel-sta/mod_045_ssl_1070/em045_32_l1.nup" (83 of 83).. Success [09:37:06] Mirroring "http://update.eset.com:80/eset_upd/v5/" -> "/var/www/html/nod32/v5" complete! [09:37:06] Successfully downloaded files: 83, skipped: 0, with errors: 0 [09:37:06] Timestamp file created (lastevent.txt) [09:37:06] Total updates (*.nup) files count: 152 file(s) [09:37:06] Total updates (*.nup) files size: 291.3M [09:37:06] Mirror directory size is 292M ekzorchik@srv-us2204a:~$
Шаг №6:
Прописываю в планировщик проверку обновлений каждые 6
часов:
ekzorchik@srv-us2204a:~$ sudo crontab -e 0 6 * * * sudo /etc/nod/nod32-mirror.sh -u > /dev/null 2>&1 0 6 * * * sudo chown -R www-data:www-data /var/www/html/nod > /dev/null 2>&1
Шаг №7:
Размер каталога /var/www/html/nod32
после скачивания обновлений:
ekzorchik@srv-us2204a:~$ sudo du -sh /var/www/html/nod32/ 292M /var/www/html/nod32/
Шаг №8:
Создаю аутентификационную связку на доступ к зеркалу обновлений по http
дабы только авторизованные клиенты могли стягивать с него обновления:
ekzorchik@srv-us2204a:~$ sudo sh -c "echo -n 'ekzorchik:' >> /var/www/html/.htpasswd" ekzorchik@srv-us2204a:~$ sudo sh -c "openssl passwd -apr1 >> /var/www/html/.htpasswd" Password: Aa1234567 Verifying - Password: Aa1234567 ekzorchik@srv-us2204a:~$ ekzorchik@srv-us2204a:~$ cat /var/www/html/.htpasswd ekzorchik:$apr1$l9nqN4Ny$viDHeu2Jn0YX32atyPzle. ekzorchik@srv-us2204a:~$
Шаг №9:
Если нужно добавить еще одну связку логин и пароль в .htpasswd
, то:
Создаем пароль:
ekzorchik@srv-us2204a:~$ openssl passwd -apr1 Password: указываю пароль, к примеру Aa1234567 Verifying - Password: повторяю пароль, Aa1234567 $apr1$.eoo1S8D$dhPKKpimFxzhoKaNWLOpz. ekzorchik@srv-us2204a:~$
Указываю произвольный логин и копирую через двоеточие после него сгенерированный выше пароль, получается вот так:
ekzorchik@srv-us2204a:~$ sudo nano /var/www/html/.htpasswd ekzorchik:$apr1$l9nqN4Ny$viDHeu2Jn0YX32atyPzle. alektest1:$apr1$.eoo1S8D$dhPKKpimFxzhoKaNWLOpz. ekzorchik@srv-us2204a:~$ sudo chown -R www-data:www-data /var/www/html/.htpasswd
и после прописываем логин и пароль на доступ к обновлению на клиенте с такого-то сервера + порт.
Шаг №10:
Создаю конфигурацию работы зеркала обновлений через http:
ekzorchik@srv-us2204a:~$ sudo unlink /etc/nginx/sites-enabled/default ekzorchik@srv-us2204a:~$ sudo unlink /etc/nginx/sites-available/default ekzorchik@srv-us2204a:~$ sudo nano /etc/nginx/sites-available/nod32 server { listen 38000; server_name 172.33.33.127; root /var/www/html/nod32; charset utf-8; index index.html; if ($http_user_agent ~* ^(Wget|aria2|NOD32view|perl|php|curl|Google|Yandex|Yahoo)|(Mirror|spider|bot|Parser|RSS|grab)) { return 403; } location ~* ^.+.(htaccess|htpasswd|pl|cqi|sh|sql|conf|tmp)$ { return 403; } location / { autoindex on; auth_basic "Restricted Content"; auth_basic_user_file /var/www/html/.htpasswd; } } ekzorchik@srv-us2204a:~$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful ekzorchik@srv-us2204a:~$ sudo ln -s /etc/nginx/sites-available/nod32 /etc/nginx/sites-enabled/nod32 ekzorchik@srv-us2204a:~$ sudo systemctl restart nginx && sudo systemctl status nginx | head -n5 ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-05-12 08:59:40 MSK; 10min ago Docs: man:nginx(8) Process: 1635 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) ekzorchik@srv-us2204a:~$ ekzorchik@srv-us2204a:~$ sudo netstat -tulpn | grep nginx tcp 0 0 0.0.0.0:38000 0.0.0.0:* LISTEN 34838/nginx: master
Шаг №11:
Проверяю, что при обращении на зеркало обновлений через консоль командной строки с аутентификацией сервис откликнется:
ekzorchik@srv-us2204a:~$ curl -u ekzorchik:Aa1234567 http://172.33.33.127:38000/index.html <html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.18.0 (Ubuntu)</center> </body> </html> ekzorchik@srv-us2204a:~$
ответ 403 Forbidden
потому что я в описании сайта запретил обращение к своему зеркалу обновлений утилитой curl
, если ее убрать из параметра $http_user_agent
, перезапустить nginx и заново произвести подключение, то я успешно подключаюсь:
ekzorchik@srv-us2204a:~$ sudo nano /etc/nginx/sites-available/nod32 server { listen 38000; server_name 172.33.33.127; root /var/www/html/nod32; charset utf-8; index index.html; # if ($http_user_agent ~* ^(Wget|aria2|NOD32view|perl|curl|php|Google|Yandex|Yahoo)|(Mirror|spider|bot|Parser|RSS|grab)) { if ($http_user_agent ~* ^(Wget|aria2|NOD32view|perl|php|Google|Yandex|Yahoo)|(Mirror|spider|bot|Parser|RSS|grab)) { return 403; } location ~* ^.+.(htaccess|htpasswd|pl|cqi|sh|sql|conf|tmp)$ { return 403; } location / { autoindex on; auth_basic "Restricted Content"; auth_basic_user_file /var/www/html/.htpasswd; } } ekzorchik@srv-us2204a:~$ sudo systemctl reload nginx ekzorchik@srv-us2204a:~$ curl -u ekzorchik:Aa1234567 http://172.33.33.127:38000/index.html | head -n6 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 19901 100 19901 0 0 12.5M 0 --:--:-- --:--:-- --:--:-- 18.9M <!DOCTYPE html> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="robots" content="noindex, nofollow" /> <title>ESET NOD32 Updates Mirror</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" /> ekzorchik@srv-us2204a:~$
Возвращаюсь настройки блокировки обращения через утилиту curl
к своему сервису зеркала обновлений nod32.
Шаг №:12
Прописываю настройки обновления на компьютере под управлением Windows 10 Pro x64
Настройка - Перейти к дополнительным настройкам... - Обновление - Общие - (Сервер обновлений) Изменить
— указываю (Сервер обновлений): http://172.33.33.127:38000
и нажимаю "Добавить"
, затем указываю "Имя пользователя"
и "Пароль"
и нажимаю "OK"
.
После перехожу в главное меню "Обновление" - "Обновить базу данных сигнатур вирусов"
и обновления успешно выкачивается с выше развернутого сервера обновлений.
Итого заметка работоспособна. И я могу ее смело передать своему коллеге чтобы он повторил ее сам у себя или это сделаю я и все будет работать.
На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.