This commit is contained in:
a.kazantsev 2026-07-11 00:52:57 +03:00
parent 1c65215df2
commit e26380719d
3 changed files with 107 additions and 8 deletions

View file

@ -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=<name> --add-service`, `--remove-service`
- `--policy=<name> --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. Протестировать на виртуальной машине

View file

@ -42,6 +42,18 @@
- bgp - bgp
- http - http
- https - 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 - zone: public
state: disabled state: disabled
@ -84,3 +96,11 @@
# zone: external # zone: external
# state: enabled # state: enabled
# permanent: true # permanent: true
- policy: lan-to-wan
state: enabled
permanent: true
masquerade: true
ingress_zones:
- internal
egress_zones:
- public

View file

@ -272,14 +272,7 @@ options:
type: str type: str
choices: ["replaced", "kept"] choices: ["replaced", "kept"]
default: "kept" default: "kept"
includes: {"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:
Services to include in this one.
required: false
type: list
elements: str
default: []
online:
description: description:
When true, use the D-Bus API to query the status from the running system. When true, use the D-Bus API to query the status from the running system.
Otherwise, use firewall-offline-cmd(1). Offline mode is Otherwise, use firewall-offline-cmd(1). Offline mode is