例:廃棄インターフェイスへのパケットの転送
この例では、破棄ルーティングを使用してサービス拒否 (DoS) 攻撃を軽減し、重要なネットワーク リソースを外部からの攻撃から保護し、各顧客が独自の保護を開始できるように顧客に保護サービスを提供し、DoS 試行をログに記録して追跡する方法を示します。
要件
この例を設定する前に、デバイス初期化以外の特別な設定を行う必要はありません。
概要
破棄ルーティングでは、ルーターには、短期間に何百万もの要求が同じアドレスに送信されないようにするルールが構成されます。短期間に受信した要求が多すぎる場合、ルーターは要求を転送せずに単に破棄します。要求は、パケットを転送しないルーターに送信されます。問題のあるルートは、廃棄ルートまたはブラックホールルートと呼ばれることもあります。破棄する必要があるルートのタイプは、ピアまたは他の顧客からの顧客への攻撃、顧客からピアまたは他の顧客への攻撃、攻撃コントローラー (攻撃命令を提供するホスト)、および未割り当てのアドレス空間 (bogon または無効な IP アドレス) として識別されます。
攻撃の試みが特定された後、オペレーターは攻撃を軽減するための構成を配置できます。Junos OSで破棄ルーティングを設定する1つの方法として、ルート破棄に使用するネクストホップごとに破棄静的ルートを作成することがあります。破棄スタティックルートは、 discard
オプションを使用します。
たとえば、以下のように表示されます。
user@host# show routing-options
static {
route 192.0.2.101/32 discard;
route 192.0.2.103/32 discard;
route 192.0.2.105/32 discard;
}
user@host> show route protocol static terse inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both A V Destination P Prf Metric 1 Metric 2 Next hop AS path * ? 192.0.2.101/32 S 5 Discard * ? 192.0.2.103/32 S 5 Discard * ? 192.0.2.105/32 S 5 Discard
この例の主な焦点であるもう1つの戦略は、ルーティングポリシーとdiscastインターフェイスを使用することです。この方法では、廃棄インターフェイスには、NULL ルート ルートに割り当てるネクスト ホップが含まれています。廃棄インターフェイスは1つの論理ユニット(ユニット0)のみを持つことができますが、ユニット0には複数のIPアドレスを設定できます。
たとえば、以下のように表示されます。
user@host# show interfaces dsc
unit 0 {
family inet {
address 192.0.2.102/32 {
destination 192.0.2.101;
}
address 192.0.2.104/32 {
destination 192.0.2.103;
}
address 192.0.2.106/32 {
destination 192.0.2.105;
}
}
}
user@host> show interfaces terse dsc b Interface Admin Link Proto Local Remote dsc up up dsc.0 up up inet 192.0.2.102 --> 192.0.2.101 192.0.2.104 --> 192.0.2.103 192.0.2.106 --> 192.0.2.105
破棄スタティック ルートを使用する代わりに廃棄インターフェイスを使用する利点は、廃棄インターフェイスを使用すると、トラフィックのカウント、ロギング、サンプリングのためのフィルターを設定およびインターフェイスに割り当てることができることです。この例で、これを示します。
実際にパケットを破棄するには、BGPセッションにルーティングポリシーがアタッチされている必要があります。破棄の対象ルートを見つけるには、ルート フィルター、アクセス リスト、または BGP コミュニティ値を使用できます。
例えば、ルート フィルターの使用例を次に示します。
ルート フィルター
protocols { bgp { import blackhole-by-route; } } policy-options { policy-statement blackhole-by-route { term specific-routes { from { route-filter 10.10.10.1/32 exact; route-filter 10.20.20.2/32 exact; route-filter 10.30.30.3/32 exact; route-filter 10.40.40.4/32 exact; } then { next-hop 192.0.2.101 } } } }
図 1は、サンプルのネットワークを示しています。
この例では、外部 BGP(EBGP)セッションが確立されている 3 台のルーターが含まれています。
デバイスR1は攻撃デバイスを表しています。デバイスR3は、攻撃されているデバイスに最も近いルーターを表します。デバイスR2は、パケットを破棄インターフェイスに転送することで攻撃を軽減します。
この例では、discard インターフェイスに適用されたアウトバウンド フィルターを示します。
単一の NULL ルート フィルターを使用する場合の問題は、可視性です。すべての廃棄パケットは、同じカウンタをインクリメントします。破棄されるパケットのカテゴリーを確認するには、宛先クラス使用率(DCU)を使用し、ユーザー定義クラスを各ヌルルートコミュニティに関連付けます。次に、ファイアウォールフィルターでDCUクラスを参照します。関連する例については、「 例:送信元プレフィックスと宛先プレフィックスの転送クラスへのグループ化 」と「 例:宛先クラスに基づくレート制限フィルターの設定」を参照してください。
ルート フィルターやアクセス リストを使用する場合と比較して、コミュニティ値を使用することは、管理上の難易度が最も低く、最もスケーラブルなアプローチです。したがって、これはこの例で示すアプローチです。
デフォルトでは、ネクストホップは外部BGP(EBGP)ピアアドレスと等しくなければなりません。ヌルルートサービスのネクストホップを変更するには、EBGPセッションでマルチホップ機能を設定する必要があります。
CLIクイック構成は、図 1でのすべてのデバイスの設定を示しています。
セクション#configuration756__policy-discard-stは、デバイスR2の手順を説明します。
設定
手順
CLIクイック構成
この例をすばやく設定するには、次のコマンドをコピーしてテキストファイルに貼り付け、改行を削除して、ネットワーク構成に合わせて必要な詳細を変更し、[edit]
階層レベルのCLIにコマンドをコピー&ペーストしてください。
デバイスR1
set interfaces fe-1/2/0 unit 0 family inet address 10.0.0.1/30 set interfaces lo0 unit 0 family inet address 192.168.0.1/32 set protocols bgp group ext type external set protocols bgp group ext peer-as 200 set protocols bgp group ext neighbor 10.0.0.2 set routing-options autonomous-system 100
デバイスR2
set interfaces fe-1/2/0 unit 0 family inet address 10.0.0.2/30 set interfaces fe-1/2/1 unit 0 family inet address 10.1.0.1/30 set interfaces dsc unit 0 family inet filter output log-discard set interfaces dsc unit 0 family inet address 192.0.2.102/32 destination 192.0.2.101 set interfaces lo0 unit 0 family inet address 192.168.0.2/32 set protocols bgp import blackhole-policy set protocols bgp group ext type external set protocols bgp group ext multihop set protocols bgp group ext export dsc-export set protocols bgp group ext neighbor 10.0.0.1 peer-as 100 set protocols bgp group ext neighbor 10.1.0.2 peer-as 300 set policy-options policy-statement blackhole-policy term blackhole-communities from community blackhole-all-routers set policy-options policy-statement blackhole-policy term blackhole-communities then next-hop 192.0.2.101 set policy-options policy-statement dsc-export from route-filter 192.0.2.101/32 exact set policy-options policy-statement dsc-export from route-filter 192.0.2.102/32 exact set policy-options policy-statement dsc-export then community set blackhole-all-routers set policy-options policy-statement dsc-export then accept set policy-options community blackhole-all-routers members 100:5555 set routing-options static route 192.0.2.102/32 next-hop 192.0.2.101 set routing-options autonomous-system 200 set firewall filter log-discard term one then count counter set firewall filter log-discard term one then log
デバイスR3
set interfaces fe-1/2/1 unit 0 family inet address 10.1.0.2/30 set interfaces lo0 unit 0 family inet address 192.168.0.3/32 set interfaces lo0 unit 0 family inet address 192.0.2.102/32 set protocols bgp group ext type external set protocols bgp group ext peer-as 200 set protocols bgp group ext neighbor 10.1.0.1 set routing-options autonomous-system 300
ステップバイステップでの手順
次の例では、設定階層のいくつかのレベルに移動する必要があります。手順については、 Junos OS CLIユーザーガイドの 設定モードでのCLIエディターの使用を参照してください。
デバイスR2 を設定するには:
ルーター インターフェイスを作成します。
[edit interfaces] user@R2# set fe-1/2/0 unit 0 family inet address 10.0.0.2/30 user@R2# set fe-1/2/1 unit 0 family inet address 10.1.0.1/30 user@R2# set lo0 unit 0 family inet address 192.168.0.2/32
すべてのパケットに一致し、パケットをカウントしてログに記録するファイアウォールフィルターを設定します。
[edit firewall filter log-discard term one] user@R2# set then count counter user@R2# set then log
破棄インターフェイスを作成し、出力ファイアウォールフィルターを適用します。
入力ファイアウォール フィルターは、このコンテキストでは影響を与えません。
[edit interfaces dsc unit 0 family inet] user@R2# set filter output log-discard user@R2# set address 192.0.2.102/32 destination 192.0.2.101
破棄インターフェイスで指定された宛先アドレスにネクストホップを送信するスタティックルートを設定します。
[edit routing-options static] user@R2# set route 192.0.2.102/32 next-hop 192.0.2.101
BGP ピアリングを設定します。
[edit protocols bgp ] user@R2# set group ext type external user@R2# set group ext multihop user@R2# set group ext neighbor 10.0.0.1 peer-as 100 user@R2# set group ext neighbor 10.1.0.2 peer-as 300
ルーティングポリシーを設定します。
[edit policy-options policy-statement blackhole-policy term blackhole-communities] user@R2# set from community blackhole-all-routers user@R2# set then next-hop 192.0.2.101 [edit policy-options policy-statement dsc-export] user@R2# set from route-filter 192.0.2.101/32 exact user@R2# set from route-filter 192.0.2.102/32 exact user@R2# set then community set blackhole-all-routers user@R2# set then accept [edit policy-options community blackhole-all-routers] user@R2# set members 100:5555
ルーティングポリシーを適用します。
[edit protocols bgp ] user@R2# set import blackhole-policy user@R2# set group ext export dsc-export
自律システム(AS)番号を設定します。
[edit routing-options] user@R2# set autonomous-system 200
結果
設定モードから、 show interfaces
、 show protocols
、 show policy-options
、 show routing-options
、および show firewall
コマンドを発行して、設定を確認します。出力結果に意図した設定内容が表示されない場合は、この例の手順を繰り返して設定を修正します。
[edit] user@R2# show interfaces fe-1/2/0 { unit 0 { family inet { address 10.0.0.2/30; } } } fe-1/2/1 { unit 0 { family inet { address 10.1.0.1/30; } } } dsc { unit 0 { family inet { filter { output log-discard; } address 192.0.2.102/32 { destination 192.0.2.101; } } } } lo0 { unit 0 { family inet { address 192.168.0.2/32; } } }
user@R2# show protocols bgp { import blackhole-policy; group ext { type external; multihop; export dsc-export; neighbor 10.0.0.1 { peer-as 100; } neighbor 10.1.0.2 { peer-as 300; } } }
user@R2# show policy-options policy-statement blackhole-policy { term blackhole-communities { from community blackhole-all-routers; then { next-hop 192.0.2.101; } } } policy-statement dsc-export { from { route-filter 192.0.2.101/32 exact; route-filter 192.0.2.102/32 exact; } then { community set blackhole-all-routers; accept; } } community blackhole-all-routers members 100:5555;
user@R2# show routing-options static { route 192.0.2.102/32 next-hop 192.0.2.101; } autonomous-system 200;
user@R2# show firewall filter log-discard { term one { then { count counter; log; } } }
デバイスの設定が完了したら、設定モードから commit
を入力します。
検証
設定が正常に機能していることを確認します。
ファイアウォール カウンターのクリア
目的
カウンターをクリアして、既知のゼロ (0) 状態から開始していることを確認します。
アクション
デバイスR2から、
clear firewall
コマンドを実行します。user@R2> clear firewall filter log-discard
デバイスR2から、
show firewall
コマンドを実行します。user@R2> show firewall filter log-discard Filter: /log-discard Counters: Name Bytes Packets counter 0 0
192.0.2.101アドレスにpingを実行します
目的
宛先アドレスにパケットを送信します。
アクション
デバイスR1から、 ping
コマンドを実行します。
user@R1> ping 192.0.2.101 PING 192.0.2.101 (192.0.2.101): 56 data bytes ^C --- 192.0.2.101 ping statistics --- 4 packets transmitted, 0 packets received, 100% packet loss
意味
予想どおり、ping 要求は失敗し、応答は送信されません。パケットは破棄されます。
出力フィルタの確認
目的
デバイスR2のファイアウォールフィルターが正しく機能していることを確認します。
アクション
デバイスR2から、 show firewall filter log-discard
コマンドを入力します。
user@R2> show firewall filter log-discard Filter: log-discard Counters: Name Bytes Packets counter 336 4
意味
予想どおり、カウンターはインクリメントされています。
pingパケットは、さらに20バイトのIPオーバーヘッドと8バイトのICMPヘッダーを伝送します。
コミュニティ属性の確認
目的
ルートがコミュニティ属性でタグ付けされていることを確認します。
アクション
デバイスR1から、デバイスR2のネイバーアドレス192.0.2.101を使用して、 show route extensive
コマンドを入力します。
user@R1> show route 192.0.2.101 extensive inet.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden) 192.0.2.101/32 (1 entry, 1 announced) TSI: KRT in-kernel 192.0.2.101/32 -> {10.0.0.2} *BGP Preference: 170/-101 Next hop type: Router, Next hop index: 684 Address: 0x94141d8 Next-hop reference count: 2 Source: 10.0.0.2 Next hop: 10.0.0.2 via fe-1/2/0.0, selected Session Id: 0x8000a State: <Active Ext> Local AS: 100 Peer AS: 200 Age: 53:03 Validation State: unverified Task: BGP_200.10.0.0.2+63097 Announcement bits (1): 2-KRT AS path: 200 I Communities: 100:5555 Accepted Localpref: 100 Router ID: 192.168.0.2
意味
予想通り、デバイスR2がデバイスR1に192.0.2.101ルートをアドバタイズすると、デバイスR2は100:5555コミュニティタグを追加します。