policy
This commit is contained in:
parent
1c65215df2
commit
e26380719d
3 changed files with 107 additions and 8 deletions
86
.gigacode/plans/firewall-policies.md
Normal file
86
.gigacode/plans/firewall-policies.md
Normal 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. Протестировать на виртуальной машине
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue