@@ -0,0 +1,717 @@
# KESL 12.4 standalone на ВМ3 SigNoz
Операторский runbook для Ubuntu 24.04 ВМ3. Команды выполняет `root` или
персональная роль `admin` через `sudo` в отдельное maintenance window.
Репозиторий и скрипты Foundry KESL не устанавливают и не запускают.
Цели:
1. АВЗ.1: обнаружение и реагирование через host File Threat Protection.
2. АВЗ.2: автоматическое обновление баз с серверов Kaspersky.
На ВМ3 нет Message Safety и нет scan-broker. Container Monitoring этой
лицензией не покрыт — контейнерный мониторинг пропускаем, компенсируем host
File Threat Protection и точечным `scan-file` . Сеть, firewall management,
Web Threat Protection и Behavior Detection KESL не включаем.
KESL 12.4 commercial не заявляется как сертифицированная ФСТЭК сборка.
Раскатка SigNoz, lockdown и обновление стека — только в
[`../RUNBOOK.ru.md` ](../RUNBOOK.ru.md ). Это окно с ними не совмещать.
## 0. Approvals, egress и stop conditions
До окна зафиксировать change ID, оператора, Security/Service/Operations
approvers, hostname, ОС/ядро, RAM/swap/диск, package version/hash/source,
лицензию и rollback. EULA, Privacy Policy и KSN согласовать отдельно.
Activation code, ключи и secrets не помещать в репозиторий, историю shell,
chat или evidence.
Текущий инвентарь (подставьте актуальные значения):
| Узел | SSH | Приватный IP |
|---|---|---|
| ВМ3 SigNoz | `signoz-private` через jump | `192.168.0.5` |
Рабочий каталог SigNoz на ВМ: `/opt/signoz` . Compose:
``` sh
COMPOSE = /opt/signoz/pours/deployment/compose.yaml
```
### 0.1. Egress на время окна
Исходящий доступ ВМ3 управляется файрволом (cloud SG / NAT policy), не
постоянным unrestricted internet. На это окно оператор **открывает **
исходящий HTTPS/DNS, достаточный для:
- активации лицензии Kaspersky;
- первого Update с `UPDATER_SOURCE=KLServers` ;
- опционально `apt` (`rhash` ) и загрузки EICAR с `secure.eicar.org` .
После приёмки общий интернет **не оставлять ** . Для АВЗ.2 в steady state
оставить узкий allow-list к серверам обновления/активации Kaspersky
(имена, не застывшие IP) по
[приложению вендора ](https://support.kaspersky.ru/kes-for-linux/12.4.0/316243 ).
Минимум для Update при `USE_KSN=No` :
- `s00.upd.kaspersky.com` … `s19.upd.kaspersky.com` , TCP 443;
- `downloads.upd.kaspersky.com` , TCP 443;
- серверы активации из того же приложения, TCP 443;
- рабочий системный DNS/NTP. Если системный DNS недоступен, KESL может
сам обратиться к публичным DNS (`8.8.8.8` , `1.1.1.1` и др.) — это
запрещено политикой ВМ3, поэтому resolver должен работать.
Проверка до активации и Update:
``` sh
getent hosts s00.upd.kaspersky.com downloads.upd.kaspersky.com
curl -4sS -o /dev/null -w '%{http_code}\n' --connect-timeout 8 --max-time 15 \
https://downloads.upd.kaspersky.com
```
Ожидается разрешение имён и HTTP `200` /`301` /`302` /`403` /`404` , не таймаут.
Если файрвол ещё закрыт — stop: не запускать `kesl-setup` активацию и task 6.
### 0.2. Stop conditions
Остановиться, если:
- ОС/архитектура/ядро отсутствуют в матрице KESL 12.4;
- установлен другой AV или неизвестный KESL;
- свободно менее 10 ГБ или нет рабочего swap;
- до установки есть unhealthy/restarting контейнеры SigNoz, OTLP `4317`
недоступен с ВМ1/ВМ2, UI `/api/v1/health` не отвечает;
- package hash/source не подтверждены, лицензия недействительна или базы
не загружены;
- после этапа: ClickHouse/PostgreSQL/SigNoz/ingester unhealthy или restart;
- available memory менее 512 МБ на 4 ГиБ RAM либо менее 1 ГиБ на ≥8 ГиБ;
- устойчивый swap IO, OOM, IO wait >10% за 5 минут;
- File Threat Protection изменил UFW/слушатели `8080/4317/4318` .
Не совмещать с `20-deploy-signoz.sh` , правкой `casting.yaml` , snapshot,
lockdown, TLS, Docker restart или host reboot.
## 1. Read-only baseline
Сохранить вывод каждого блока в change record без секретов, полного
`docker inspect` и Compose environment.
### 1.1. Host
``` sh
date -Is
hostnamectl
uname -a
dpkg --print-architecture
findmnt -no TARGET,SOURCE,FSTYPE,OPTIONS / /var/lib/docker /opt /tmp
free -h
swapon --show
df -hT / /var/lib/docker /opt /tmp
df -ih / /var/lib/docker /opt /tmp
systemctl is-active docker ufw
dpkg-query -W -f= '${Package}\t${Version}\t${Status}\n' \
kesl kesl-gui kav4fs 2>/dev/null || true
```
Проверка только для `amd64` , Ubuntu 24.04 LTS и поддерживаемого ядра.
SigNoz на 4 ГиБ — constrained; для KESL лучше ≥8 ГиБ. Defaults
`ScanMemoryLimit=8192` и `MaxMemory=auto` на этой ВМ не принимать.
### 1.2. SigNoz и volumes
``` sh
cd /opt/signoz
docker info --format \
'driver={{.Driver}} root={{.DockerRootDir}} containers={{.Containers}} running={{.ContainersRunning}}'
docker compose -f pours/deployment/compose.yaml ps -a
docker stats --no-stream --format \
'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.BlockIO}}\t{{.PIDs}}'
curl -fsS --max-time 5 http://127.0.0.1:8080/api/v1/health
ss -lntp '( sport = :8080 or sport = :4317 or sport = :4318 )'
```
Снять фактические **host ** -пути hot-data (поле `Source` ). Prefix Compose и
путь внутри контейнера (`Destination` ) в `--add-exclusion` не подставлять.
Как читать вывод и какие строки брать — раздел 6.
``` sh
for c in \
signoz-telemetrystore-clickhouse-0-0 \
signoz-telemetrykeeper-clickhousekeeper-0 \
signoz-metastore-postgres-0 \
signoz-signoz-0
do
echo " === $c === "
docker inspect --format \
'{{range .Mounts}}{{.Type}} {{.Name}} {{.Source}} -> {{.Destination}}{{println}}{{end}}' \
" $c "
done
```
В change record — только host-пути данных ClickHouse, ClickHouse Keeper,
PostgreSQL metastore. Overlay2, `/opt/signoz` и `/tmp` не исключать.
### 1.3. Firewall и OTLP
``` sh
ufw status verbose
iptables-save | head
ss -lntp '( sport = :8080 or sport = :4317 or sport = :4318 )'
```
С ВМ1 (не ICMP):
``` sh
timeout 3 bash -c 'exec 3<>/dev/tcp/192.168.0.5/4317' \
&& echo 'OTLP gRPC reachable'
```
Без живого OTLP и healthy стека к установке не переходить.
## 2. Дистрибутив и установка
GUI, i386, RPM, KSC agent на сервер не ставятся. ISO не распаковывать в
`/opt/signoz` и не оставлять смонтированным.
Ожидаемый ISO пилота ВМ1/ВМ2: `049-16-d-01.iso` , volume id `KESL12SP4` ,
DEB `kesl_12.4.0-1225_amd64.deb` . Хеши пилота не считать универсальными,
если пришёл другой носитель: записать фактические SHA-256 и ГОСТ.
Вендор публикует **ФИКС 2.0.2 / ГОСТ Р 34.11-94 ** , не SHA-256. Для ISO
`049-16-d-01.iso` сумма вендора совпала с `rhash --gost` :
```
6a94b16afad211e8b9be5ec86f5379184f2b3a9e5869843fe763e2796e5ac1d3
```
SHA-256 того же ISO (локальный учёт, не сверка с сайтом ФИКС):
```
8599a7ed8d7d661a70811d668e5f98e372b674c87ef4cd24abbd917625a2d5e5
```
### 2.1. Копирование на ВМ3
На ВМ заранее:
``` sh
install -d -m 0700 -o root -g root /var/lib/han-deploy/incoming
```
С рабочей станции через jump (`signoz-private` из
[`../RUNBOOK.ru.md` ](../RUNBOOK.ru.md )):
``` powershell
scp `
" C:\Users\MI\Documents\job\HAN_new_life\HANapp\docs\kes 12.4\049-16-d-01.iso " `
" C:\Users\MI\Documents\job\HAN_new_life\HANapp\docs\kes 12.4\049-16-d-01.sig " `
signoz-private : / var / lib / han-deploy / incoming /
```
### 2.2. Проверка ГОСТ и извлечение DEB
``` sh
apt-get update
apt-get install -y rhash
ISO = '/var/lib/han-deploy/incoming/049-16-d-01.iso'
SIG = '/var/lib/han-deploy/incoming/049-16-d-01.sig'
ls -l " $ISO " " $SIG "
file " $ISO " " $SIG "
sha256sum " $ISO "
rhash --gost " $ISO "
```
Если ГОСТ совпал — извлеките только amd64 DEB:
``` sh
install -d -m 0700 -o root -g root \
/root/kesl-install /mnt/kesl-iso
mount -o ro,loop " $ISO " /mnt/kesl-iso
find /mnt/kesl-iso -type f \
\( -iname 'kesl_*_amd64.deb' -o -iname '*.deb' \) |
sort
```
``` sh
DEB = '/mnt/kesl-iso/kesl/kesl_12.4.0-1225_amd64.deb'
dpkg-deb -f " $DEB " Package Version Architecture
sha256sum " $DEB "
install -m 0600 -o root -g root \
" $DEB " /root/kesl-install/kesl.deb
umount /mnt/kesl-iso
rmdir /mnt/kesl-iso
```
Ожидается: Package `kesl` , Version `12.4.x` , Architecture `amd64` .
`kesl-gui` , i386 и RPM не копировать.
``` sh
apt-get remove -y rhash
apt-get purge -y rhash
apt-get autoremove -y
```
Снимки до установки:
``` sh
test -f /etc/docker/daemon.json && \
cp -a /etc/docker/daemon.json /root/kesl-install/docker-daemon.before.json
iptables-save > /root/kesl-install/iptables.before
ufw status verbose > /root/kesl-install/ufw.before
ss -lntp '( sport = :8080 or sport = :4317 or sport = :4318 )' \
> /root/kesl-install/listeners.before
ls -l /root/kesl-install
```
``` sh
apt-get install /root/kesl-install/kesl.deb
```
### 2.3. Первоначальная настройка без защиты
Значения EULA, Privacy Policy и KSN — после согласования, не механически.
Для этого окна, как на ВМ1/ВМ2: `USE_KSN=No` .
``` sh
install -m 0600 -o root -g root /dev/null /root/kesl-install/autoinstall.ini
cat > /root/kesl-install/autoinstall.ini <<'EOF'
KSVLA_MODE=No
ENDPOINT_AGENT_MODE=No
EULA_AGREED=Yes
PRIVACY_POLICY_AGREED=Yes
USE_KSN=No
GROUP_CLEAN=Yes
LOCALE=ru_RU.UTF-8
INSTALL_LICENSE=None
UPDATER_SOURCE=KLServers
UPDATE_EXECUTE=No
KERNEL_SRCS_INSTALL=No
USE_GUI=No
CONFIGURE_SELINUX=No
DISABLE_PROTECTION=Yes
INTERCEPTOR_MODE=UseFanotify
ENABLE_TRACES_ON_FIRST_STARTUP=No
EOF
chmod 0600 /root/kesl-install/autoinstall.ini
stat -c '%U:%G:%a %n' /root/kesl-install/autoinstall.ini
```
``` sh
/opt/kaspersky/kesl/bin/kesl-setup.pl \
--autoinstall= /root/kesl-install/autoinstall.ini
echo " kesl-setup exit= $? "
```
При `INSTALL_LICENSE=None` setup может вернуть 71. Не запускать повторно,
если `kesl.service` active и File Threat Protection Stopped.
``` sh
systemctl --no-pager --no-legend status kesl || true
kesl-control --app-info
kesl-control --get-task-list
free -h
cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps
curl -fsS --max-time 5 http://127.0.0.1:8080/api/v1/health
```
Ожидается: `kesl` запущен, задача 1 не `Started` , контейнеры healthy.
## 3. Resource budget до Update и FTP
Не стартовать Update (task 6) и File Threat Protection (task 1), пока не
срезаны дефолты памяти.
Стартовый кандидат:
- ≥8 ГиБ RAM: `ScanMemoryLimit=1024` , `MaxMemory=2048MB` ,
`OnDemandCPULimit=15` ;
- 4 ГиБ RAM: только по письменному решению владельца —
`ScanMemoryLimit=512` , `MaxMemory=1024MB` , `OnDemandCPULimit=15` ;
full filesystem scan и архивы запрещены.
### 3.1. Снимок
``` sh
kesl-control --get-app-settings \
--file /root/kesl-install/app-settings.before.ini
install -m 0600 -o root -g root \
/var/opt/kaspersky/kesl/common/kesl.ini \
/root/kesl-install/kesl.ini.before
awk '/^\[General\]/,/^\[/' /var/opt/kaspersky/kesl/common/kesl.ini | head -n 40
```
### 3.2. Лимит CPU (KESL ещё работает)
``` sh
kesl-control --set-app-settings \
UseOnDemandCPULimit = Yes OnDemandCPULimit = 15
```
### 3.3. Память — только при остановленном KESL
Файл целиком не подменять. Сначала смотрите `[General]` из шага 3.1.
``` sh
systemctl stop kesl
systemctl is-active kesl || true
grep -nE '^(ScanMemoryLimit|MaxMemory)=' \
/var/opt/kaspersky/kesl/common/kesl.ini
sed -i \
-e 's/^ScanMemoryLimit=8192$/ScanMemoryLimit=1024/' \
-e 's/^MaxMemory=auto$/MaxMemory=2048MB/' \
/var/opt/kaspersky/kesl/common/kesl.ini
grep -nE '^(ScanMemoryLimit|MaxMemory)=' \
/var/opt/kaspersky/kesl/common/kesl.ini
systemctl start kesl
systemctl is-active kesl
kesl-control --get-app-settings | grep -iE \
'UseOnDemandCPULimit|OnDemandCPULimit|ScanMemoryLimit|MaxMemory'
free -h
cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps
```
На constrained 4 ГиБ замените значения в `sed` на `512` и `1024MB` .
Ожидаемо: `kesl.service` active; task 1 и 6 `Stopped` ; базы ещё не
загружены; ClickHouse/SigNoz healthy.
## 4. Активация
Код не помещать в `autoinstall.ini` , репозиторий, evidence, чат и history.
Нужен открытый egress из раздела 0.1.
``` sh
set +o history
unset HISTFILE
read -rsp 'KESL activation code: ' KESL_CODE; echo
kesl-control --add-active-key " $KESL_CODE "
unset KESL_CODE
set -o history
kesl-control -L --query
kesl-control --app-info
```
В evidence — только статус вроде `Active subscription` и срок, не GUID
ключа. Если лицензия `Inconsistent update` или недействительна — stop.
## 5. АВЗ.2 — базы
ID подтвердить через `--get-task-list` (Update = 6).
``` sh
kesl-control --get-settings 6
kesl-control --start-task 6 -W
kesl-control --get-task-state 6
kesl-control --app-info --json
free -h
cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps
```
Если available RAM падает ниже порога раздела 0.2 или контейнер unhealthy:
``` sh
kesl-control --stop-task 6
```
Ожидается: Update завершилась, `Application databases loaded: Yes` .
Для 12.4 одного `RuleType=Hourly` недостаточно: нужен `StartTime` с
интервалом `;1` и `LC_ALL=C` (иначе `ru_RU` подставит русское имя месяца).
``` sh
START = " $( LC_ALL = C date +'%Y/%b/%d %H:%M:%S;1' ) "
kesl-control --set-schedule 6 RuleType = Hourly \
" StartTime= ${ START } " RunMissedStartRules = No RandomInterval = 0
kesl-control --get-schedule 6
```
Если в `--app-info` есть
`Post-update actions: The application module has been updated. Restart
the application` — обязательный рестарт **до ** запуска task 1:
``` sh
systemctl restart kesl
systemctl is-active kesl
kesl-control --app-info --json
grep -nE '^(ScanMemoryLimit|MaxMemory)=' \
/var/opt/kaspersky/kesl/common/kesl.ini
kesl-control --get-app-settings | grep -iE \
'UseOnDemandCPULimit|OnDemandCPULimit'
kesl-control --get-schedule 6
kesl-control --get-task-state 1
kesl-control --get-task-state 6
```
До приёмки АВЗ.2 наблюдать хотя бы один автоматический hourly cycle при
уже суженном (не широком) egress. Alert: ошибка Update, базы старше
240 часов, базы не загружены, лицензия недействительна.
## 6. Исключения hot-data
KESL смотрит host filesystem. В `--add-exclusion` идёт `Source` (путь на
ВМ), обычно `/var/lib/docker/volumes/<имя>/_data` . `Destination` — путь
внутри контейнера, его KESL не видит. Prefix тома не угадывать.
Снять mounts ещё раз, если baseline раздела 1.2 уже не под рукой:
``` sh
cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps --format '{{.Name}}'
for c in \
signoz-telemetrystore-clickhouse-0-0 \
signoz-telemetrykeeper-clickhousekeeper-0 \
signoz-metastore-postgres-0
do
echo " === $c === "
docker inspect --format \
'{{range .Mounts}}{{if eq .Type "volume"}}{{.Source}} dest={{.Destination}} vol={{.Name}}{{println}}{{end}}{{end}}' \
" $c "
done
```
Какой `Source` брать — снято на этой ВМ3:
| Контейнер | `dest=` | Host-путь для `--add-exclusion` |
|---|---|---|
| `signoz-telemetrystore-clickhouse-0-0` | `/var/lib/clickhouse` | `/var/lib/docker/volumes/signoz-telemetrystore-0-0-data/_data` |
| `signoz-telemetrykeeper-clickhousekeeper-0` | `/var/lib/clickhouse-keeper` | `/var/lib/docker/volumes/signoz-telemetrykeeper-0-data/_data` |
| `signoz-metastore-postgres-0` | `/var/lib/postgresql/data` | `/var/lib/docker/volumes/signoz-metastore-postgres-0-data/_data` |
Не добавлять в этом окне:
- `signoz-telemetrystore-user-scripts` — скрипты, не hot-data ClickHouse;
- анонимный том Keeper
`29bd76fc40766c8bbf2f584040e75b4f3cab02052fcf67541777c4f9340dbc84`
(`dest=/var/lib/clickhouse` у keeper). Если начнёт расти (`du -sh`
этого `_data` ) — отдельное решение Security, не расширять список вслепую.
Проверка тома:
``` sh
docker volume inspect --format '{{.Name}} {{.Mountpoint}}' \
signoz-telemetrystore-0-0-data \
signoz-telemetrykeeper-0-data \
signoz-metastore-postgres-0-data
```
`Mountpoint` обязан совпасть с путями ниже. Не исключать `/var/lib/docker` ,
`overlay2` , `/opt/signoz` , `/var/lib/han-deploy/incoming` , `/tmp` , `/root` .
``` sh
kesl-control --get-settings 1 \
--file /root/kesl-install/file-threat.before.ini
kesl-control --set-settings 1 \
--add-exclusion /var/lib/docker/volumes/signoz-telemetrystore-0-0-data/_data
kesl-control --set-settings 1 \
--add-exclusion /var/lib/docker/volumes/signoz-telemetrykeeper-0-data/_data
kesl-control --set-settings 1 \
--add-exclusion /var/lib/docker/volumes/signoz-metastore-postgres-0-data/_data
kesl-control --set-settings 1 ScanArchived = No
kesl-control --get-settings 1
```
Каждое исключение: владелец, причина (write-hot telemetry/metadata),
компенсация (FTP вне volume + периодический `scan-file` host-дерева
`/opt/signoz/scripts` ), срок пересмотра, подтверждение Security.
## 7. Узкий on-demand scan-file
ODS schedules, кроме Update, оставить Manual. Не сканировать volumes
ClickHouse/PostgreSQL и не запускать Container Scan.
``` sh
kesl-control --get-task-list
kesl-control --get-schedule 2
kesl-control --set-schedule 2 RuleType = Manual
kesl-control --scan-file /opt/signoz/scripts --action Inform
kesl-control --get-task-state 1
free -h
cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps
```
Ожидается: scan-file без ошибок, FTP всё ещё Stopped, стек healthy.
Если вырос swap или unhealthy — остановить scan и не включать task 1.
## 8. Host protection — АВЗ.1
На Ubuntu 24.04 с fanotify параметр `InterceptorProtectionMode` **не
поддерживается**. Штатный режим — блокировка на время проверки. Откат:
`kesl-control --stop-task 1` .
``` sh
kesl-control --start-task 1
kesl-control --set-settings 1 \
ActionOnThreat = DisinfectDeleteIfNotPossible ScanArchived = No
kesl-control --get-task-state 1
kesl-control --get-settings 1
kesl-control --app-info --json
free -h
docker stats --no-stream --format \
'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.PIDs}}'
cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps
ufw status verbose
ss -lntp '( sport = :8080 or sport = :4317 or sport = :4318 )'
```
Пилот: каждые 15 минут — health, OTLP, RAM/swap, события KESL, firewall.
При деградации: `kesl-control --stop-task 1` . Не расширять исключения
вслепую.
## 9. Приёмочный EICAR
EICAR только с письменным разрешением Security. Образец не класть в git,
chat и evidence. Каталог не в docker volume, `/tmp` , `/opt/signoz/pours` .
``` sh
install -d -m 0700 -o root -g root /root/kesl-eicar-test
date -Is
kesl-control --get-task-state 1
curl -fsSL -o /root/kesl-eicar-test/eicar.com \
'https://secure.eicar.org/eicar.com'
chmod 0600 /root/kesl-eicar-test/eicar.com
ls -l /root/kesl-eicar-test
kesl-control -E --query -n 20 --reverse
```
Если OAS на запись молчит (как на пилоте ВМ1) — явный ODS:
``` sh
kesl-control --scan-file /root/kesl-eicar-test/eicar.com \
--action DisinfectDeleteIfNotPossible
kesl-control -E --query -n 20 --reverse
ls -la /root/kesl-eicar-test
```
Уборка (не весь Backup):
``` sh
kesl-control -B --query --reverse -n 20
kesl-control -B --mass-remove --query "DetectName == 'EICAR-Test-File'"
rm -rf /root/kesl-eicar-test
```
## 10. Приёмка стека и сужение egress
На ВМ3:
``` sh
systemctl is-active kesl docker
kesl-control --app-info
kesl-control --get-task-state 1
kesl-control --get-task-state 6
kesl-control --get-schedule 6
cd /opt/signoz
./scripts/30-verify-signoz.sh
docker compose -f pours/deployment/compose.yaml ps
ufw status verbose
diff -u /root/kesl-install/ufw.before <( ufw status verbose) || true
ss -lntp '( sport = :8080 or sport = :4317 or sport = :4318 )'
free -h
swapon --show
df -hT / /opt /var/lib/docker
```
С ВМ1 повторить TCP `4317` . Слушатели `8080` только на `127.0.0.1` ,
`4317/4318` только на `192.168.0.5` . Сравнить UFW с baseline: новых
правил KESL быть не должно.
24 часа: без OOM/restart/unhealthy, hourly Update сам зелёный, диск
ClickHouse не упёрся в stop-порог.
После gates:
1. закрыть широкий internet egress окна установки;
2. оставить DNS/NTP и узкий allow-list Kaspersky из раздела 0.1;
3. не открывать ingress `8080/4317/4318` из интернета;
4. ISO/DEB из `/var/lib/han-deploy/incoming` и `/root/kesl-install`
удалить только после переноса разрешённого evidence.
``` sh
rm -rf /root/kesl-eicar-test
# после копирования evidence:
# rm -rf /root/kesl-install
# rm -f /var/lib/han-deploy/incoming/049-16-d-01.iso \
# /var/lib/han-deploy/incoming/049-16-d-01.sig
```
Не выполнять reboot только ради KESL.
## 11. Evidence
Заполнить [`EVIDENCE.AVZ.ru.md` ](EVIDENCE.AVZ.ru.md ) без activation code,
secrets, file bytes, полного checksum и EICAR.
``` sh
systemctl is-active kesl
kesl-control --app-info --json
kesl-control --get-task-state 1
kesl-control --get-settings 1
kesl-control --get-schedule 6
kesl-control -E --query -n 100 --reverse --json
cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps
```
## 12. Rollback
Сначала минимально обратимое:
``` sh
kesl-control --stop-task 1
```
Если KESL не отвечает:
``` sh
systemctl stop kesl
```
`apt-get purge kesl` — только по решению approver. Затем:
``` sh
systemctl daemon-reload
cd /opt/signoz
./scripts/30-verify-signoz.sh
docker compose -f pours/deployment/compose.yaml ps
ufw status verbose
ss -lntp '( sport = :8080 or sport = :4317 or sport = :4318 )'
```
Запрещено: `docker compose down -v` , `docker volume prune` ,
`docker system prune --volumes` , удаление volumes ClickHouse/PostgreSQL,
правка `pours/` или смена firewall ради обхода KESL.
После rollback повторить OTLP с ВМ1 и зафиксировать incident.
## 13. Эксплуатационный режим
- Update (ID 6): каждый час; нужен постоянный узкий egress к KLServers.
- File Threat Protection (ID 1): постоянно,
`DisinfectDeleteIfNotPossible` , `ScanArchived=No` .
- ODS: по согласованию в низкую нагрузку; не полный диск и не volumes БД.
- ContainerScan: не использовать при текущей лицензии.
- Ежедневно: лицензия, task 1 `Started` , дата баз, ошибки KESL, health
SigNoz, свободное место `/opt` .
- После upgrade KESL/kernel/Docker: повтор пилота и evidence delta.
Обновление образов SigNoz (`20-deploy-signoz.sh` ) — отдельное break-glass
окно; его egress к Docker Hub/GitHub не заменяет allow-list KESL.