Flowspec

今回はBGPのFlowspecと呼ばれる機能について説明します。

 

概要

Flowspecについて

以下のように、ISPにおいて、インターネット接続サービスなどを契約している顧客に対してDDoS(Distributed Denial of Service)攻撃が発生した場合を例に説明します。

 

DDoS攻撃の対策として、まずは、RTBH(Remotely Triggered Black Hole)を使用して、DDoS攻撃のトラフィックを吸収する方法が存在します。

 

また、PE(Provider Edge)ルータでACLなどを使用して、DDoS攻撃のトラフィックをドロップする方法も存在します。

 

後者の方法では、複数のルータに対して設定変更が発生するため、PEルータの台数に比例して、作業負荷も増加してしまいます。
(Ansible等を使用して複数のルータの設定を変更すればいいよね、という話は今回は対象外です。)

この際、BGPのFlowspec(Flow Specification)と呼ばれる機能を使用することで、簡単に複数のルータでフィルタリングを実施することが可能です。
Flowspecを使用することで、BGPでフィルタリング用の設定を広報し、遠隔からPEルータでフィルタリングを実施することが可能です。

 

検証の基本設定

基本設定の内容

R1とR2をAS 100に所属させ、R1-R2間でIBGPネイバーを確立し、Flowspecを有効にします。

R1からR2に対して、10.3.3.4宛のトラフィックをドロップするフィルタリングの設定を広報します。

R3からR4とR5宛にPingを実施し、Flowspecによるフィルタリングが動作しているか確認します。

(フィルタリング情報を広報するR1にはIOS-XR、それ以外のR2~R5にはIOS-XEを使用しています。)

 

 

基本設定


class-map type traffic match-all CLASS_MAP
 match destination-address ipv4 10.3.3.4 255.255.255.255
 end-class-map
!
policy-map type pbr POLICY_MAP
 class type traffic CLASS_MAP
  drop
 !
 class type traffic class-default
 !
 end-policy-map
!
flowspec
 address-family ipv4
  service-policy type pbr POLICY_MAP
!
interface GigabitEthernet0/0/0/0
 ipv4 address 10.1.1.1 255.255.255.0
!
router bgp 100
 bgp router-id 1.1.1.1
 address-family ipv4 flowspec
 !
 neighbor 10.1.1.2
  remote-as 100
  address-family ipv4 flowspec
            


flowspec
 address-family ipv4
  local-install interface-all
!
interface GigabitEthernet2
 ip address 10.1.1.2 255.255.255.0
!
interface GigabitEthernet3
 ip address 10.2.2.2 255.255.255.0
!
interface GigabitEthernet4
 ip address 10.3.3.2 255.255.255.0
!
router bgp 100
 bgp router-id 2.2.2.2
 no bgp default ipv4-unicast
 neighbor 10.1.1.1 remote-as 100
 !
 address-family ipv4
 exit-address-family
 !
 address-family ipv4 flowspec
  neighbor 10.1.1.1 activate
 exit-address-family
            


interface GigabitEthernet2
 ip address 10.2.2.3 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 10.2.2.2
            


interface GigabitEthernet2
 ip address 10.3.3.4 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 10.3.3.2
            


interface GigabitEthernet2
 ip address 10.3.3.5 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 10.3.3.2
            

 

設定内容と状態の確認

BGPの設定確認

BGPではaddress-family ipv4 flowspecコマンドを使用し、Flowspecを有効にします。

R1(IOS-XR)

router bgp 100
 bgp router-id 1.1.1.1
 address-family ipv4 flowspec
 !
 neighbor 10.1.1.2
  remote-as 100
  address-family ipv4 flowspec
            
R2(IOS-XE)

router bgp 100
 bgp router-id 2.2.2.2
 no bgp default ipv4-unicast
 neighbor 10.1.1.1 remote-as 100
 !
 address-family ipv4
 exit-address-family
 !
 address-family ipv4 flowspec
 neighbor 10.1.1.1 activate
 exit-address-family
            

 

Flowspecの設定確認

R1ではPolicy Mapを使用してフィルタリングを定義します。その後、flowspec配下でservice-policy type pbr <Policy Mapの名前>コマンドを設定することで、Policy Mapのフィルタリングの設定をBGPで広報できます。

R1(IOS-XR)

class-map type traffic match-all CLASS_MAP
 match destination-address ipv4 10.3.3.4 255.255.255.255
 end-class-map
!
policy-map type pbr POLICY_MAP
 class type traffic CLASS_MAP
  drop
 !
 class type traffic class-default
 !
 end-policy-map
!
flowspec
 address-family ipv4
  service-policy type pbr POLICY_MAP
            

P2ではBGP経由で学習したフィルタリングの設定を使用するために、flowspec配下でlocal-install interface-allコマンドを設定します。

R2(IOS-XE)

flowspec
 address-family ipv4
  local-install interface-all
            

 

BGPネイバーの状態確認

BGPネイバー間でFlowspecが有効な場合、BGPネイバー確立時に送信されるOpenメッセージのCapabilityには、SAFI(Subsequent Address Family Identifier)として133が格納されます。

 

R1-R2間のBGPネイバーでFlowspecが有効になっていることが確認できます。

R2(IOS-XE)

R2#show bgp ipv4 flowspec neighbors
BGP neighbor is 10.1.1.1,  remote AS 100, internal link
  BGP version 4, remote router ID 1.1.1.1
  BGP state = Established, up for 00:10:25
  Last read 00:00:09, last write 00:00:41, hold time is 180, keepalive interval is 60 seconds
  Neighbor sessions:
    1 active, is not multisession capable (disabled)
  Neighbor capabilities:
    Route refresh: advertised and received(new)
    Four-octets ASN Capability: advertised and received
    Address family IPv4 Flowspec: advertised and received
    Enhanced Refresh Capability: advertised
    Multisession Capability:
    Stateful switchover support enabled: NO for session 1
    .
    <一部省略>
            

 

フィルタリング設定広報前の疎通確認

R1からR2に対してフィルタリングの設定を広報する前は、R3からR4とR5へのPingが成功していることが確認できます。

 

R3(IOS-XE)

R3#ping 10.3.3.4 source 10.2.2.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.3.3.4, timeout is 2 seconds:
Packet sent with a source address of 10.2.2.3
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms

R3#ping 10.3.3.5 source 10.2.2.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.3.3.5, timeout is 2 seconds:
Packet sent with a source address of 10.2.2.3
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
            

 

BGPでフィルタリングの設定を広報

R1からR2に対して10.3.3.4宛のパケットをドロップするフィルタリングの設定を広報します。

フィルタリングのルール(IPアドレス , ポート番号 , DSCP , etc…)はMP_REACH_NLRI、アクション(Shaping , Drop , Marking , Redirect)はEXTENDED_COMMUNITIESに格納されます。

パケットをドロップするアクションはレートが0bpsのShapingとして表現されます。

 

R2のBGPテーブルを見ると、R2はR1から10.3.3.4/32宛のパケットをドロップするフィルタリングの設定を学習していることが確認できます。

R2(IOS-XE)

R2#show bgp ipv4 flowspec detail
BGP routing table entry for Dest:10.3.3.4/32, version 9
  Paths: (1 available, best #1, table IPv4-Flowspec-BGP-Table)
  Not advertised to any peer
  Refresh Epoch 1
  Local
    0.0.0.0 from 10.1.1.1 (1.1.1.1)
      Origin IGP, localpref 100, valid, internal, best
      Extended Community: FLOWSPEC Traffic-rate:100,0
      rx pathid: 0, tx pathid: 0x0
      Updated on Jun 23 2020 10:35:28 UTC
            

 

また、show flowspec ipv4 internalコマンドでもFlowspecのフィルタリングの設定を確認できます。

R2(IOS-XE)

R2#show flowspec ipv4 internal
AFI: IPv4
  Flow           :Dest:10.3.3.4/32
    Actions      :Traffic-rate: 0 bps  (bgp.1)
      Client Version: 0
      Unsupported:    FALSE
      RT:
        VRF Name Cfg:   0x00
        RT Cfg:         0x00
        RT Registered:  0x00
        RT Resolved:    0x00
    Class handles:
      Handle [0]:        700000000040c171
    Class Handle Version:     1
    Sequence:                 1024
    Synced:                   FALSE
    Match Unsupported:        None
    Ref Count:                1
    Last Error:               0x0:Unknown error 0
    Last Batch:               8
    Statistics                        (packets/bytes)
      Matched             :                   5/570
      Dropped             :                   5/570
            

 

フィルタリング設定広報後の疎通確認

R1からR2に対してフィルタリングの設定を広報後、R3からR4へのPingが失敗することが確認できます。
これより、R2はR1から学習したフィルタリングの設定を基に、トラフィックを正しくドロップしていることが確認できます。

R3(IOS-XE)

R3#ping 10.3.3.4 source 10.2.2.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.3.3.4, timeout is 2 seconds:
Packet sent with a source address of 10.2.2.3
.....
Success rate is 0 percent (0/5)

R3#ping 10.3.3.5 source 10.2.2.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.3.3.5, timeout is 2 seconds:
Packet sent with a source address of 10.2.2.3
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
            

コメント

タイトルとURLをコピーしました