Files
EvoBGP/docs/firewall.md
T
Denozordec 947d1f0cc4
CI / changes (push) Successful in 11s
CI / commitlint (push) Has been skipped
CI / openapi (push) Successful in 29s
CI / web (push) Successful in 58s
CI / go (push) Successful in 1m20s
CI / bird2 (push) Successful in 18s
CI / release (push) Successful in 4m37s
feat(firewall): enhance blocklist handling and installation script
Updated the firewall scripts to improve blocklist handling by introducing a new method for fetching and parsing blocklist data using either `jq` or `python3`. Enhanced the installation script to ensure the presence of required dependencies and provided user guidance for post-approval actions. Additionally, improved logging for applied prefixes and total counts, ensuring better visibility into the firewall's operational status.
2026-07-08 21:45:32 +07:00

3.0 KiB
Raw Blame History

Firewall blocklist

Подсистема синхронизации blocklist на произвольные Linux-серверы через bash-скрипт и HTTP API.

Авторизация

  1. EnrollPOST /v1/firewall/enroll с заголовком X-EvoBGP-Seed (значение EVOBGP_BUNDLE_SEED_HEX на CP). Клиент генерирует токен evobgp_fw_* локально.
  2. Approve — operator в Web UI (/firewall → Запросы).
  3. SyncGET /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 после деплоя новой версии.

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.

После approve в UI выполните на сервере (или дождитесь timer):

sudo rm -f /var/lib/evobgp-firewall/last_hash
sudo /usr/local/sbin/evobgp-firewall.sh
sudo nft list table inet evobgp_blocklist

Для парсинга JSON нужен jq или python3 (install.sh ставит jq на Debian/Ubuntu при отсутствии).

Failover через speaker

При EVOBGP_FIREWALL_FAILOVER_ENABLED=1 на speaker-agent CP реплицирует состояние через POST /v1/agent/firewall-replicate. Клиенты используют тот же DNS-домен.

См. также access.md, remote-speakers.md.