BGP를 활용한 DDoS 트래픽 제어: RTBH와 Flowspec 구현 가이드

BGP 보안 설정 및 RPKI 검증 기초

BGP 기반의 보안 기술을 적용하기 전에, RPKI(자원 공개 키 인프라)를 활용한 경로 검증 및 정책 설정의 기본 구조를 살펴봅니다. 다음 구성은 IOS 및 IOS XR 플랫폼에서 ROA(경로 출처 인증) 상태를 기반으로 로컬 선호도(Local Preference)를 조정하고 유효하지 않은 경로를 드롭하는 예시입니다.


! IOS 환경 구성
RouterA(config)# router bgp 65001
RouterA(config-router)# address-family ipv4 unicast
RouterA(config-router-af)# neighbor 172.16.1.5 route-map ROA_CHECK in

! IOS XR 환경 구성
RP/0/0/CPU0:RouterD(config)# route-policy ROA_CHECK
RP/0/0/CPU0:RouterD(config-rpl)# if validation-state is valid then
RP/0/0/CPU0:RouterD(config-rpl-if)# set local-preference 250
RP/0/0/CPU0:RouterD(config-rpl-if)# pass
RP/0/0/CPU0:RouterD(config-rpl-if)# exit
RP/0/0/CPU0:RouterD(config-rpl)# if validation-state is invalid then
RP/0/0/CPU0:RouterD(config-rpl-if)# drop 
RP/0/0/CPU0:RouterD(config-rpl-if)# exit
RP/0/0/CPU0:RouterD(config-rpl)# else
RP/0/0/CPU0:RouterD(config-rpl-else)# set local-preference 150
RP/0/0/CPU0:RouterD(config-rpl-else)# pass
RP/0/0/CPU0:RouterD(config-rpl-else)# exit
RP/0/0/CPU0:RouterD(config-rpl)# exit
RP/0/0/CPU0:RouterD(config)# router bgp 65001
RP/0/0/CPU0:RouterD(config-bgp)# neighbor 172.16.4.6
RP/0/0/CPU0:RouterD(config-bgp-nbr)# address-family ipv4 unicast
RP/0/0/CPU0:RouterD(config-bgp-nbr-af)# route-policy ROA_CHECK in
RP/0/0/CPU0:RouterD(config-bgp-nbr-af)# commit 

RPKI 검증이 완료된 후에는 BGP 세션을 재설정하거나 RPKI 캐시를 새로 고쳐路由 정책이 최신 상태를 반영하도록 해야 합니다.

BGP RTBH(원격 트리거 블랙홀) 필터링

DDoS 완화 및 RTBH 개념

RTBH는 DDoS 공격 트래픽을 소스와 인접한 네트워크 엣지에서 신속하게 폐기하는 사후 대응 메커니즘입니다. CEF(思科快速轉發) 또는 하드웨어 기반 빠른 경로를 통해 패킷이 드롭되므로, 필터링을 수행하는 라우터의 CPU 부하를 최소화할 수 있습니다.

목적지 기반 RTBH 구성 절차

목적지 IP를 기반으로 트래픽을 블랙홀로 유도하는 방식은 다음과 같은 단계로 구성됩니다.

  1. Null0 인터페이스로 향하는 정적 라우트 생성: RFC 5737의 TEST-NET-2(예: 198.51.100.0/24) 대역 등을 사용하여, 해당 목적지로 향하는 트래픽이 로컬에서 즉시 폐기되도록 합니다.
  2. 라우트 맵(Route-Map) 또는 RPL 정책 생성: 다음 홉을 1단계의 IP로 설정하고, BGP 커뮤니티를 no-export로 지정하여 외부 AS로 전파되지 않도록 합니다.
  3. BGP 정적 라우트 재배포: 2단계에서 생성한 정책을 적용하여 정적 라우트를 BGP로 전파합니다.
  4. 대상 서버에 대한 정적 라우트 주입: 실제 공격 발생 시, 피해 대상 서버의 /32 호스트 라우트에 태그를 할당하여 블랙홀로 유도합니다.

! IOS 환경 구성
RouterC(config)# route-map BLACKHOLE_REDIRECT permit 10
RouterC(config-route-map)# match tag 888
RouterC(config-route-map)# set ip next-hop 198.51.100.1
RouterC(config-route-map)# set origin igp
RouterC(config-route-map)# set community no-export
RouterC(config-route-map)# set local-preference 250
RouterC(config-route-map)# exit
RouterC(config)# router bgp 65001
RouterC(config-router)# address-family ipv4 unicast
RouterC(config-router-af)# redistribute static route-map BLACKHOLE_REDIRECT
! 공격 탐정 후 대상 서버 IP에 대한 정적 라우트 추가
RouterC(config)# ip route 10.20.30.40 255.255.255.255 null0 tag 888

! IOS XR 환경 구성
RP/0/0/CPU0:RouterC(config)# route-policy BLACKHOLE_REDIRECT
RP/0/0/CPU0:RouterC(config-rpl)# if tag eq 888 then
RP/0/0/CPU0:RouterC(config-rpl-if)# set next-hop 198.51.100.1
RP/0/0/CPU0:RouterC(config-rpl-if)# set community (no-export)
RP/0/0/CPU0:RouterC(config-rpl-if)# set origin igp
RP/0/0/CPU0:RouterC(config-rpl-if)# set local-preference 250
RP/0/0/CPU0:RouterC(config-rpl-if)# exit
RP/0/0/CPU0:RouterC(config-rpl)# exit
RP/0/0/CPU0:RouterC(config)# router bgp 65001
RP/0/0/CPU0:RouterC(config-bgp)# address-family ipv4 unicast 
RP/0/0/CPU0:RouterC(config-bgp-af)# redistribute static route-policy BLACKHOLE_REDIRECT
RP/0/0/CPU0:RouterC(config-bgp-af)# commit
! 공격 탐정 후 대상 서버 IP에 대한 정적 라우트 추가
RP/0/0/CPU0:RouterC(config)# router static
RP/0/0/CPU0:RouterC(config-static)# address-family ipv4 unicast
RP/0/0/CPU0:RouterC(config-static-afi)# 10.20.30.40/32 null0 tag 888
RP/0/0/CPU0:RouterC(config-static-afi)# commit

uRPF(단방향 역경로 전송)를 통한 소스 기반 방어

목적지 기반 RTBH는 서버로 들어오는 트래픽만 막을 뿐, 좀비 PC가 보내는 송신 트래픽은 제어할 수 없습니다. 이때 uRPF를 사용하면 소스 IP의 FIB(Forwarding Information Base) 존재 여부를 확인하여 위변조된 소스 IP를 가진 패킷을 엣지에서 드롭할 수 있습니다.


! IOS 환경 (Loose 모드 적용)
RouterA(config)# interface GigabitEthernet 0/0/1
RouterA(config-if)# ip verify unicast source reachable-via any

! IOS XR 환경
RP/0/0/CPU0:RouterC(config)# interface GigabitEthernet 0/0/0/0
RP/0/0/CPU0:RouterC(config-if)# ipv4 verify unicast source reachable-via any
RP/0/0/CPU0:RouterC(config-if)# commit

BGP Flowspec을 통한 세밀한 트래픽 제어

Flowspec 아키텍처 및 매개변수

RFC 5575에 정의된 BGP Flowspec은 트래픽 흐름에 대한 매칭 규칙과 조치를 BGP NLRI(네트워크 층 도달 가능성 정보) 및 확장 커뮤니티로 캡슐화하여 전파합니다. 소스/목적지 IP, 포트, 프로토콜, TCP 플래그 등 다양한 조건을 조합하여 DDoS 완화, 트래픽 엔지니어링, Bogon 필터링 등에 활용됩니다.

Flowspec은 주로 컨트롤러(서버)와 클라이언트(BGP Speaker) 구조로 동작합니다. 컨트롤러가 NLRI를 주입하면, 클라이언트는 이를 수신하여 하드웨어 forwarding plane에 ACL이나 QoS 정책으로 프로그래밍합니다. 일반적으로 IOS XR이 컨트롤러 역할을 수행하며, IOS는 클라이언트 또는 라우트 리플렉터로 제한됩니다.

Flowspec 구성 및 정책 적용

컨트롤러에서 특정 소스와 목적지를 타겟팅하여 트래픽을 드롭하는 Flowspec 정책을 구성하는 절차입니다.


! 1. BGP Flowspec 피어링 및 라우트 리플렉터 구성 (IOS XR 컨트롤러)
RP/0/0/CPU0:ControllerR(config)# router bgp 65001
RP/0/0/CPU0:ControllerR(config-bgp)# bgp router-id 192.168.3.3
RP/0/0/CPU0:ControllerR(config-bgp)# address-family ipv4 flowspec
RP/0/0/CPU0:ControllerR(config-bgp-af)# exit
RP/0/0/CPU0:ControllerR(config-bgp)# neighbor 192.168.2.2
RP/0/0/CPU0:ControllerR(config-bgp-nbr)# remote-as 65001
RP/0/0/CPU0:ControllerR(config-bgp-nbr)# update-source Loopback0
RP/0/0/CPU0:ControllerR(config-bgp-nbr)# address-family ipv4 flowspec
RP/0/0/CPU0:ControllerR(config-bgp-nbr-af)# route-reflector-client
RP/0/0/CPU0:ControllerR(config-bgp-nbr-af)# commit

! 2. Flowspec 클라이언트 활성화 (IOS)
RouterB(config)# router bgp 65001
RouterB(config-router)# bgp router-id 192.168.2.2
RouterB(config-router)# neighbor 192.168.3.3 remote-as 65001
RouterB(config-router)# neighbor 192.168.3.3 update-source Loopback0
RouterB(config-router)# address-family ipv4 flowspec
RouterB(config-router-af)# neighbor 192.168.3.3 activate
RouterB(config-router-af)# neighbor 192.168.3.3 next-hop-self
RouterB(config-router-af)# end

! 3. 컨트롤러에서 트래픽 매칭 클래스 및 정책 맵 생성
RP/0/0/CPU0:ControllerR(config)# class-map type traffic match-all DDOS_MITIGATION_CLASS
RP/0/0/CPU0:ControllerR(config-cmap)# match source-address ipv4 10.10.1.1/32
RP/0/0/CPU0:ControllerR(config-cmap)# match destination-address ipv4 10.10.5.5/32
RP/0/0/CPU0:ControllerR(config-cmap)# exit
RP/0/0/CPU0:ControllerR(config)# policy-map type pbr DROP_MALICIOUS_TRAFFIC
RP/0/0/CPU0:ControllerR(config-pmap)# class DDOS_MITIGATION_CLASS
RP/0/0/CPU0:ControllerR(config-pmap-c)# drop
RP/0/0/CPU0:ControllerR(config-pmap-c)# exit
RP/0/0/CPU0:ControllerR(config-pmap)# class class-default
RP/0/0/CPU0:ControllerR(config-pmap-c)# exit
RP/0/0/CPU0:ControllerR(config-pmap)# exit

! 4. Flowspec 주소 패밀리와 PBR 정책 연결
RP/0/0/CPU0:ControllerR(config)# flowspec
RP/0/0/CPU0:ControllerR(config-flowspec)# address-family ipv4 
RP/0/0/CPU0:ControllerR(config-flowspec-af)# service-policy type pbr DROP_MALICIOUS_TRAFFIC
RP/0/0/CPU0:ControllerR(config-flowspec-af)# exit  
RP/0/0/CPU0:ControllerR(config-flowspec)# exit
RP/0/0/CPU0:ControllerR(config)# commit

! 5. 클라이언트에서 모든 인터페이스에 Flowspec 로컬 설치 활성화
RouterB(config)# flowspec
RouterB(config-flowspec)# local-install interface-all
RouterB(config-flowspec)# address-family ipv4

RTBH와 Flowspec 비교 및 구성 주의사항

비교 항목 BGP RTBH BGP Flowspec
동작 방식 특정 목적지 또는 소스 IP로의 트래픽을 엣지에서 일괄 폐기 다양한 패킷 헤더 필드를 기반으로 세밀하게 매칭하여 드롭,限速, 리디렉션 등 수행
주요 사용 사례 대규모 볼류메트릭 DDoS 공격으로 인한 대역폭 포화 방어 애플리케이션 계층 공격 방어, 특정 포트/프로토콜 기반의 정밀 트래픽 제어
구성 복잡도 낮음 (정적 라우트 및 기본 BGP 정책 활용) 높음 (Class-map, Policy-map, Flowspec 주소 패밀리 연동 필요)
유연성 IP 단위 필터링에 제한적 다중 조건 조합을 통한 높은 유연성 제공

구성 시 핵심 주의사항

  • RTBH IP 대역 선택: Null0로 향하는 정적 라우트의 다음 홉 IP는 실제 네트워크와 충돌하지 않도록 RFC 5737(TEST-NET) 등 예약된 대역을 반드시 사용해야 합니다.
  • 커뮤니티 속성 관리: RTBH 경로가 자체 AS를 벗어나 상류 제공자로 전파되는 것을 방지하기 위해 no-export 또는 blackhole 커뮤니티 설정을 엄격히 적용해야 합니다.
  • Flowspec 장비 호환성: 컨트롤러와 클라이언트 간의 하드웨어 지원 여부를 확인해야 합니다. 가상 라우터(XRv)는 하드웨어 포워딩 plane이 없으므로 컨트롤러로만 사용 가능하며, local-install interface-all 명령어는 물리 인터페이스가 있는 클라이언트 장비에서만 의미가 있습니다.
  • 리소스 소모 모니터링: Flowspec 규칙이 과도하게 많을 경우 TCAM 및 메모리 리소스를 많이 차지할 수 있으므로, 매칭 조건의 복잡도와 엔트리 수를 적정 수준으로 유지해야 합니다.

태그: BGP RTBH Flowspec RPKI DDoS-Mitigation

9월 11일 06:34에 게시됨