CI / changes (push) Successful in 11s
CI / commitlint (push) Has been skipped
CI / openapi (push) Successful in 25s
CI / web (push) Successful in 43s
CI / go (push) Successful in 1m2s
CI / bird2 (push) Successful in 16s
CI / release (push) Successful in 3m41s
Enhanced the firewall enrollment process by implementing better error handling for HTTP responses, specifically addressing database schema issues. Updated the documentation to include migration requirements for PostgreSQL and clarified the steps to take if enrollment fails due to an outdated schema. This ensures users are better informed about necessary actions during deployment.
43 lines
2.6 KiB
Markdown
43 lines
2.6 KiB
Markdown
# Firewall blocklist
|
||
|
||
Подсистема синхронизации blocklist на произвольные Linux-серверы через bash-скрипт и HTTP API.
|
||
|
||
## Авторизация
|
||
|
||
1. **Enroll** — `POST /v1/firewall/enroll` с заголовком `X-EvoBGP-Seed` (значение `EVOBGP_BUNDLE_SEED_HEX` на CP). Клиент генерирует токен `evobgp_fw_*` локально.
|
||
2. **Approve** — operator в Web UI (`/firewall` → Запросы).
|
||
3. **Sync** — `GET /v1/firewall/blocklist` с `Authorization: Bearer <client_token>`.
|
||
|
||
## Политика block/accept
|
||
|
||
- **`block`** — добавить префиксы выбранного BGP community в kernel blocklist.
|
||
- **`accept`** — не блокировать префиксы этого community.
|
||
- **Community** — правило применяется к префиксам с этим `community_id` в опубликованной revision; пустое значение («Все») — ко всем communities.
|
||
- **Default** — accept (пустой blocklist без явных `block`).
|
||
|
||
Порядок: сначала per-server overrides клиента, затем tenant-default. Для каждого community берётся первое подходящее правило по приоритету.
|
||
|
||
Справочник communities: Web UI → Справочники, или модули с привязкой community к префиксам.
|
||
|
||
## Установка на сервер
|
||
|
||
Публичные URL (без API-ключа, вне `WEBUI_IP_WHITELIST` Traefik): `GET /v1/firewall/install.sh`, `GET /v1/firewall/sync-script`, `POST /v1/firewall/enroll`. Всегда **HTTPS**.
|
||
|
||
Требуется миграция **`000027_firewall`** в PostgreSQL (применяется при старте API с актуальным бинарём). Если enroll отвечает `503` / `database schema outdated` — перезапустите `evobgp-api` / `evobgp-all` после деплоя новой версии.
|
||
|
||
```bash
|
||
curl -fsSL https://<api>/v1/firewall/install.sh | \
|
||
EVOBGP_CP_URL=https://<api> \
|
||
EVOBGP_SEED=<bundle_seed_hex> \
|
||
EVOBGP_CLIENT_NAME="web-01" \
|
||
bash
|
||
```
|
||
|
||
Файлы: `/etc/evobgp/firewall.conf`, `/usr/local/sbin/evobgp-firewall.sh`, systemd timer `evobgp-firewall.timer`.
|
||
|
||
## Failover через speaker
|
||
|
||
При `EVOBGP_FIREWALL_FAILOVER_ENABLED=1` на speaker-agent CP реплицирует состояние через `POST /v1/agent/firewall-replicate`. Клиенты используют тот же DNS-домен.
|
||
|
||
См. также [access.md](access.md), [remote-speakers.md](remote-speakers.md).
|