feat: v2.0.0 — UFW backup, rollback, lock, rotation, cross-distro support

- Backup/restore UFW configuration alongside iptables rules
- Backup sysctl.conf before any modifications (preserves original)
- Auto-backup before every add, delete, flush operation
- Rollback partially applied rules on iptables errors
- Save and restore UFW DEFAULT_FORWARD_POLICY on flush/delete
- Rotate backups (max 20) and logs (max 1 MB) automatically
- Lock file to prevent concurrent script execution
- Port conflict detection warns when port is already in use
- Support 'both' protocol (TCP+UDP simultaneously)
- Cross-distro package manager detection (apt, dnf, yum, pacman)
- Strict IPv6 validation via python3/perl with safe fallback
- Replace deprecated -m state with -m conntrack --ctstate
- Trap EXIT/INT/TERM for clean shutdown
- Add 'update' command to self-update from repository
- Add 'uninstall' command with full cleanup and config restoration
- Persist rules cross-distro (netfilter-persistent, iptables-services, manual)
- Extract _apply_rule_core to eliminate rule-application duplication
- Show UFW and backup count in status, mark UFW backups in restore list
This commit is contained in:
arblark
2026-04-10 22:52:12 +03:00
parent b8dfc63246
commit dac6e6d092
2 changed files with 629 additions and 168 deletions
+46 -9
View File
@@ -23,18 +23,29 @@
## Возможности ## Возможности
- **Мультипротокольность** — UDP (WireGuard, AmneziaWG), TCP (VLESS, XRay, Reality, MTProto) - **Мультипротокольность** — UDP (WireGuard, AmneziaWG), TCP (VLESS, XRay, Reality, MTProto), режим `both` (TCP+UDP одновременно)
- **IPv4 и IPv6** — полная поддержка обоих стеков - **IPv4 и IPv6** — полная поддержка обоих стеков с точной валидацией адресов
- **Кастомные правила** — разные порты входа/выхода, любой протокол - **Кастомные правила** — разные порты входа/выхода, любой протокол
- **Пакетное создание** — диапазон портов за одну операцию - **Пакетное создание** — диапазон портов за одну операцию
- **Google BBR** — автоматическое ускорение TCP - **Google BBR** — автоматическое ускорение TCP
- **Бэкап / восстановление** — сохранение и откат конфигурации - **Бэкап / восстановление** — iptables, ip6tables и конфигурация UFW
- **Бэкап sysctl.conf** — оригинальная конфигурация сохраняется перед модификацией
- **Автобэкап** — перед каждым добавлением, удалением и сбросом правил
- **Ротация** — автоматическая очистка старых бэкапов (>20) и ротация лога (>1 MB)
- **Проверка доступности** — тест TCP-соединения к целевым серверам - **Проверка доступности** — тест TCP-соединения к целевым серверам
- **Проверка конфликтов портов** — предупреждение если порт уже используется локальным сервисом
- **CLI-режим** — управление без интерактивного меню (для скриптов и автоматизации) - **CLI-режим** — управление без интерактивного меню (для скриптов и автоматизации)
- **Логирование** — все действия записываются в `/var/log/cascad.log` - **Логирование** — все действия записываются в `/var/log/cascad.log`
- **Защита от дубликатов** — проверка перед добавлением правил - **Защита от дубликатов** — проверка перед добавлением правил
- **Автобэкап при сбросе** — невозможно случайно потерять конфигурацию - **Валидация ввода** — проверка IP-адресов (включая строгую проверку IPv6) и портов
- **Валидация ввода** — проверка IP-адресов и портов - **Откат при ошибке** — частично применённые правила автоматически удаляются
- **UFW-совместимость** — сохранение и восстановление оригинальной FORWARD policy
- **Lock-файл** — защита от одновременного запуска нескольких экземпляров
- **Обновление** — `cascad update` для обновления до последней версии
- **Удаление** — `cascad uninstall` для полного удаления с восстановлением конфигурации
- **Trap/Cleanup** — корректное завершение при прерывании (Ctrl+C)
- **Кросс-дистрибутив** — поддержка Debian/Ubuntu (apt), CentOS/Fedora (dnf/yum), Arch (pacman)
- **Современный conntrack** — использование `-m conntrack --ctstate` вместо устаревшего `-m state`
## Установка ## Установка
@@ -75,6 +86,9 @@ cascad add tcp 203.0.113.10 443
# Добавить правило с разными портами # Добавить правило с разными портами
cascad add udp 203.0.113.10 51820 51821 cascad add udp 203.0.113.10 51820 51821
# Добавить правило сразу для TCP и UDP
cascad add both 203.0.113.10 443
# Список правил # Список правил
cascad list cascad list
@@ -84,7 +98,7 @@ cascad del tcp 203.0.113.10 443 443
# Проверить доступность целей # Проверить доступность целей
cascad check cascad check
# Создать бэкап # Создать бэкап (iptables + UFW)
cascad backup cascad backup
# Восстановить из бэкапа # Восстановить из бэкапа
@@ -93,20 +107,41 @@ cascad restore
# Статус системы # Статус системы
cascad status cascad status
# Обновить скрипт
cascad update
# Сбросить все правила # Сбросить все правила
cascad flush cascad flush
# Полностью удалить
cascad uninstall
# Справка # Справка
cascad help cascad help
``` ```
## Версии
- **v2.0.0** — бэкап UFW, ротация, lock-файл, rollback, проверка конфликтов портов, `both` протокол, `update`, `uninstall`, кросс-дистрибутив, conntrack
- **v1.0.0** — базовая функциональность: NAT-перенаправление, бэкап iptables, CLI
Для установки конкретной версии:
```bash
# v1.0.0
bash <(curl -sL https://raw.githubusercontent.com/arblark/cascad/v1.0.0/cascad.sh)
# v2.0.0 (последняя)
bash <(curl -sL https://raw.githubusercontent.com/arblark/cascad/v2.0.0/cascad.sh)
```
## Требования ## Требования
- Linux (Ubuntu / Debian) - Linux (Debian/Ubuntu, CentOS/Fedora, Arch)
- root-доступ - root-доступ
- iptables - iptables
Зависимости (`iptables-persistent`, `netfilter-persistent`) устанавливаются автоматически при первом запуске. Зависимости устанавливаются автоматически при первом запуске.
## Структура файлов ## Структура файлов
@@ -114,7 +149,9 @@ cascad help
|---|---| |---|---|
| `/usr/local/bin/cascad` | Глобальная команда | | `/usr/local/bin/cascad` | Глобальная команда |
| `/var/log/cascad.log` | Лог действий | | `/var/log/cascad.log` | Лог действий |
| `/etc/cascad/backups/` | Бэкапы правил iptables | | `/etc/cascad/backups/` | Бэкапы правил iptables + UFW |
| `/etc/cascad/state` | Сохранённое состояние (оригинальные настройки) |
| `/var/run/cascad.lock` | Lock-файл |
## Лицензия ## Лицензия
+560 -136
View File
File diff suppressed because it is too large Load Diff