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
|
- 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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue