Align firewall examples with symmetric destination filtering

This commit is contained in:
evgeny committed 2026-10-21 19:53:50 +02:00
1 parent 2a2a0ee267
commit 4f627bddff
3 files changed
+17 -7

No files matched your search

+9 -3
View File
@@ -153,10 +153,14 @@ general=info # общая информация
```ini
[firewall]
allow=all # разрешить всё (bypass)
allow=192.168.1.0/24 # разрешить подсеть
allow=192.168.1.10 # разрешить весь IP
allow=10.0.0.1:80 # разрешить конкретный IP:порт
```
Фильтр основного TUN проверяет IP и TCP/UDP-порт назначения одинаково в обоих направлениях.
Без разрешений весь трафик этого интерфейса запрещён; ответы требуют отдельных разрешений.
CIDR-подсети не поддерживаются. Ошибочное правило отменяет загрузку нового конфига.
### 3.7. `[nat]` — EIM NAT
```ini
@@ -553,11 +557,13 @@ dump=trace
```ini
[firewall]
allow=all # всё разрешено
allow=10.0.0.0/8 # разрешить подсеть
allow=10.0.0.5 # разрешить весь IP
allow=192.168.1.5:22 # разрешить IP:порт
```
По умолчанию без секции `[firewall]` — фильтрация выключена.
Без секции `[firewall]` весь входящий и исходящий трафик основного TUN запрещён.
`allow=IP` и `allow=IP:0` разрешают все протоколы IP; `allow=IP:port` — TCP/UDP указанного порта.
Для фрагментов IPv4 нужен весь IP либо `allow=all`. NAT и прокси используют отдельные TUN интерфейсы.
### 7.3. Проброс портов
+2 -2
View File
@@ -68,7 +68,7 @@ free_config(cfg);
| `[client:name]` | `parse_client()` | `link` (формат: `server_name:ip:port`), `peer_public_key`, `keepalive` |
| `[network:name]` | `parse_network()` | `id` (hex), `pubkey`, `signing_key` |
| `[routing]` | inline | `route_subnet`, `my_subnet` |
| `[firewall]` | `parse_firewall_rule()` | `allow` (IP:port или `all` для bypass) |
| `[firewall]` | `parse_firewall_rule()` | `allow=IPv4[:port]` или `allow=all`; порт 0–65535, 0 разрешает весь IP; CIDR запрещён |
| `[control]` | `parse_control()` | `ip`, `port`, `allow` (подсеть) |
| `[allowed_keys]` | inline | `allow_all`, `key` (64 hex) |
| `[nat]` | `parse_nat()` | `tun_ifname`, `tun_ip`, `nat_via`, `port_start`, `port_end`, `forward` (proto:ip:in_port:ext_port) |
@@ -98,6 +98,6 @@ free_config(cfg);
| `parse_sockaddr(addr, port, sockaddr)` | Преобразует адрес+порт в `sockaddr_storage` через `getaddrinfo` |
| `parse_address_and_port(str, sockaddr)` | Разбирает строку `ip:port` → вызов `parse_sockaddr` |
| `get_netif_index(ifname)` | Получает индекс сетевого интерфейса через `if_nametoindex` |
| `parse_firewall_rule(rule_str, global)` | Парсит `allow=IP[:port]` или `all` |
| `parse_firewall_rule(rule_str, global)` | Строго разбирает `allow=IPv4[:port]` или `all`; ошибка/неизвестная опция firewall отменяет весь новый конфиг |
| `parse_control_allow(rule_str, global)` | Парсит `allow=IP[/CIDR]` |
| `config_ini_hex(hex_str, binary, len)` | Общий INI-код: проверяет весь HEX до декодирования |
+6 -2
View File
@@ -154,13 +154,17 @@ my_subnet=10.23.1.0/24
|---|---|
| `allow` | `all` — разрешить всё. Или `IP` / `IP:port` (можно несколько) |
По умолчанию: deny all (если нет allow=all).
Основной TUN проверяется в обе стороны одинаково по IPv4 и TCP/UDP-порту назначения.
По умолчанию всё запрещено, включая отсутствие секции. Ответные пакеты требуют своих разрешений.
`allow=IP` или `allow=IP:0` разрешает весь IP, включая ICMP и фрагменты IPv4; правило порта фрагменты не разрешает.
CIDR-подсети не поддерживаются. Ошибочная опция или правило отменяет загрузку нового конфига.
Отдельные TUN интерфейсы NAT и прокси под эти правила не попадают.
Пример:
```ini
[firewall]
allow=192.168.1.100
allow=10.0.0.0/8:443
allow=10.0.0.50:443
```
#### `[control]` — сервер мониторинга