ユニキャスト RPF(ルータ)について
IPv4 または IPv6 トラフィックを伝送するインターフェイスでは、ユニキャスト リバース パス フォワーディング(RPF)を設定することで、DoS(サービス拒否)攻撃の影響を軽減できます。ユニキャスト RPF は、攻撃元を特定するのに役立ち、ユニキャスト RPF が有効になっているインターフェイス上の予期しない送信元アドレスからのパケットを拒否します。
-
ネットワークのエッジ(顧客向けインターフェイス上)でユニキャスト RPF チェック機能を適用することで、ネットワークを保護できます。ISP環境では、これはネットワークに影響を与える可能性があり、拡張されたセットアップを課す可能性があります。すでにネットワークのエッジを保護している場合、偽装されたIP送信元アドレスを持つパケットは、コアに面したインターフェイスにさえ表示されません。この場合、ユニキャスト RPF チェックは必要ありません。ユニキャストRPF機能を有効にすると、コントロールプレーンのパフォーマンスに影響を与える可能性があるため、必要に応じて使用します。そのため、ネットワークコア(内部)インターフェイスではこの機能を有効にしないことを強くお勧めします。
現在 PTX プラットフォームでは、BGP フロー仕様(flowspec)を設定すると、VRF インスタンスを設定する暗示的フィルタが作成されます。PTXプラットフォームでは、フィルタールックアップは送信元/宛先IPルックアップに先行します。そのため、送信元と宛先のIPルックアップはVRFインスタンスのコンテキスト内で行われます。
現在、PTXプラットフォームでは、インターフェイスにユニキャストリバースパスフォーレーディング(uRPF)とフィルターベースフォワーディング(FBF)が設定されている場合、デフォルトの動作では、着信パケットの送信元IPアドレス検索はインターフェイスが指すルーティング インスタンスのuRPFによって実行され、IP アドレス検索はFBFフィルタで指定されたルーティング インスタンスで行われます。 set forwarding-options no-rpf-fbf-handling を使用してこのデフォルトの動作を上書きし、この設定を適用すると、受信パケットの送信元IPアドレス検索は、FBFフィルタで指定されたルーティング インスタンスuRPFによって実行されます。
ユニキャスト RPF とデフォルト ルート
ルーティングテーブルのルートからアクティブなルートを選択できない場合、ルーターはデフォルトルートを選択します。デフォルト ルートは、IP アドレス 0.0.0.0/0 に相当します。デフォルト ルートを設定し、そのデフォルト ルートが使用するインターフェイス上でユニキャスト RPF を設定すると、ユニキャスト RPF の動作は、そうでない場合とは異なります。
デフォルト ルートでインターフェイスが使用されているかどうかを確認するには、 show route コマンドを入力します。
user@host> show route address
address は、設定されたデフォルト ルートのネクストホップ アドレスです。デフォルトルートは、show routeコマンドの出力に示されたインターフェイスを使用します。
以下のセクションでは、デフォルト ルートがインターフェイスを使用する場合と、デフォルト ルートがインターフェイスを使用しない場合のユニキャスト RPF の動作について説明します。
デフォルト ルートでのユニキャスト RPF の動作
MPC と MX80 ルーターを持つルーターを除くすべてのルーターで、ユニキャスト RPF で構成されたインターフェイスを使用するデフォルト ルートを設定すると、ユニキャスト RPF は以下のように動作します。
-
ルーズ モード—すべてのパケットが自動的に受け入れられます。このため、デフォルト ルートが使用するインターフェイスでは、ユニキャスト RPF ルーズ モードを設定しないことをお勧めします。
-
ストリクトモード—パケットの送信元アドレスが、インターフェイスを介して到達可能なルート(デフォルトまたは学習済み)のいずれかと一致する場合、パケットは受け入れられます。ルートには複数の宛先を関連付けることができることに注意してください。したがって、宛先の 1 つがパケットの着信インターフェイスと一致する場合、パケットは受け入れられます。
MPC を搭載したすべてのルーターと MX80 ルーターでは、ユニキャスト RPF で構成されたインターフェイスを使用するデフォルト ルートを設定すると、ユニキャスト RPF は以下のように動作します。
-
ルーズモード—送信元がデフォルトルートから学習されたパケットを除くすべてのパケットが受け入れられます。送信元がデフォルト ルートから学習されたすべてのパケットは、パケット転送エンジンで破棄されます。デフォルトルートは、ルートが存在しないかのように扱われます。
-
ストリクトモード—パケットの送信元アドレスが、インターフェイスを介して到達可能なルート(デフォルトまたは学習済み)のいずれかと一致する場合、パケットは受け入れられます。ルートには複数の宛先を関連付けることができることに注意してください。したがって、宛先の 1 つがパケットの着信インターフェイスと一致する場合、パケットは受け入れられます。
すべてのルーターで、次のいずれかに該当する場合、パケットは受け入れられません。
-
パケットの送信元アドレスがルーティングテーブルのプレフィックスと一致しません。
-
インターフェイスは、この送信元アドレスプレフィックスを持つパケットを受信することを想定していません。
デフォルト ルートがない場合のユニキャスト RPF の動作
デフォルト ルートを設定しない場合、またはデフォルト ルートがユニキャスト RPF で設定されたインターフェイスを使用しない場合、ユニキャスト RPF は、ユニキャスト RPF ストリクト モードの設定 および ユニキャスト RPF ルーズ モードの設定で説明したように動作します。要約すると、デフォルト ルートのないユニキャスト RPF は、以下のように動作します。
-
ストリクト モード:次のいずれかに該当する場合、パケットは受け入れられません。
-
パケットの送信元アドレスがルーティングテーブルのプレフィックスと一致しません。
-
インターフェイスは、この送信元アドレスプレフィックスを持つパケットを受信することを想定していません。
-
-
ルーズモード—パケットの送信元アドレスがルーティングテーブルのプレフィックスと一致しない場合、パケットは受け入れられません。
ルーティング非対称性を備えたユニキャストRPF
一般に、内部インターフェイスでは ルーティングの非対称性が発生する可能性が高いため、ネットワーク内部のインターフェイスではユニキャスト RPF を有効にしないことを推奨します。ルーティングの非対称性とは、パケットの発信パスとリターン パスが異なることを意味します。ネットワークのコアにあるルーターは、顧客またはプロバイダーのエッジにあるルーターよりも、非対称のリバースパスを持つ可能性が高くなります。 図 1 は、ルーティングが非対称な環境でのユニキャスト RPF を示しています。
を使用したユニキャストRPF
図 1 では、インターフェイス so-0/0/0 でユニキャスト RPF を有効にすると、ルーター A 宛てのトラフィックは拒否されません。インターフェイス so-1/0/1 でユニキャスト RPF を有効にすると、ルーター A からのトラフィックは拒否されます。
非対称ルーティング環境でユニキャスト RPF を有効にする必要がある場合、フェイル フィルターを使用して、特定のパスで到着することがわかっている着信パケットをルーターが受け入れることができます。特定の送信元アドレスと宛先アドレスを持つパケットを受け入れるフェール フィルターの例については、 ユニキャスト RPF の設定を参照してください。
ユニキャスト RPF 厳格モードの設定
厳密モードでは、ユニキャスト RPF は、受信パケットにルーティングテーブルのプレフィックスと一致する送信元アドレスがあるかどうか、およびインターフェイスがこの送信元アドレス プレフィックスを持つパケットの受信を期待しているかどうかをチェックします。
アクティブパスモードが設定されている場合、アクティブルートのみの発信インターフェイスリストが作成されます。これらのインターフェイスに着信するパケットは、有効と見なされ、処理されます。
受信パケットがユニキャスト RPF チェックに失敗した場合、そのパケットはインターフェイスで受け入れられません。パケットがインターフェイスで受け入れられない場合、ユニキャスト RPF はパケットをカウントし、オプションの失敗フィルターに送信します。失敗フィルターが設定されていない場合、デフォルトのアクションは、自動的にパケットを破棄することです。
オプションの失敗フィルターを使用すると、ユニキャスト RPF チェックに失敗したパケットにフィルターを適用できます。失敗フィルターを定義して、受け入れ、拒否、ログ記録、サンプリング、ポリシングなど、あらゆるフィルター操作を実行できます。
インターフェイスでユニキャスト RPF が有効になっている場合、ブートストラップ プロトコル(BOOTP)パケットと動的ホスト構成プロトコル(DHCP)パケットはインターフェイスで受け入れられません。インターフェイスが BOOTP パケットと DHCP パケットを受け取れるようにするには、送信元アドレスが 0.0.0.0 で宛先アドレスが 255.255.255.255. のすべてのパケットを受け入れるフェイル フィルターを適用する必要があります 設定例については、 ユニキャスト RPF の設定を参照してください。
失敗フィルターの定義の詳細については 、ルーティングポリシー、ファイアウォールフィルター、およびトラフィックポリサーユーザーガイドを参照してください。
ユニキャストRPFを設定するには、 rpf-check ステートメントを含めます。
rpf-check <fail-filter filter-name>;
以下の階層レベルでこのステートメントを使用することができます。
-
[edit interfaces interface-name unit logical-unit-number family (inet | inet6)] -
[edit logical-systems logical-system-name interfaces interface-name unit logical-unit-number family (inet | inet6)]
ユニキャスト RPF を使用すると、トラフィック フィルターとともに実装すると、いくつかの結果が生じる可能性があります。
-
RPF フェール フィルターは、入力フィルターの後、出力フィルターの前に評価されます。
-
入力フィルターによってドロップされたパケットのフィルター カウンターを設定し、ドロップされたパケットの総数を知りたい場合は、RPF チェックによってドロップされたパケットのフィルター カウンターも設定する必要があります。
-
RPF チェックに失敗し、RPF 失敗フィルターで受け入れられたパケットをカウントするには、フィルター カウンターを設定する必要があります。
-
入力フィルターが inet.0 または inet.6.0 ルーティング テーブル以外の場所にパケットを転送する場合、ユニキャスト RPF チェックは実行されません。
-
入力フィルターが、入力インターフェイスが設定されているルーティング インスタンス以外の場所にパケットを転送した場合、ユニキャスト RPF チェックは実行されません。
前述の箇条書きリストでは、最初、最後から 2 番目、最後のポイントは MX プラットフォームには適用されません。これは、MX プラットフォームではファイアウォール フィルターの実行前に uRPF が処理されるためです。uRPFチェックは、静的および動的インターフェイスに対してFBF(フィルターベースフォワーディング)アクションを有効にする前に、送信元アドレスチェックのために処理されます。これは、IPv4 と IPv6 の両方のファミリに適用されます。
ACXおよびMXシリーズルーターの場合:
-
uRPFフェイルフィルターは、ACX1000、ACX2000、ACX4000、ACX500、ACX5048、ACX5096でサポートされています。このフィルターは、ACX5448、ACX710、ACX7100-32C、ACX7100-48、ACX7509、およびACX7000シリーズのすべてのルーターではサポートされていません。
- uRPF 失敗フィルターは、イングレス ポート チェック(厳密モード)で失敗したパケットを照合できません。
- uRPF失敗フィルターは、送信元IPルックアップに失敗したパケットには一致しますが、入力インターフェイスチェック(厳密モード)に失敗したパケットには一致しません。
- uRPF 失敗フィルターは、ファイアウォール フィルターのインターフェイス固有のインスタンスにのみ適用されます。
- uRPF 失敗フィルターは、拒否およびルーティング インスタンス アクションをサポートしていません。
ユニキャストRPFストリクトモードを設定し、インターフェイスがBOOTPパケットとDHCPパケットを受け入れることを可能にするフェイルフィルターを適用します。このフィルターは、送信元アドレスが 0.0.0.0 で宛先アドレスが 255.255.255.255 であるすべてのパケットを受け入れます。
ユニキャスト RPF を厳格モードで設定するには:
ユニキャスト RPF ルーズ モードの設定
デフォルトでは、ユニキャスト RPF は厳密モードを使用します。ユニキャスト RPF ルーズ モードは、ユニキャスト RPF ストリクト モードと似ており、設定制限も同じです。ルーズモードでの唯一のチェックは、パケットがルーティングテーブルに対応するプレフィックスを持つ送信元アドレスを持っているかどうかです。ルーズモードでは、インターフェイスが特定の送信元アドレスプレフィックスを持つパケットの受信を想定しているかどうかは確認されません。対応するプレフィックスが見つからない場合、ユニキャスト RPF ルーズ モードはパケットを受け入れません。厳密モードと同様に、ルーズモードでは障害パケットがカウントされ、必要に応じて障害フィルターに転送されます。このフィルターは、パケットの受け入れ、拒否、ログ、サンプリング、またはポリシングを行います。
フィージブルパスモードが設定されている場合、アクティブおよび非アクティブなルートの発信インターフェイスリストが作成されます。これらのインターフェイスに着信するパケットは、有効と見なされ、処理されます。
ユニキャスト RPF ルーズ モードを設定するには、 modeを含めます。
パケットを破棄する機能を備えたユニキャスト RPF ルーズ モードの設定
ユニキャスト RPF ルーズ モードには、送信元アドレスが破棄インターフェイスを指しているパケットを破棄する機能があります。ユニキャスト RPF ルーズ モードを、リモート トリガー ヌル ルート フィルタリングとともに使用すると、既知の攻撃元からのパケットを効率的に破棄できます。エッジルーターのBGPポリシーは、信頼できない送信元アドレスを持つパケットのネクストホップが破棄ルートに設定されることを保証します。信頼できない送信元アドレスを持つパケットがルーターに到着すると、ユニキャスト RPF は送信元アドレスのルート ルックアップを実行します。送信元アドレスのルートが破棄ネクストホップを指しているため、パケットは破棄され、カウンターがインクリメントされます。この機能は、IPv4(inet)と IPv6(inet6)の両方のアドレスファミリーでサポートされています。
パケットを破棄する機能を持つユニキャストRPFルーズモードを設定するには、[edit forwarding-options]階層レベルでrpf-loose-mode-discard family (inet | inet6)ステートメントを含めます。
rpf-loose-mode-discard {
family {
inet;
}
}
この例では、デバイスの初期化以上の特別な設定は必要ありません。
ユニキャストRPFルーズモードを設定し、インターフェイスがBOOTPパケットとDHCPパケットを受け入れることを可能にするフェイルフィルターを適用します。フィルターは、送信元アドレスが 0.0.0.0 で宛先アドレスが 255.255.255.255 のすべてのパケットを受け入れます。
パケットを破棄する機能を持つユニキャスト RPF ルーズ モードを設定するには:
VPN でのユニキャスト RPF の設定
VPN インターフェイスでユニキャスト RPF を設定するには、インターフェイスでユニキャスト RPF を有効にし、[edit routing-instances routing-instance-name] 階層レベルで interface ステートメントを含めます。
ユニキャスト RPF は、ルーティング インスタンスで指定したインターフェイスでのみ設定できます。これは、次のことを意味します。
-
レイヤー 3 VPN では、ユニキャスト RPF は CE ルーター インターフェイスでサポートされます。
-
ユニキャスト RPF は、コアに面したインターフェイスではサポートされていません。
-
仮想ルーター ルーティング インスタンスでは、ルーティング インスタンスで指定したすべてのインターフェイスでユニキャスト RPF がサポートされます。
-
入力フィルターが、入力インターフェイスが設定されているルーティング インスタンス以外の場所にパケットを転送した場合、ユニキャスト RPF チェックは実行されません。
レイヤー 3 VPN インターフェイスでユニキャスト RPF を設定します。
[edit interfaces]
so-0/0/0 {
unit 0 {
family inet {
rpf-check;
}
}
}
[edit routing-instance]
VPN-A {
interface so-0/0/0.0;
}
ユニキャスト RPF の設定
ユニキャストRPFストリクトモードを設定し、インターフェイスがBOOTPパケットとDHCPパケットを受け入れることを可能にするフェイルフィルターを適用します。このフィルターは、送信元アドレスが 0.0.0.0 で宛先アドレスが 255.255.255.255 であるすべてのパケットを受け入れます。
[edit firewall]
filter rpf-special-case-dhcp-bootp {
term allow-dhcp-bootp {
from {
source-address {
0.0.0.0/32;
}
address {
255.255.255.255/32;
}
}
then {
count rpf-dhcp-bootp-traffic;
accept;
}
}
term default {
then {
log;
reject;
}
}
}
[edit]
interfaces {
so-0/0/0 {
unit 0 {
family inet {
rpf-check fail-filter rpf-special-case-dhcp-bootp;
}
}
}
}