Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

BGP の TCP アクセス制限

TCPを使用したBGPのセキュリティオプションについて

ルーティングプロトコルの中で、BGPはトランスポートプロトコルとしてTCPを使用するという点でユニークです。BGPピアは、ルーティングデバイス間の手動設定によって確立され、ポート179でTCPセッションを作成します。BGP 対応デバイスは、接続を維持するためにキープアライブ メッセージを定期的に送信します。

時とともに、BGPはインターネット上で支配的なドメイン間ルーティングプロトコルになりました。ただし、安定性とセキュリティの保証は限られています。BGP のセキュリティオプションを設定するには、適切なセキュリティ対策と許容可能なコストとのバランスを取る必要があります。他の方法よりも優れている方法は1つもありません。各ネットワーク管理者は、使用するネットワークのニーズを満たすセキュリティ対策を構成する必要があります。

BGP がトランスポート プロトコルとして TCP を使用することに関連するセキュリティ問題の詳細については、RFC 4272, BGP セキュリティ脆弱性分析を参照してください。

例:指定された BGP ピア以外からのポートへの TCP アクセスをブロックするフィルターの設定

この例では、指定された BGP ピアを除くすべてのリクエスターからポート 179 へのすべての TCP 接続試行をブロックする標準的なステートレス ファイアウォール フィルターを設定する方法を示します。

要件

この例を構成する前に、デバイスの初期化以上の特別な構成は必要ありません。

概要

この例では、指定された BGP ピアを除くすべてのリクエスターからポート 179 へのすべての TCP 接続試行をブロックするステートレス ファイアウォール フィルターを作成します。

ステートレス ファイアウォール フィルターは、デバイス A とデバイス B に直接接続されたインターフェイスから宛先ポート番号 179 へのすべてのパケットを filter_bgp179 照合します。

トポロジー

図 1 この例で使用されているトポロジーを示しています。デバイスCはデバイスEへのTCP接続を試みますが、デバイスEは接続試行をブロックします。この例では、デバイス E の設定を示しています。

図 1: BGP ピア セッションを持つ標準的なネットワークBGP ピア セッションを持つ標準的なネットワーク

設定

CLIクイック構成

この例をすばやく設定するには、次のコマンドをコピーしてテキストファイルに貼り付け、改行を削除して、ネットワーク構成に合わせて必要な詳細を変更し、[edit]階層レベルのCLIにコマンドをコピー&ペーストしてください。

1 デバイスC 1

1 デバイスE 1

デバイス E の設定

ステップバイステップでの手順

次の例では、設定階層内のさまざまなレベルに移動する必要があります。CLIのナビゲーションについては、Junos OS CLIユーザーガイド設定モードでCLIエディターを使用する を参照してください。

指定された BGP ピアを除くすべてのリクエスターからポート 179 へのすべての TCP 接続試行をブロックするステートレス ファイアウォール フィルターを使用してデバイス E を設定するには、次のようにします。

  1. インターフェイスを設定します。

  2. BGP を設定します。

  3. 自律システム番号を設定する。

  4. 指定されたBGPピアからポート179へのTCP接続試行を受け入れるフィルター条件を定義します。

  5. 他の送信元からのパケットを拒否する、もう一方のフィルター条件を定義します。

  6. ファイアウォールフィルターをループバックインターフェイスに適用します。

結果

設定モードから、show firewallshow interfacesshow protocols、およびshow routing-options のコマンドを入力して設定を確認します。出力結果に意図した設定内容が表示されない場合は、この例の手順を繰り返して設定を修正します。

デバイスの設定が完了したら、設定モードから commit を入力します。

検証

設定が正常に機能していることを確認します。

フィルターが構成されていることを確認する

目的

フィルターが show firewall filter コマンドの出力に表示されていることを確認します。

アクション

TCP 接続の検証

目的

TCP 接続を確認します。

アクション

運用モードから、機器Cと機器Eで show system connections extensive コマンドを実行します。

デバイス C の出力は、TCP 接続を確立しようとしたことを示しています。デバイス E の出力では、デバイス A およびデバイス B とのみ接続が確立されていることがわかります。

インターフェイス上のトラフィックの監視

目的

monitor traffic コマンドを使用して、TCP 接続を確立するインターフェイス上のトラフィックと、TCP 接続を確立しないインターフェイス上のトラフィックを比較します。

アクション

運用モードから、デバイスBへのデバイスEインターフェイスと、デバイスCへのデバイスEインターフェイスで monitor traffic コマンドを実行します。次のサンプル出力では、最初の例で確認応答 (ack) メッセージを受信したことを確認します。2 番目の例では、 ack メッセージは受信されません。

例:プレフィックスリストに基づいてポートへのTCPアクセスを制限するフィルターの設定

この例では、許可された BGP ピアを含むプレフィックス ソースのリストを指定することによって、ルーティング エンジン宛ての特定の TCP および ICMP(インターネット制御メッセージ プロトコル)トラフィックを制限する標準的なステートレス ファイアウォール フィルターを設定する方法を示します。

要件

この例を設定する前に、デバイス初期化以外の特別な設定を行う必要はありません。

概要

この例では、ステートレス ファイアウォール フィルターを作成します。このフィルターは、指定したプレフィックスを持つ BGP ピアを除くすべてのリクエスターからポート 179 への TCP 接続試行をすべてブロックします。

トポロジー

許可された BGP ピアを含むソース プレフィックスのリストを指定するソース プレフィックス リスト plist_bgp179が作成されます。

ステートレス ファイアウォール フィルターは filter_bgp179 送信元プレフィックス リストから plist_bgp179 宛先ポート番号 179 までのすべてのパケットを照合します。

設定

CLIクイック構成

この例をすばやく設定するには、次のコマンドをコピーしてテキストファイルに貼り付け、改行を削除して、ネットワーク構成に合わせて必要な詳細を変更し、[edit]階層レベルのCLIにコマンドをコピー&ペーストしてください。

フィルターを設定する

ステップバイステップでの手順

次の例では、設定階層内のさまざまなレベルに移動する必要があります。CLIのナビゲーションについては、Junos OS CLIユーザーガイド設定モードでCLIエディターを使用する を参照してください。

フィルターを構成するには:

  1. プレフィックスリスト bgp179 を展開して、 protocols bgp group <*> neighbor <*> で定義された BGP ピアグループが指すすべてのプレフィックスを含めます。

  2. 指定されたBGPピアを除くすべてのリクエスターからポート179へのTCP接続試行を拒否するフィルター条件を定義します。

  3. すべてのパケットを受け入れるように、もう一方のフィルター条件を定義します。

  4. ファイアウォールフィルターをループバックインターフェイスに適用します。

結果

コンフィギュレーションモードから、show firewallshow interfaces、、およびの各コマshow policy-optionsンドを入力し、コンフィギュレーションを確認します。出力結果に意図した設定内容が表示されない場合は、この例の手順を繰り返して設定を修正します。

デバイスの設定が完了したら、設定モードから commit を入力します。

検証

設定が正常に機能していることを確認します。

ループバック インターフェイスに適用されたファイアウォール フィルターの表示

目的

ファイアウォールフィルター filter_bgp179 が、論理インターフェイス lo0.0でIPv4入力トラフィックに適用されていることを確認します。

アクション

論理インターフェイスlo0.0には show interfaces statistics operational mode コマンドを使用し、detail オプションを含めます。コマンド出力セクションの Protocol inet セクションの Input Filters フィールドには、入力方向の論理インターフェイスに適用されているステートレス ファイアウォール フィルターの名前が表示されます。

例:BGP の TCP セグメント サイズの制限

この例では、最大送信単位(MTU)検出を使用している場合にTCPセグメントサイズを制限することにより、インターネット制御メッセージプロトコル(ICMP)の脆弱性の問題を回避する方法を示しています。TCPパスでMTUディスカバリーを使用することは、BGPパケットのフラグメント化を回避する方法の1つです。

要件

この例を構成する前に、デバイスの初期化以上の特別な構成は必要ありません。

概要

TCPは、2つのピア間のセッション接続確立時に、最大セグメントサイズ(MSS)値をネゴシエートします。ネゴシエートされた MSS 値は、主に、通信ピアが直接接続されているインターフェイスの最大送信単位 (MTU) に基づきます。ただし、TCP パケットがたどるパス上のリンク MTU が変動するため、パケット サイズがリンクの MTU を超えると、MSS 値内に十分収まるネットワーク内の一部のパケットがフラグメント化される場合があります。

TCP MSS値を設定するには、1〜4096のセグメントサイズで tcp-mss ステートメントを含めます。

ルーターがSYNビットとMSSオプションが設定されたTCPパケットを受信し、パケットで指定されたMSSオプションが tcp-mss ステートメントで指定されたMSS値より大きい場合、ルーターはパケット内のMSS値を tcp-mss ステートメントで指定された低い値に置き換えます。

設定されたMSS値は、送信者の最大セグメントサイズとして使用されます。送信者がBGPネイバーと通信するために使用するTCP MSS値は、送信者がBGPネイバーから受け入れることができるTCP MSS値と同じであることを前提としています。BGPネイバーからのMSS値が設定されたMSS値よりも小さい場合、BGPネイバーからのMSS値が送信者の最大セグメントサイズとして使用されます。

この機能は、TCPover IPv4およびTCPover IPv6でサポートされています。

トポロジー図

図 2 この例で使用されているトポロジーを示しています。

図 2: BGP の TCP 最大セグメント サイズBGP の TCP 最大セグメント サイズ

設定

CLIクイック構成

この例をすばやく設定するには、次のコマンドをコピーしてテキストファイルに貼り付け、改行を削除して、ネットワーク構成に合わせて必要な詳細を変更し、[edit]階層レベルのCLIにコマンドをコピー&ペーストしてください。

R0

手順

ステップバイステップでの手順

次の例では、設定階層内のさまざまなレベルに移動する必要があります。CLIのナビゲーションについては、Junos OS CLIユーザーガイド設定モードでCLIエディターを使用する を参照してください。

ルーターR0を設定する。

  1. インターフェイスを設定します。

  2. この例では、内部ゲートウェイプロトコル(IGP)、OSPFを設定します。

  3. 1 つ以上の BGP グループを設定します。

  4. パケットのフラグメント化を防止するように MTU ディスカバリーを構成します。

  5. グループまたはさまざまなネイバーに対してTCP MSSをグローバルに設定して、BGPネイバーを設定します。

    注:

    TCP MSS ネイバー設定は、グループ設定よりも優先されます。

  6. ローカルの自律システムを設定します。

結果

コンフィギュレーションモードから、show interfacesshow protocols、、およびの各コマshow routing-optionsンドを入力し、コンフィギュレーションを確認します。出力結果に意図した設定内容が表示されない場合は、この例の手順を繰り返して設定を修正します。

デバイスの設定が完了したら、設定モードから commit を入力します。

検証

構成が正しく機能していることを確認するには、次のコマンドを実行します。

  • show system connections extensive | find <neighbor-address>をクリックして、ネゴシエートされたTCP MSS値を確認します。

  • monitor traffic interfaceを使用して、BGPトラフィックを監視し、設定されたTCP MSS値がTCP SYNパケットのMSSオプションとして使用されていることを確認します。

トラブルシューティング

MTU ディスカバリーを使用した MSS 計算

問題点

2つのルーティングデバイス(R1とR2)が内部BGP(IBGP)接続を持っている例を考えてみましょう。どちらのルーターでも、接続されたインターフェイスのIPv4 MTUは4034です。

デバイス R1 の次のパケット キャプチャでは、ネゴシエートされた MSS は 3994 です。MSSの show system connections extensive 情報では、2048に設定されています。

ソリューション

これは、Junos OS で予期される動作です。MSS 値は、MTU 値から IP または IPv6 と TCP ヘッダーを引いた値に等しくなります。つまり、MSS 値は通常、MTU より 40 バイト小さく(IPv4 の場合)、MTU より 60 バイト小さくなります(IPv6 の場合)。この値は、ピア間でネゴシエートされます。この例では、4034 - 40 = 3994 です。Junos OS はこの値を 2 KB の倍数に丸めます。値は 3994 / 2048 * 2048=2048 です。したがって、 show system connections 出力で同じMSS値を確認する必要はありません。

3994 / 2048 = 1.95

1.95 は 1 に丸められます。

1 * 2048 = 2048