Агент: - ssh: sshd_config(.d), ключи хоста, authorized_keys root и пользователей - system: весь /etc/ufw и /etc/default/ufw, /etc/sysctl.conf, /etc/hosts, свои файлы в /etc/cron.d (пакетные отсекаются через dpkg -S) - certs: /etc/letsencrypt, /root/.acme.sh; xui: сертификаты по путям из базы - docker: daemon.json и логины в registry; telegraf: /etc/default/telegraf - caddy: бинарник бэкапится, если Caddy собран с плагинами - units: свои systemd-юниты с состоянием enabled/active и drop-in *.service.d - etc: изменённые конфиги любых пакетов (dpkg conffiles) и свои файлы в /etc, кроме привязанного к железу и облаку - в манифесте: часовой пояс, swap, вручную поставленные пакеты; версия apt-пакета в строке категории - предупреждения: программы юнитов вне бэкапа, каталоги /opt и /usr/local/bin без категории, контейнеры без compose Restore: - часовой пояс, swap-файл, доустановка вручную поставленных пакетов - свои юниты включаются и запускаются как на старом сервере Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
198 lines
7.4 KiB
YAML
198 lines
7.4 KiB
YAML
# Встроенный каталог категорий. Переопределяется конфигом клиента в веб-морде:
|
||
# категория с тем же name заменяется целиком, `- {name: X, disabled: true}` отключает её.
|
||
|
||
auto_compose: true
|
||
|
||
exclude:
|
||
- "*.swp"
|
||
|
||
categories:
|
||
- name: system
|
||
type: files
|
||
paths:
|
||
- /etc/ufw # правила, before/after.rules (NAT, форвардинг), /etc/ufw/sysctl.conf
|
||
- /etc/default/ufw
|
||
- /var/spool/cron/crontabs # crontab root (sudo crontab -e) и пользователей
|
||
- /usr/local/sbin/ban.sh
|
||
- /etc/sysctl.conf # BBR, форвардинг и прочие правки ядра
|
||
- /etc/sysctl.d
|
||
- /etc/hosts
|
||
# свои задания в /etc/cron.d (пакетные пропускаются)
|
||
unowned: ["/etc/cron.d/*"]
|
||
post_restore:
|
||
- "ufw reload || true"
|
||
- "sysctl --system >/dev/null || true"
|
||
|
||
# SSH: ключи входа, ключи хоста (клиенты не увидят «host key changed») и конфиг sshd
|
||
# (порт, запрет паролей). После распаковки sshd проверяется и перезапускается.
|
||
- name: ssh
|
||
type: files
|
||
paths:
|
||
- /etc/ssh/sshd_config
|
||
- /etc/ssh/sshd_config.d
|
||
- /etc/ssh/ssh_host_*
|
||
- /root/.ssh/authorized_keys
|
||
- /home/*/.ssh/authorized_keys
|
||
restore_after: [system]
|
||
post_restore:
|
||
- "sshd -t && systemctl daemon-reload && (systemctl restart ssh.socket 2>/dev/null; systemctl restart ssh) || echo '!!! sshd: конфиг не прошёл проверку, оставлен старый процесс — проверьте sshd -t'"
|
||
|
||
# сертификаты, выпущенные вне Caddy: certbot и acme.sh (его использует x-ui для SSL панели)
|
||
- name: certs
|
||
type: files
|
||
paths: [/etc/letsencrypt, /root/.acme.sh]
|
||
|
||
- name: xui
|
||
type: xui
|
||
detect: [/usr/local/x-ui/x-ui]
|
||
paths:
|
||
- /etc/x-ui
|
||
- /root/cert
|
||
# свои geo-файлы (ipcheck.dat, discord-*.dat и т.п.): на них ссылается роутинг,
|
||
# без них Xray не стартует; штатные geo*.dat приходят с релизом 3x-ui
|
||
- /usr/local/x-ui/bin/*.dat
|
||
exclude:
|
||
- "/etc/x-ui/x-ui.db*"
|
||
- "/usr/local/x-ui/bin/geoip.dat"
|
||
- "/usr/local/x-ui/bin/geosite.dat"
|
||
- "/usr/local/x-ui/bin/geo*_IR.dat"
|
||
- "/usr/local/x-ui/bin/geo*_RU.dat"
|
||
- "*.bak"
|
||
service: x-ui
|
||
version_cmd: [/usr/local/x-ui/x-ui, -v]
|
||
install: xui
|
||
keep_binaries: [/usr/local/x-ui, /usr/bin/x-ui, /etc/systemd/system/x-ui.service]
|
||
|
||
# fail2ban: свои jail'ы (jail.local, jail.d/*.local) и IP-лимит 3x-ui (3x-ipl).
|
||
# Штатные filter.d/action.d ставит пакет — берём только файлы 3x-ui и свои *.local.
|
||
- name: fail2ban
|
||
type: systemd
|
||
detect: [/etc/fail2ban]
|
||
paths:
|
||
- /etc/fail2ban/jail.local
|
||
- /etc/fail2ban/jail.d
|
||
- /etc/fail2ban/fail2ban.local
|
||
- /etc/fail2ban/fail2ban.conf # 3x-ui включает в нём allowipv6
|
||
- /etc/fail2ban/filter.d/3x-ipl.conf
|
||
- /etc/fail2ban/action.d/3x-ipl.conf
|
||
- /etc/fail2ban/filter.d/*.local
|
||
- /etc/fail2ban/action.d/*.local
|
||
service: fail2ban
|
||
restore_after: [system, xui]
|
||
post_restore:
|
||
# jail 3x-ipl читает лог x-ui: без файла fail2ban не поднимет jail
|
||
- "if ls /etc/fail2ban/jail.d/3x-ipl* >/dev/null 2>&1; then mkdir -p /var/log/x-ui && touch /var/log/x-ui/3xipl.log /var/log/x-ui/3xipl-banned.log; fi"
|
||
|
||
- name: nebula
|
||
type: systemd
|
||
detect: [/etc/nebula]
|
||
paths: [/etc/nebula, /etc/systemd/system/nebula.service]
|
||
service: nebula
|
||
version_cmd: [/usr/local/bin/nebula, -version]
|
||
install: nebula
|
||
keep_binaries: [/usr/local/bin/nebula, /usr/local/bin/nebula-cert]
|
||
|
||
- name: caddy
|
||
type: systemd
|
||
detect: [/etc/caddy/Caddyfile]
|
||
paths: [/etc/caddy, /var/www, /var/lib/caddy/.local/share/caddy]
|
||
service: caddy
|
||
# Caddy с плагинами (xcaddy, caddy add-package) из apt не вернуть — тогда бэкапим бинарник
|
||
keep_binaries: [/usr/bin/caddy]
|
||
keep_binaries_if: "caddy list-modules --packages 2>/dev/null | grep -Eq 'Non-standard modules: [1-9]'"
|
||
|
||
- name: telegraf
|
||
type: systemd
|
||
detect: [/etc/telegraf]
|
||
paths: [/etc/telegraf, /etc/sudoers.d/telegraf, /etc/default/telegraf]
|
||
service: telegraf
|
||
|
||
# настройки демона docker (логи, MTU, IPv6) и логины в приватные registry
|
||
- name: docker
|
||
type: systemd
|
||
paths: [/etc/docker/daemon.json, /root/.docker/config.json]
|
||
service: docker
|
||
|
||
- name: sing-box-warp
|
||
type: systemd
|
||
detect: [/opt/sing-box-warp]
|
||
paths:
|
||
- /opt/sing-box-warp
|
||
- /etc/sing-box-warp
|
||
- /etc/systemd/system/sing-box-warp.service
|
||
- /etc/sysctl.d/99-sing-box-warp.conf
|
||
service: sing-box-warp
|
||
version_cmd: [/usr/local/bin/sing-box, version]
|
||
version_regex: 'version\s+(\S+)'
|
||
install: sing-box-extended
|
||
keep_binaries: [/usr/local/bin/sing-box]
|
||
ensure_dirs: [/var/cache/sing-box-warp]
|
||
|
||
- name: scripts
|
||
type: files
|
||
paths: [/var/scripts, /usr/local/bin/update-geosite.sh]
|
||
|
||
# Страховка: всё своё в /etc, не описанное выше, — изменённые конфиги любых пакетов
|
||
# (dpkg conffiles: nginx, limits.conf, journald и т.п.) и файлы, не принадлежащие
|
||
# ни одному пакету (ключи wireguard, свои конфиги). Привязанное к железу и облаку
|
||
# (сеть, диски, cloud-init, зеркала apt, загрузчик) исключено — на новом VPS оно своё.
|
||
- name: etc
|
||
type: files
|
||
modified_conffiles: true
|
||
unowned: ["/etc/*/*", "/etc/*/*/*"]
|
||
exclude:
|
||
- /etc/netplan
|
||
- /etc/network
|
||
- /etc/NetworkManager
|
||
- /etc/systemd/network
|
||
- /etc/systemd/system # юниты собирает категория units
|
||
- /etc/cloud
|
||
- /etc/landscape
|
||
- /etc/ubuntu-advantage
|
||
- /etc/apt
|
||
- /etc/udev
|
||
- /etc/fstab
|
||
- /etc/default/grub
|
||
- /etc/default/grub.d
|
||
- /etc/initramfs-tools
|
||
- /etc/iscsi
|
||
- /etc/lvm
|
||
- /etc/mdadm
|
||
- /etc/multipath
|
||
- /etc/dhcp
|
||
- /etc/alternatives
|
||
- /etc/apparmor.d/cache
|
||
- /etc/ssl/certs
|
||
- /etc/ssl/private/ssl-cert-snakeoil.key
|
||
- /etc/sudoers.d/90-cloud-init-users
|
||
- /etc/machine-id
|
||
- /etc/hostname
|
||
- /etc/resolv.conf
|
||
|
||
- name: pnvpanel
|
||
type: compose
|
||
dir: /opt/PnvPanel
|
||
|
||
- name: stoat
|
||
type: compose
|
||
dir: /opt/stoat
|
||
skip_services: [rabbit, redis]
|
||
heavy_paths: [data/minio]
|
||
|
||
- name: stoat-mbot
|
||
type: compose
|
||
dir: /opt/stoat-mbot
|
||
restore_after: [stoat]
|
||
|
||
- name: psiphon
|
||
type: compose
|
||
dir: /opt/psiphon
|
||
disabled: true
|
||
|
||
# Свои systemd-юниты, не описанные выше и не из пакетов, — с состоянием enabled/active,
|
||
# и drop-in переопределения пакетных юнитов (*.service.d/override.conf).
|
||
- name: units
|
||
type: units
|
||
unowned: ["/etc/systemd/system/*.service", "/etc/systemd/system/*.timer"]
|
||
paths: ["/etc/systemd/system/*.service.d", "/etc/systemd/system/*.timer.d"]
|