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.
3.0 KiB
Firewall blocklist
Подсистема синхронизации blocklist на произвольные Linux-серверы через bash-скрипт и HTTP API.
Авторизация
- Enroll —
POST /v1/firewall/enrollс заголовкомX-EvoBGP-Seed(значениеEVOBGP_BUNDLE_SEED_HEXна CP). Клиент генерирует токенevobgp_fw_*локально. - Approve — operator в Web UI (
/firewall→ Запросы). - 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 после деплоя новой версии.
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.