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のセキュリティオプションを設定するには、適切なセキュリティ対策と許容可能なコストのバランスを取る必要があります。他の方法よりも優れている方法はありません。各ネットワーク管理者は、使用されているネットワークのニーズを満たすセキュリティ対策を設定する必要があります。

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

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

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

要件

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

概要

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

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

トポロジー

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

図1:BGPピアセッションを持つ典型的なネットワークTypical Network with BGP Peer Sessions

設定

CLIクイックコンフィグレーション

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

デバイスC

デバイスE

デバイスEの設定

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

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

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

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

  2. BGPを設定します。

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

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

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

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

結果

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

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

検証

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

フィルターが設定されていることの確認

目的

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

アクション

TCP接続の検証

目的

TCP接続を確認します。

アクション

動作モードから、デバイス Cとデバイス Eで show system connections extensive コマンドを実行します。

デバイスCの出力は、TCP接続の確立の試みを示しています。デバイス E の出力は、デバイス A とデバイス B のみとの接続が確立されていることを示しています。

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

目的

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

アクション

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

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

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

要件

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

概要

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

トポロジー

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

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

設定

CLIクイックコンフィグレーション

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

フィルターを設定する

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

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

フィルターを設定するには:

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

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

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

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

結果

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

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

検証

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

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

目的

ファイアウォールフィルター 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 BGP MSS 値と同じであると仮定しています。BGPネイバーからのMSS値が設定されたMSS値よりも小さい場合、BGPネイバーからのMSS値が送信者の最大セグメントサイズとして使用されます。

mtu-discovery ステートメントのない間接ネイバーの場合、デフォルトの MSS 値は 512 です。mtu-discoveryステートメントの詳細については、https://www.juniper.net/documentation/us/en/software/junos/cli-reference/topics/ref/statement/mtu-discovery-edit-protocols-bgp.html#id-13368402__d674375e146 を参照してください。

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

トポロジー図

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

図2:BGPNetwork topology with routers R0 to R3 in sequence shows BGP session. MSS is 2000 at both ends. 2000 and 1000 likely indicate link MTU.のTCP最大セグメントサイズ

設定

CLIクイックコンフィグレーション

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

R0

手順

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

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

ルーターR0を設定するには:

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

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

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

  4. パケットのフラグメント化を防止するために、MTU検出を設定します。

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

    注:

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

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

結果

設定モードから、 show interfacesshow protocolsshow 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(IPv4の場合)より40バイト小さく、MTU(IPv6の場合)より60バイト小さいことを意味します。この値はピア間でネゴシエートされます。この例では、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