今回は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を有効にします。
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
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で広報できます。
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コマンドを設定します。
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#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#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#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#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#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
コメント