Перейти к содержанию

Модуль 3. Эксплуатация инфраструктуры

Исходное состояние — снимок module3-start комплекта 201–206. Команды внутри ВМ выполняются от root. Сначала проверьте доменный вход, DNS, время и межофисную связь по руководству модуля 2.

Статус: инфраструктура, ГОСТ HTTPS от доменного пользователя, вход irpoadmin, копирование и восстановление проверены после выключения всего комплекта. Кибер Бэкап 18 активирован, Active Protection включён. Создан согласованный module3-complete. Границы проверки — в приёмке, актуальные результаты — в журнале.

1. Импорт пользователей: BR-SRV

ISO уже подключён к виртуальному CD-ROM, но монтирование вручную не сохраняется после перезагрузки:

mkdir -p /mnt/additional
mountpoint -q /mnt/additional || mount -o ro /dev/sr0 /mnt/additional
ls /mnt/additional

Фактическое имя — Users.csv, кодировка cp1252, разделитель ;. В файле 300 записей и пять OU. Логин формируется как firstname.lastname в нижнем регистре; коллизий в этом файле нет.

Перенесите на BR-SRV файл module3-import-users.py, изучите его и выполните:

python3 /root/module3-import-users.py
samba-tool ou list
samba-tool user show malachi.alexander

Скрипт создаёт OU, затем пользователей через samba-tool user create, сохраняет пароль из CSV, имя, фамилию, должность, телефон и адресные атрибуты. ldbmodify дополняет адрес; base64 в LDIF позволяет корректно передавать специальные символы. Повторный запуск пропускает создание уже существующих объектов. Он не сбрасывает пароли существующих пользователей.

На HQ-CLI:

id malachi.alexander
ssh malachi.alexander@127.0.0.1

Введите P@ssw0rd1 из CSV. Внутри сеанса выполните id и hostname -f. Проверка id сама по себе подтверждает только поиск учётной записи; успешная аутентификация нужна отдельно. Для графического входа завершите сеанс и выберите другого пользователя на экране входа.

2. Центр сертификации и ГОСТ HTTPS

2.1. Выпуск сертификатов: HQ-SRV

apt-get update
apt-get install -y openssl openssl-gost-engine
control openssl-gost enabled
openssl list -public-key-algorithms | grep -i gost

В выбранном серверном образе пакет называется openssl-gost-engine. На рабочей станции после обновления OpenSSL поддержка уже присутствовала; наличие проверяйте командами control openssl-gost и openssl ciphers -v ALL, а не только именем пакета.

Создайте УЦ один раз, не заменяя ключи действующего УЦ:

umask 077
mkdir -p /root/exam-ca
cd /root/exam-ca
test ! -e ca.key || { echo 'УЦ уже существует'; exit 1; }
openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out ca.key
openssl req -new -x509 -key ca.key -md_gost12_256 -days 30 \
  -subj '/C=RU/O=AU-TEAM/CN=AU-TEAM Training GOST CA' \
  -addext 'basicConstraints=critical,CA:TRUE' \
  -addext 'keyUsage=critical,keyCertSign,cRLSign' -out ca.crt
for name in web docker; do
  openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out "$name.key"
  openssl req -new -key "$name.key" -md_gost12_256 \
    -subj "/C=RU/O=AU-TEAM/CN=$name.au-team.irpo" -out "$name.csr"
  cat > "$name.ext" <<EOF
basicConstraints=critical,CA:FALSE
keyUsage=critical,digitalSignature,keyEncipherment,keyAgreement
extendedKeyUsage=serverAuth
subjectAltName=DNS:$name.au-team.irpo
EOF
  openssl x509 -req -in "$name.csr" -CA ca.crt -CAkey ca.key -CAcreateserial \
    -days 30 -md_gost12_256 -extfile "$name.ext" -out "$name.crt"
done
chmod 600 *.key

Полученные файлы:

Файл Назначение
ca.key, ca.crt Закрытый ключ и открытый сертификат учебного УЦ
web.key, web.crt Сервер web.au-team.irpo
docker.key, docker.crt Сервер docker.au-team.irpo

Алгоритм подписи — ГОСТ Р 34.10-2012, ключ 256 бит; хеш — ГОСТ Р 34.11-2012. В серверных сертификатах есть SAN с полным DNS-именем, EKU serverAuth, срок — 30 дней. Ключ УЦ остаётся на HQ-SRV.

cd /root/exam-ca
openssl verify -CAfile ca.crt web.crt docker.crt
openssl x509 -in web.crt -noout -dates -subject -ext subjectAltName

Ожидается OK для обоих сертификатов. Эталонные сертификаты выпущены 02.10.2026 и истекают 01.11.2026. При новом проведении выпускайте новые сертификаты с актуальным сроком.

2.2. nginx: ISP

Передайте на ISP только web.key, web.crt, docker.key, docker.crt и публичный ca.crt. Разместите в /etc/nginx/tls; каталог — 0700, ключи — 0600. Для преподавателя передача через Guest Agent автоматизирована в module3-deploy-tls.py.

control openssl-gost enabled

В каждом существующем блоке server замените listen 80; на listen 443 ssl; и добавьте, например для web:

ssl_certificate /etc/nginx/tls/web.crt;
ssl_certificate_key /etc/nginx/tls/web.key;
ssl_protocols TLSv1.2;
ssl_ciphers GOST2012-KUZNYECHIK-KUZNYECHIKOMAC:GOST2012-MAGMA-MAGMAOMAC;

Для docker используйте его пару файлов. Сохраните прежние proxy_pass и Basic Auth для web. Добавьте один HTTP-блок перенаправления:

server {
    listen 80;
    server_name web.au-team.irpo docker.au-team.irpo;
    return 301 https://$host$request_uri;
}
nginx -t
systemctl restart nginx

TLS завершается на ISP: именно он предъявляет браузеру серверный сертификат. Соединения ISP → серверы продолжают использовать настроенные в модуле 2 HTTP-backend.

2.3. Доверие и проверка: HQ-CLI

Скопируйте публичный ca.crt и выполните:

install -m 644 ca.crt /etc/pki/ca-trust/source/anchors/au-team-gost.crt
update-ca-trust
control openssl-gost enabled
openssl s_client -connect web.au-team.irpo:443 \
  -servername web.au-team.irpo \
  -CAfile /etc/pki/ca-trust/source/anchors/au-team-gost.crt \
  -verify_return_error </dev/null

Ожидается Verify return code: 0 (ok) и ГОСТ-набор шифров. Повторите для docker.au-team.irpo. На эталоне согласован GOST2012-MAGMA-MAGMAOMAC.

КриптоПро на HQ-CLI. Используйте предоставленный владельцем linux-amd64.tgz (CSP 5.0.13820). Под root:

tar -xzf linux-amd64.tgz
cd linux-amd64
./install.sh kc1 lsb-cprocsp-pkcs11 cprocsp-rdr-gui-gtk
/opt/cprocsp/sbin/amd64/cpconfig -license -view
/opt/cprocsp/bin/amd64/certmgr -inst -store mRoot \
  -file /etc/pki/ca-trust/source/anchors/au-team-gost.crt

Импортируется только ваш учебный УЦ; перед подтверждением сверяйте отпечаток с CA на HQ-SRV. Для текущего УЦ SHA1: 857D3332623BB1546123495FDB75CC21FBAAB088. Установка доверия только в OpenSSL недостаточна. КриптоПро установился в демонстрационном режиме; срок проверяйте командой выше, для нового проведения соблюдайте условия лицензии.

Запустите Яндекс Браузер в обычном, не приватном профиле. В «Настройки → Системные → Сеть» должна быть включена поддержка ГОСТ. Откройте оба HTTPS-сайта; при первом запросе на передачу соединения КриптоПро нажмите «Продолжить» (Proceed). Это согласие на ГОСТ, а не обход ошибки доверия. Для web введите WEB / P@ssw0rd. Проверены HTTP 200, содержимое DemoTest/Exam1 и TLS 1.2 с издателем AU-TEAM Training GOST CA, без ignore_https_errors. Скриншоты сохранены в evidence/module3/. Проверка повторена после перезапуска в браузере от доменного hquser1 (обычный профиль, виртуальный X-сеанс).

Не считайте curl -k, отключение проверки сертификатов или успешный OpenSSL-handshake подтверждением выполнения браузерного пункта задания. На эталоне оба сайта проверены также браузером, запущенным от доменного hquser1.

3. GRE поверх IPsec: HQ-RTR и BR-RTR

Выбрана связка strongSwan + IKEv2, так как она доступна в Альт и шифрует существующий GRE без изменения адресов OSPF. Режим IPsec — transport: защищается GRE между провайдерскими адресами маршрутизаторов.

apt-get install -y strongswan

На HQ-RTR используйте left=172.16.1.2, right=172.16.2.2; на BR-RTR поменяйте их местами. Создайте /etc/strongswan/ipsec.conf:

config setup
    uniqueids=yes
conn gre-office
    type=transport
    reqid=1
    keyexchange=ikev2
    authby=psk
    left=172.16.1.2
    right=172.16.2.2
    leftprotoport=gre
    rightprotoport=gre
    ike=aes256-sha256-modp2048!
    esp=aes256-sha256!
    dpdaction=restart
    dpddelay=30s
    auto=start

В /etc/strongswan/ipsec.secrets на обоих маршрутизаторах:

172.16.1.2 172.16.2.2 : PSK "Exam-IPsec-2026-SharedKey"
chmod 600 /etc/strongswan/ipsec.secrets

На обоих концах запишите mtu 1400 в /etc/net/ifaces/gre1/iplink. В этой версии etcnet параметр MTU=1400 в options не применялся после загрузки; iplink — штатный файл команд настройки канала. Затем:

ip link set gre1 mtu 1400
systemctl enable --now strongswan-starter
systemctl restart strongswan-starter
strongswan statusall
vtysh -c 'show ip ospf neighbor'

В Альт команда называется strongswan, а не ipsec. Дождитесь ESTABLISHED и INSTALLED, TRANSPORT, reqid 1. OSPF должен оставаться Full; MD5-аутентификация, router-id и area 0 сохраняются. MTU уменьшен для служебных заголовков GRE/ESP.

С HQ-SRV выполните ping 192.168.0.2. На ISP, через который проходит зашифрованный трафик:

tcpdump -ni eth1 'host 172.16.1.2 and host 172.16.2.2 and (ip proto 50 or ip proto 47)'

При передаче трафика должны быть видны ESP-пакеты; открытый GRE на провайдерском участке появляться не должен. Параметры и обоснование выбора внесите в отчёт.

4. Межсетевой экран

На двух офисных маршрутизаторах создайте /etc/nftables/exam-filter.nft. Ниже пример HQ-RTR; на BR-RTR замените 172.16.2.2 на 172.16.1.2:

table inet exam_filter {
 chain input {
  type filter hook input priority filter; policy accept;
  iifname "eth0" ip saddr 172.16.2.2 ip protocol gre ipsec in reqid 1 accept
  iifname "eth0" ip protocol gre counter drop
  ct state established,related accept
  iifname "eth0" ip saddr 172.16.2.2 udp dport {500,4500} accept
  iifname "eth0" ip saddr 172.16.2.2 ip protocol esp accept
  iifname "eth0" ip protocol icmp accept
  iifname "eth0" counter drop
 }
 chain forward {
  type filter hook forward priority filter; policy accept;
  ct state established,related accept
  iifname "eth0" ct status dnat tcp dport {80,8080,2026} accept
  iifname "eth0" ip protocol icmp accept
  iifname "eth0" counter drop
 }
}

Подключите include "/etc/nftables/exam-filter.nft" к существующему /etc/nftables/nftables.nft после таблицы NAT и flush ruleset, не удаляя DNAT/NAT модуля 2.

Правила применяются к входу с eth0, то есть от ISP:

  1. Разрешается GRE только после IPsec-дешифрования с reqid 1; прочий GRE отбрасывается до проверки established.
  2. Разрешаются ответы на установленные соединения и связанные ICMP-ошибки.
  3. От соседа разрешаются IKE UDP 500/4500 и ESP; разрешается ICMP.
  4. В forward разрешаются только опубликованные DNAT-порты HTTP-приложений и SSH 2026, ответы на соединения и ICMP.
  5. Остальной вход из ISP отбрасывается. Исходящие HTTP/HTTPS/DNS/NTP работают с ответами через conntrack.
nft -c -f /etc/nftables/nftables.nft
systemctl reload nftables
nft list table inet exam_filter

Проверьте с ISP: 172.16.1.2:8080, 172.16.2.2:8080 и SSH DNAT доступны; новые подключения к портам 22 и 9100 офисных маршрутизаторов блокируются. Проверьте выход клиента в Интернет и сохранность OSPF.

5. Виртуальный PDF-принтер

На HQ-SRV:

apt-get install -y cups cups-pdf
systemctl enable --now cups
cupsctl --share-printers
lpinfo -m | grep -i pdf
lpadmin -p ExamPDF -E -v cups-pdf:/ -m CUPS-PDF.ppd
lpadmin -p ExamPDF -o printer-is-shared=true

В /etc/cups/cupsd.conf в существующий <Location /> после Allow @LOCAL добавьте:

Allow 192.168.200.0/255.255.255.224

HQ-CLI находится в другой подсети, поэтому одного @LOCAL недостаточно. В проверенной сборке используйте полный вид маски, как выше. Перезапустите cups.

На HQ-CLI:

systemctl enable --now cups
lpadmin -p ExamPDF -E -v ipp://192.168.100.2/printers/ExamPDF -m everywhere
lpadmin -d ExamPDF
lpstat -d
echo 'Exam PDF print check' | lp

На сервере проверьте lpstat -W completed и появление PDF в /var/spool/cups-pdf/ANONYMOUS/. Задание из сеанса пользователя также должно завершаться. При No IPP attributes сначала проверьте HTTP-код доступа к http://192.168.100.2:631/printers/ExamPDF: код 403 означает ошибку ACL CUPS.

6. Централизованные журналы

На HQ-SRV установите rsyslog. Конфигурация /etc/rsyslog.d/20-exam.conf:

module(load="imtcp")
template(name="ExamRemote" type="string" string="/opt/%HOSTNAME%/messages.log")
ruleset(name="ExamRemoteRules") {
 if $syslogseverity <= 4 then {
  action(type="omfile" dynaFile="ExamRemote" createDirs="on" dirCreateMode="0750" fileCreateMode="0640")
 }
 stop
}
input(type="imtcp" port="514" ruleset="ExamRemoteRules")

Чем меньше числовое значение severity, тем серьёзнее событие: warning=4, err=3. Условие <=4 включает warning и более серьёзные сообщения. HQ-SRV только принимает их, не пересылает самому себе.

На HQ-RTR, BR-RTR, BR-SRV:

apt-get install -y rsyslog rsyslog-journal

Пакет rsyslog-journal сам добавляет загрузку imjournal; повторно объявлять модуль не нужно. Без него rsyslog запустится, но не будет получать локальные сообщения journald.

В /etc/rsyslog.d/20-exam.conf на клиентах:

*.warning action(type="omfwd" target="192.168.100.2" port="514" protocol="tcp" action.resumeRetryCount="-1" action.resumeInterval="5" queue.type="LinkedList" queue.size="10000")

Только на BR-RTR добавьте в действие Device="gre1". При загрузке OSPF ещё может не установить маршрут к HQ-SRV: без привязки клиент открывает соединение с исходным адресом внешнего интерфейса, обратный трафик попадает под NAT и доставка зависает. Привязка к GRE не позволяет использовать обходной путь через ISP; очередь и повторные попытки дождутся маршрута OSPF.

На всех четырёх машинах:

rsyslogd -N1
systemctl enable --now rsyslog
systemctl restart rsyslog

Отправьте с каждого клиента logger -p user.warning exam-warning и logger -p user.info exam-info. На HQ-SRV должны появиться /opt/hq-rtr/messages.log, /opt/br-rtr/messages.log, /opt/br-srv/messages.log с warning; info в этих журналах быть не должно.

Создайте /etc/logrotate.d/exam-remote:

/opt/*.log /opt/*/*.log /opt/*/*/*.log {
 weekly
 minsize 10M
 rotate 4
 compress
 missingok
 notifempty
 sharedscripts
 postrotate
  /bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
 endscript
}

Эти маски покрывают все каталоги журналов данного стенда (один уровень устройств); при добавлении более глубокой структуры расширьте их. minsize требует одновременно недельного срока и минимального размера; size 10M заменил бы временное условие.

logrotate -d /etc/logrotate.d/exam-remote

7. Мониторинг: Prometheus, node_exporter, Grafana

На HQ-SRV установите prometheus prometheus-node_exporter grafana; на BR-SRV — prometheus-node_exporter. Запустите exporter на обоих серверах:

systemctl enable --now prometheus-node_exporter
curl -fs http://127.0.0.1:9100/metrics | head

На HQ-SRV /etc/prometheus/prometheus.yml:

global:
  scrape_interval: 15s
scrape_configs:
  - job_name: servers
    static_configs:
      - targets: ['192.168.100.2:9100']
        labels: {host: hq-srv}
      - targets: ['192.168.0.2:9100']
        labels: {host: br-srv}

Для воспроизводимой панели перенесите module3-monitoring.sh на HQ-SRV как /root/module3-monitoring.sh, изучите и выполните bash /root/module3-monitoring.sh. Скрипт полностью входит в комплект руководства, не обращается к Proxmox и создаёт provisioning Grafana, панель из трёх запросов ниже и виртуальный хост Apache. Файлы YAML/JSON — 0644, каталог панели — 0755. Не запускайте его вместо установки пакетов выше.

Компонент Адрес/порт Назначение
node_exporter серверы:9100 Метрики Linux
Prometheus 127.0.0.1:9090 Сбор каждые 15 секунд
Grafana 127.0.0.1:3000 Панель и аутентификация
Apache HQ-SRV:80, Host mon.au-team.irpo Прокси к Grafana, ACL для сетей HQ

Grafana: admin / P@ssw0rd. DNS HQ-SRV получает address=/mon.au-team.irpo/192.168.100.2. Apache сохраняет приложение HQ-SRV виртуальным хостом по умолчанию, чтобы не нарушить обращение от ISP.

admin_password в grafana.ini действует при первом создании базы, а не при каждом запуске. Если пакет уже создал базу, установите учебный пароль штатной CLI, указав тот же каталог данных, что и служба:

runuser -u grafana -- grafana cli --homepath /usr/share/grafana --config /etc/grafana/grafana.ini \
  --configOverrides 'cfg:default.paths.data=/var/lib/grafana cfg:default.paths.logs=/var/log/grafana' \
  admin reset-admin-password 'P@ssw0rd'

Команда также включена в provisioning-скрипт. Prometheus должен слушать 127.0.0.1:9090 (параметр --web.listen-address в /etc/sysconfig/prometheus), а не все интерфейсы.

Панель HQ and BR servers показывает:

  • ЦП: 100 * (1 - avg by(host) (rate(node_cpu_seconds_total{mode="idle"}[2m])));
  • занятую ОП: node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes;
  • занятое место корневой ФС: node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}.
curl -fs http://127.0.0.1:9090/api/v1/targets
systemctl is-active prometheus grafana-server httpd2

Оба target должны иметь health: up. На HQ-CLI откройте http://mon.au-team.irpo, войдите и откройте панель. Графики ЦП появятся после накопления как минимум двух выборок. С BR-SRV и ISP HTTP-запрос с Host mon.au-team.irpo должен получать 403. Порты 3000/9090 не слушают внешние адреса.

Выбор ПО обоснован доступностью в репозитории Альт, готовым exporter для Linux и воспроизводимым provisioning панели. Запишите компоненты, порты, интервал сбора и ограничения доступа в отчёт.

8. Инвентаризация через Ansible: BR-SRV

Исходный файл в /mnt/additional/playbook/ содержит задачу copy, записывающую текст в /tmp удалённого компьютера. Для задания её нужно оформить как playbook и перенести запись на управляющий BR-SRV.

Создайте /etc/ansible/PC-INFO и /etc/ansible/get_hostname_address.yml:

---
- name: Inventory HQ computers
  hosts: hq-srv:hq-cli
  gather_facts: true
  tasks:
    - name: Save computer identity on BR-SRV
      ansible.builtin.copy:
        dest: "/etc/ansible/PC-INFO/{{ ansible_facts.hostname }}.yml"
        content: "{{ {'hostname': ansible_facts.hostname, 'ip_address': ansible_facts.default_ipv4.address} | to_nice_yaml }}"
        mode: '0644'
      delegate_to: localhost

gather_facts получает фактические параметры клиента; delegate_to: localhost сохраняет файл на BR-SRV. Фильтр to_nice_yaml формирует корректный YAML.

cd /etc/ansible
LC_ALL=C.UTF-8 ansible-playbook get_hostname_address.yml
cat PC-INFO/*.yml

Два файла: hq-srv.yml с 192.168.100.2, hq-cli.yml с 192.168.200.10.

9. Защита SSH: HQ-SRV

apt-get install -y fail2ban python3-module-systemd

В /etc/fail2ban/jail.d/exam-sshd.local:

[sshd]
enabled = true
port = 2026
backend = systemd
maxretry = 3
findtime = 600
bantime = 60
banaction = nftables-multiport
systemctl enable --now fail2ban
systemctl restart fail2ban
fail2ban-client status sshd

Пакет Python для systemd обязателен: иначе журнал содержит No module named 'systemd'. Для проверки сделайте с HQ-CLI три SSH-подключения на порт 2026 с ошибочным паролем, по одной попытке в соединении (NumberOfPasswordPrompts=1). На сервере ожидается Currently banned: 1 и адрес 192.168.200.10; через минуту — 0. Управлять сервером во время проверки удобно через консоль Proxmox.

10. Резервное копирование

Установка и управление

Используется Кибер Бэкап 18.5.40801: для полностью Linux-стенда версия 17.4 не обеспечивает Active Protection. Установщик и контрольная сумма указаны в материалах. Начинайте с чистой установки 18.5. Перед установкой на HQ-SRV:

apt-get install -y gcc make kernel-headers-modules-6.12
useradd -m irpoadmin
passwd irpoadmin
usermod -aG wheel irpoadmin
chmod 700 /root/CyberBackup_18.5_64-bit.x86_64
/root/CyberBackup_18.5_64-bit.x86_64 -a \
  -i AcronisCentralizedManagementServer,BackupAndRecoveryAgent,MySQLAgentFeature

Пароль irpoadmin — P@ssw0rd. Заголовки должны соответствовать текущему ядру (uname -r). На HQ-SRV модули собраны; проверяйте lsmod | grep -E 'snapapi26|file_protector', dkms status и systemctl is-active active-protection. Не обновляйте ядро вслепую перед экзаменом.

На HQ-CLI создайте mkdir -p /backup, установите BackupAndRecoveryAgent,StorageServer тем же дистрибутивом:

chmod 700 /root/CyberBackup_18.5_64-bit.x86_64
/root/CyberBackup_18.5_64-bit.x86_64 -a -i BackupAndRecoveryAgent,StorageServer

Регистрацию выполните после активации сервера и добавления irpoadmin в UI и PAM (ниже). Для роли узла хранения дисковые снимки самого HQ-CLI не используются; предупреждения о SnapAPI/FileProtector HQ-CLI не означают отказ файлового хранения.

В Яндекс Браузере на HQ-CLI откройте http://192.168.100.2:9877:

  1. Войдите локальным root сервера управления.
  2. В «Настройки → Лицензии» нажмите «Запустить пробную версию» и подтвердите. Ожидается «Кибер Бэкап 18 Расширенный», а не 17. На эталоне срок до 02.11.2026; новый период определяется датой штатной активации и условиями производителя.
  3. В «Настройки → Учётные записи» переименуйте организацию в irpo.
  4. «Добавить учётную запись → Локальная машина»: найдите irpoadmin, нажмите плюс в строке, выберите «Администратор», затем «Добавить». Выделение строки само по себе пользователя не добавляет.

На Альт PAM Кибер Бэкап дополнительно разрешает вход только пользователям из /etc/security/acronisagent.conf. После добавления роли под root разрешите требуемую учётную запись, не отключая фильтрацию:

grep -qxF irpoadmin /etc/security/acronisagent.conf || echo irpoadmin >> /etc/security/acronisagent.conf
chmod 644 /etc/security/acronisagent.conf

Выйдите из консоли и войдите как irpoadmin. На эталоне проверены вход с чистыми cookies и доступ к административному управлению учётными записями. На HQ-CLI зарегистрируйте обе службы (пароль будет виден в командной строке, это допустимо только для изолированного учебного стенда):

for service in mms asn; do
  /usr/lib/Acronis/RegisterAgentTool/RegisterAgent -o register \
    -a 192.168.100.2 -u irpoadmin -p 'P@ssw0rd' -s "$service"
done

Ожидается Success, HTTP 200. В «Настройки → Узлы хранения» выберите HQ-CLI, «Добавить хранилище»: имя irpo-backup, путь /backup.

План /etc

«Устройства → HQ-SRV → Включить защиту»: выберите «Файлы/папки», в источнике отметьте флажок каталога /etc со всеми подкаталогами. Назначение — irpo-backup; при запросе учётных данных укажите локального администратора HQ-CLI. Сохраните план и запустите полное копирование.

Проверка на HQ-SRV:

acrocmd list plans --output=raw
acrocmd list tasks --output=raw
acrocmd list archives --loc=bsp://hq-cli.au-team.irpo/irpo-backup \
  --credentials=root,P@ssw0rd --output=raw

Статус задания должен быть succeeded. Восстановите /etc/hostname из полученного архива в отдельный каталог /root/restore-check; сравните с оригиналом. На эталоне такая проверка выполнена успешно.

Историческая диагностика нативного MySQL/MariaDB (не обязательный шаг)

У 17.4 есть существенная особенность: штатное копирование MySQL/MariaDB выполняется в составе всей машины с поддержкой приложений. Восстановление MySQL из управляемого хранилища не поддерживается (документация производителя).

Для диагностики на том же HQ-CLI был выделен /backup/mysql, опубликованный по NFS только для HQ-SRV, и смонтирован в /mnt/mysql-backup. Для нового прохождения не создавайте этот обратный NFS: оба действующих плана используют управляемое irpo-backup.

Нативный тестовый план использовал «Вся машина», переключатель MySQL/MariaDB и /mnt/mysql-backup. Дисковое задание завершилось успешно, но база не появилась в вариантах восстановления. Установленная MariaDB — 12.3.3, её поддержку выбранным агентом не удалось подтвердить.

Особенность Альт: MariaDB исходно работает в chroot, сообщая агенту пути /db/, /mysql.sock. Для корректного представления путей вне chroot выполнена настройка module3-mysql-compat.sh: предварительный SQL-дамп, control mysqld-chroot disabled, перезапуск и проверка приложения. Физический каталог данных остаётся /var/lib/mysql/db.

Проверенный вариант: логическое копирование webdb

На HQ-SRV создайте предварительную команду:

install -d -m 700 /var/backups/webdb
cat > /usr/local/sbin/exam-backup-webdb <<'EOF'
#!/bin/bash
set -euo pipefail
unset LD_LIBRARY_PATH LD_PRELOAD
export PATH=/usr/sbin:/usr/bin:/sbin:/bin HOME=/root
umask 077
tmp=$(mktemp /var/backups/webdb/webdb.sql.XXXXXX)
trap 'rm -f "$tmp"' EXIT
mariadb-dump --single-transaction --routines --events --triggers --hex-blob webdb > "$tmp"
test -s "$tmp"
mv "$tmp" /var/backups/webdb/webdb.sql
EOF
chmod 700 /usr/local/sbin/exam-backup-webdb
/usr/local/sbin/exam-backup-webdb

Согласованный SQL-дамп записывается атомарно. Каталог — 0700, файл — 0600. В данном приложении таблица InnoDB; при наличии MyISAM требуется дополнительное обеспечение согласованности.

В плане HQ-SRV MySQL webdb выберите «Файлы/папки» → /var/backups/webdb/, назначение irpo-backup. В «Параметры резервного копирования → Команды до или после» включите команду до:

  • программа /usr/local/sbin/exam-backup-webdb;
  • рабочий каталог /root;
  • прерывать копирование при ошибке команды.

Скрипт очищает LD_LIBRARY_PATH и LD_PRELOAD: иначе агент передаёт свои устаревшие библиотеки, и mariadb-dump выдаёт ошибку GLIBCXX_3.4.29 not found. Сохраните план, запустите полную копию и дождитесь succeeded.

Из полученного файлового архива восстановите /var/backups/webdb/webdb.sql в /root/restore-webdb, а не поверх рабочей базы:

acrocmd list archives --loc=bsp://hq-cli.au-team.irpo/irpo-backup \
  --credentials=root,P@ssw0rd --output=raw
read -r -p 'Имя архива плана webdb из списка: ' ARCHIVE
mkdir -p /root/restore-webdb
acrocmd recover file --loc=bsp://hq-cli.au-team.irpo/irpo-backup \
  --credentials=root,P@ssw0rd --arc="$ARCHIVE" \
  --file=/var/backups/webdb/webdb.sql --target=/root/restore-webdb --overwrite=never
cmp /var/backups/webdb/webdb.sql /root/restore-webdb/webdb.sql
mariadb -e 'CREATE DATABASE webdb_restore_check'
mariadb webdb_restore_check < /root/restore-webdb/webdb.sql
mariadb -N -e 'SELECT * FROM webdb_restore_check.employees'

На эталоне дамп совпал побайтово, таблица восстановилась с записью DemoTest. Это логическое копирование MySQL, не нативное восстановление средствами MySQL-агента; способ явно укажите в отчёте и согласуйте для экзамена. Старый дисковый архив и тестовый NFS-каталог сохранены для диагностики.

Имя архива определяйте по сведениям плана/точки восстановления в консоли: время создания архива может остаться старым после новых копий, а похожие имена принадлежат разным планам. Для повторного теста используйте новый каталог и новое имя БД; overwrite=never намеренно не заменяет уже восстановленные файлы. После изменения рабочей базы сравнивайте её состояние на момент копии, а не произвольно более поздние данные.

Защита от шифровальщиков и версия 18

Документация 17.4 ограничивает Active Protection ОС Windows. Для стенда полностью на Альт используется версия 18: драйвер file_protector на HQ-SRV с ядром 6.12 успешно собрался. После тестового обновления 17 → 18 пробная лицензия 17 сохранилась, но не разрешила новые операции версии 18. Поэтому инструкция выше начинается с чистой установки.

Владелец предоставил официальный дистрибутив 18.5.40801 из личного кабинета. Чистая установка сервера управления показала «Запустить пробную версию»: штатно активирована «Кибер Бэкап 18 Расширенный» до 02.11.2026, отдельный ключ не нужен. Начинать новый стенд следует сразу с 18.5, а не с обновления пробной версии 17.

В «Планы → Создать план» добавьте HQ-SRV, включите Active Protection с действием «Отменить изменения, используя кэш». Для отдельного плана защиты отключите резервное копирование. Сохраните как HQ-SRV Active Protection; два плана копирования остаются отдельными. На эталоне подтверждены применённая enabled-политика, RansomwareProtectionEnabled=true, действие AlertTerminateRecover, загруженный file_protector и работающая active-protection.service. Разрушительный тест шифровальщика не выполнялся.

После чистой установки заново добавьте irpoadmin, переименуйте организацию и зарегистрируйте HQ-CLI. Агент/узел хранения регистрируется штатной утилитой /usr/lib/Acronis/RegisterAgentTool/RegisterAgent с -o register -a 192.168.100.2, отдельно с -s mms и -s asn; используйте действующую административную учётную запись. Ранее созданный узел сохранил управляемое хранилище и архивы: не создавайте второе хранилище поверх того же /backup, если консоль сообщает, что оно уже подключено.

Планы версии 17 после чистой установки 18 в эталоне воссозданы через интерфейс. Экспорт acrocmd export plan не подошёл для импорта в новую консоль; предварительные снимки и архив настроек сохранены. Оба новых задания проверены: succeeded, hostname и SQL-дамп восстановлены с совпадающим содержимым, база webdb_restore18_check содержит исходную запись DemoTest.

Приёмка резервного копирования

  • Две зарегистрированные машины, организация irpo, администратор irpoadmin.
  • Два плана, успешные задания, файлы на HQ-CLI.
  • Восстановление /etc/hostname в отдельный каталог с совпадающим содержимым.
  • Восстановление webdb под другим именем с проверкой таблицы employees.
  • Проверка фактической доступности Active Protection на выбранной версии/ОС: наличие продукта само по себе не означает включённую защиту от шифровальщиков.

11. Завершение и отчёт

Запишите параметры IPsec и мониторинга, добавьте подтверждения из графического сеанса и результаты остальных проверок. Имя файла: ФамилияУчастникаМодуль3. Правила оформления и состав разделов — в подготовке отчёта.

Перед выключением комплекта остановите задания резервного копирования и размонтируйте /mnt/mysql-backup на HQ-SRV: теперь HQ-SRV также является NFS-клиентом HQ-CLI. Затем выключайте HQ-CLI перед HQ-SRV, чтобы корректно завершить исходное NFS-монтирование /mnt/nfs.

После запуска повторите проверки. Снимок module3-complete создаётся только после закрытия всех незавершённых пунктов.