diff --git a/.gigacode/plans/firewall-policies.md b/.gigacode/plans/firewall-policies.md new file mode 100644 index 0000000..ddbf172 --- /dev/null +++ b/.gigacode/plans/firewall-policies.md @@ -0,0 +1,86 @@ +# План добавления управления policies в роль firewall + +## Текущее состояние + +Роль `roles/firewall` уже частично поддерживает политики firewalld: + +- ✅ Чтение конфигурации политик через `policy_reader` в `get_config.py` +- ✅ Сбор фактов политик в `firewall_lib_facts.py` +- ❌ Отсутствует реализация управления политиками в бэкендах: + - `OnlineAPIBackend` (D-Bus API для работающего firewalld) + - `InMemoryBackend` (для check_mode и diff) + - `OfflineCLIBackend` (firewall-offline-cmd) + +## Цель + +Добавить поддержку управления политиками (policies) аналогично зонам и сервисам. + +## Реализация + +### 1. Добавить параметры политики в `firewall_lib.py` + +**Список параметров для политики:** +- `policy` — имя политики +- `state` — `enabled`/`disabled`/`present`/`absent` +- `permanent` — boolean +- `runtime` — boolean + +**Компоненты политики:** +- `services` — список сервисов +- `ports` — список портов +- `icmp_blocks` — блокировка ICMP +- `forward_ports` — проброс портов +- `rich_rules` — rich-правила +- `ingress_zones` — зоны входа +- `egress_zones` — зоны выхода +- `target` — целевой таргет + +### 2. Реализация в `OnlineAPIBackend` + +Добавить методы: +- `set_policy()` — создание/удаление/настройка политики +- `set_policy_services()` +- `set_policy_ports()` +- `set_policy_icmp_blocks()` +- `set_policy_forward_port()` +- `set_policy_rich_rule()` +- `set_policy_source()` (для ingress/egress zones) + +### 3. Реализация в `InMemoryBackend` + +Добавить аналогичные методы для работы с in-memory конфигурацией. + +### 4. Реализация в `OfflineCLIBackend` + +Добавить методы через `firewall-offline-cmd`: +- `--new-policy`, `--delete-policy` +- `--policy= --add-service`, `--remove-service` +- `--policy= --add-port`, `--remove-port` +- и т.д. + +### 5. Обновить README.md + +Добавить секцию про управление политиками с примерами. + +## Пример использования + +```yaml +firewall: + - policy: internal-trust + state: enabled + permanent: true + services: + - ssh + - http + - https + ingress_zones: + - internal + egress_zones: + - dmz +``` + +## Порядок выполнения + +1. Обновить `library/firewall_lib.py` — добавить поддержку политик во все 3 бэкенда +2. Обновить `README.md` — добавить документацию по управлению политиками +3. Протестировать на виртуальной машине diff --git a/playbooks/mrwho/vm03-firewall.yml b/playbooks/mrwho/vm03-firewall.yml index 46f9f8b..1b44c42 100644 --- a/playbooks/mrwho/vm03-firewall.yml +++ b/playbooks/mrwho/vm03-firewall.yml @@ -42,6 +42,18 @@ - bgp - http - https + ports: + - 179/tcp + - 179/udp + - 443/tcp + - 443/udp + - 1790/tcp + - 1790/udp + - 5201/tcp + - 5201/udp + - 9443/tcp + - 33434-33534/udp + - zone: public state: disabled @@ -84,3 +96,11 @@ # zone: external # state: enabled # permanent: true + - policy: lan-to-wan + state: enabled + permanent: true + masquerade: true + ingress_zones: + - internal + egress_zones: + - public diff --git a/roles/firewall/library/firewall_lib.py b/roles/firewall/library/firewall_lib.py index 7f6b76d..f874127 100644 --- a/roles/firewall/library/firewall_lib.py +++ b/roles/firewall/library/firewall_lib.py @@ -272,14 +272,7 @@ options: type: str choices: ["replaced", "kept"] default: "kept" - includes: - description: - Services to include in this one. - required: false - type: list - elements: str - default: [] - online: +{"text": " includes:\n description:\n Services to include in this one.\n required: false\n type: list\n elements: str\n default: []\n policy:\n description:\n The policy name string.\n If the policy name is not given, then the default policy will be used.\n required: false\n type: str\n ingress_zone:\n description:\n List of ingress zone names.\n Traffic originating from these zones will be subject to this policy.\n required: false\n type: list\n elements: str\n default: []\n egress_zone:\n description:\n List of egress zone names.\n Traffic destined to these zones will be subject to this policy.\n required: false\n type: list\n elements: str\n default: []\n online:"} description: When true, use the D-Bus API to query the status from the running system. Otherwise, use firewall-offline-cmd(1). Offline mode is