3.6 KiB
3.6 KiB
systemd and firewall
Цель документа
Зафиксировать базовый systemd/firewall слой под новую install model.
systemd: Hysteria2
Базовые требования:
- отдельный unit
hysteria-server.service - отдельный пользователь
hysteria - автозапуск после reboot
- restart policy для падений
Базовый ExecStart:
/usr/local/bin/hysteria server -c /etc/hysteria/config.yaml
systemd: HY2XS admin
Базовые требования:
- отдельный unit
hy2xs-admin.service - запуск от
User=hy2xs-admin, не от root - отдельный install dir
- отдельный data dir
- отдельный жизненный цикл от Hysteria
Рекомендуемый hardening:
NoNewPrivileges=truePrivateTmp=trueUMask=0077ProtectHome=trueProtectSystem=strictReadOnlyPaths=/etc/hysteria/config.yamlReadWritePaths=/var/lib/hy2xs-admin /var/log/hy2xsRestrictAddressFamilies=AF_INET AF_UNIXSystemCallArchitectures=nativeLockPersonality=true
Для hysteria-server.service также обязателен sandbox-контур:
ProtectSystem=strictReadOnlyPaths=/etc/hysteria/config.yamlReadWritePaths=/var/lib/hysteriaCapabilityBoundingSet=CAP_NET_BIND_SERVICE
Важно:
- HY2XS admin не должен запускаться как часть unit Hysteria
- unit-файлы не должны быть склеены
Базовая firewall-модель
Нужно разрешить:
- UDP-порт Hysteria2
- TCP-порт SSH
- established/related traffic
IPv4-only policy:
- использовать
table ip, а неtable inet; - IPv6 правила не добавлять;
- UI работает только на
127.0.0.1в production baseline.
Firewall modes
HY2XS_FIREWALL_ENABLED=true:
- orchestrator управляет baseline nftables.
HY2XS_FIREWALL_ALLOW_TAKEOVER=false:
- safe default.
- существующий не-HY2XS
/etc/nftables.confблокирует install/reconfigure (fail-fast).
HY2XS_FIREWALL_ALLOW_TAKEOVER=true:
- явный destructive takeover.
- использовать только после ручной проверки хоста.
HY2XS_FIREWALL_ENABLED=false или --skip-firewall:
- оператор полностью управляет firewall вручную.
После staged-проверки можно включать default policy drop.
Порядок применения
- Подготовить candidate-файл (
/etc/nftables.d/hy2xs.nft). - Проверить
nft -c -f. - Создать rollback timer.
- Применить candidate и проверить SSH/Hysteria/UI.
- При успехе отменить rollback timer.
- При провале — rollback.
Что не делаем
В baseline не делаем:
- port hopping
- сложную динамическую firewall-логику
- смешение UI-портов и публичного транспортного порта в один firewall-контур без правил
Инварианты
Система считается корректной, если:
- Hysteria и HY2XS admin работают отдельными systemd unit
- Hysteria слушает нужный UDP-порт
- SSH не ломается после применения firewall
- firewall-политика не противоречит listen policy
- после reboot оба нужных сервиса стартуют корректно