Теория
BGP
BGP-4 (RFC 4271) — междоменный протокол маршрутизации между автономными системами (AS), path-vector: вместе с префиксом передаются атрибуты и AS_PATH. Работает поверх TCP/179. В отличие от IGP, BGP не выбирает "кратчайший путь", а применяет policy.
Decision Process (RFC 4271 §9.1)
Три фазы:
- Phase 1 — вычисление
LOCAL_PREF(degree of preference) для полученных маршрутов на основе import-policy. - Phase 2 — выбор best path для каждого destination, установка в
Loc-RIB. - Phase 3 — распространение маршрутов соседям через export-policy в
Adj-RIBs-Out.
Best-path в реальных реализациях включает RFC decision process и vendor-specific tie-breakers. Упрощённая практическая цепочка: highest LOCAL_PREF → shortest AS_PATH → lowest ORIGIN → MED по правилам вендора/policy → eBGP > iBGP → lowest IGP cost → tie-break.
RFC 8212: безопасные дефолты для eBGP
RFC 8212 (2017) обновляет RFC 4271: на eBGP без явной import/export policy маршруты не должны импортироваться или экспортироваться. Защита от случайных route leak из-за permissive defaults вендоров.
Route leak (RFC 9234)
Route leak — распространение маршрутов с нарушением business relationships (provider/customer/peer). Типичные причины:
- отсутствие prefix-filter / AS-path filter;
- неконсистентная export-policy;
- ошибочная роль на eBGP-сессии.
RFC 9234 вводит BGP Roles (Provider / Customer / RS / RS-Client / Peer) и Only to Customer (OTC) атрибут. При поддержке на обеих сторонах соседи согласуют роль в OPEN, а OTC помогает предотвращать/детектировать часть route leak-сценариев.
RPKI Origin Validation (RFC 6811)
RPKI присваивает маршруту состояние Valid / Invalid / NotFound на основе ROA (Route Origin Authorization). Что делает:
- проверяет, что origin AS уполномочен анонсировать данный префикс;
- не валидирует корректность AS_PATH (для этого — BGPsec, RFC 8205, почти не deployed);
- не заменяет prefix-filtering и роли.
Связанные RFC: RFC 8481 (clarifications), RFC 8893 (export). Типичная политика: Invalid → reject, Valid/NotFound — дальше по local policy и бизнес-риску.
Практика
1. Явно задайте import/export policy на каждом eBGP-соседе
Минимальный шаблон (vendor-agnostic идея):
neighbor <peer>:
import-policy: ONLY_EXPECTED_PREFIXES + RPKI_POLICY
export-policy: ONLY_OWN_AND_ALLOWED_CUSTOMER_PREFIXES
Если policy не задана, сессия не должна обмениваться маршрутами (модель RFC 8212).
2. Добавьте защитные лимиты на прием префиксов
Из практик BGP OPSEC (RFC 7454):
- ограничить
max-prefixна сессию; - фильтровать по префиксам/AS-path там, где это применимо;
- использовать community-политику осознанно, без "прозрачного транзита всего подряд".
3. Включите RPKI origin validation в policy
Базовый подход:
Invalid: reject;Valid: prefer (или пропускать с приоритетом policy);NotFound: обрабатывать отдельно по рисковой модели.
4. Настройте мониторинг route leak-индикаторов
Контрольные сигналы:
- внезапный рост количества принятых маршрутов от соседа;
- неожиданная смена origin AS для критичных префиксов;
- резкое изменение AS_PATH и транзитных направлений.
Вывод
Надежный BGP строится не на "дефолтах", а на явной политике.
База для production:
explicit import/export policy(RFC 8212),- фильтры и лимиты (RFC 7454),
- route leak prevention/detection через роли (RFC 9234),
- RPKI как слой валидации origin там, где операционная модель это поддерживает.
Ссылки
- RFC 4271 — BGP-4
- RFC 8212 — Default EBGP Route Propagation Behavior without Policies
- RFC 9234 — Route Leak Prevention and Detection Using Roles
- RFC 7454 — BGP Operations and Security
- RFC 6811 — BGP Prefix Origin Validation
- RFC 8481 — Clarifications to BGP Origin Validation
- RFC 8893 — RPKI Origin Validation for BGP Export