# Встроенный каталог категорий. Переопределяется конфигом клиента в веб-морде: # категория с тем же 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 # свой агент не бэкапим: на новый сервер его ставит restore с новым токеном - /etc/backup-agent - 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"]