例:Telnet および SSH アクセスをブロックするフィルターの設定
要件
共有ネットワーク リンクで接続された Junos OS を搭載したデバイスが2台必要です。デバイスの基本的な初期化(管理インターフェース、リモート アクセス、ユーザー ログイン アカウントなど)以外の特別な設定は必要ありません。厳格な要件ではありませんが、R2 デバイスへのコンソール アクセスを推奨します。
この例は、当社のコンテンツテスト チームが検証し、更新したものです。
概要とトポロジー
この例では、IPv4 ステートレス ファイアウォール フィルターを作成します。このフィルターは、発信元が 192.168.1.0/30 サブネットのパケット以外の、ローカル ルーティング エンジン に送信された Telnet または SSH のパケットをログに記録して拒否します。このフィルターはループバック インターフェイスが適用され、ローカル デバイス宛てのトラフィックだけに影響を与えます。フィルターは入力方向に適用します。出力フィルターは使用しません。その結果、ローカルで生成されたすべてのトラフィックが許可されます。
-
特定のサブネットや IP プレフィックスから送信されたパケットを照合するには、入力方向に適用する
source-address
IPv4 の一致条件を使用します。 -
Telnet ポートおよび SSH ポート宛のパケットを照合するには、入力方向に適用された
port telnet
およびport ssh
のIPv4 一致条件とprotocol tcp
の一致条件を組み合わせて使用します。
トポロジーの例
図 1 にこの例のテスト トポロジーを示します。ファイアウォールフィルターがR2デバイスに適用され、DUT(被試験デバイス)になります。R1とR2のデバイスは、192.168.1.0/30 のサブネットが割り当てられたリンクを共有します。両デバイスとも、/32サブネットマスクを使用した192.168.255.0/30 プレフィックスから割り当てられたループバックアドレスを持っています。この簡単な例では、内部ゲートウェイプロトコルが設定されていないため、ループバックアドレス間の到達性は静的ルートで確保されます。
設定
次の例では、設定階層のいくつかのレベルに移動する必要があります。設定モードでのCLIエディターの使用CLIのナビゲーションについては、「1 コンフィグレーション・モードでのCLIエディタの使用」1 を参照してください。
設計上、サンプル フィルターは、R1 の共有サブネットから発信されたものでない限り、R2 への Telnet および SSH のアクセスを制限します。SSH または Telnet を使用して R2 デバイスに直接アクセスすると、フィルターが適用されて接続を失います。この例に沿って設定を行うなら、コンソール アクセスの取得をお勧めします。必要に応じて、R1 デバイスをジャンプ ホストとして使用し、フィルター適用後に R2 への SSH セッションを開始できます。または、サンプルフィルターを変更して、R2デバイスへのアクセスに使用するマシンに割り当てられたIPサブネットを許可することもできます。
次のタスクを実行して、この例に沿って設定を行いましょう。
CLIクイック構成
R1 デバイスの簡易設定
R1 デバイスを、簡易的に設定する場合、以下のコマンドを適宜編集して、[edit]
階層レベルの CLI に貼り付けます。変更を有効にするには、必ず設定モードで commit
を発行してください。
set system host-name R1 set system services ssh root-login allow set interfaces ge-0/0/0 description "Link from R1 to R2" set interfaces ge-0/0/0 unit 0 family inet address 192.168.1.1/30 set interfaces lo0 unit 0 family inet address 192.168.255.1/32 set routing-options static route 192.168.255.2/32 next-hop 192.168.1.2
R2 デバイスの簡易設定
R2 デバイスを、簡易的に設定する場合、以下のコマンドを適宜編集して、[edit]
階層レベルの CLI に貼り付けます。変更を有効にするには、必ず モードで commit
を発行してください。
デバイスのリモートアクセスに影響を与えうる変更を行う際は、commit-confirmed
の使用を検討します。Junos OS の設定有効時の確認要求
set system host-name R2 set system services ssh root-login allow set system services telnet set interfaces ge-0/0/0 description "Link from R2 to R1" set interfaces ge-0/0/0 unit 0 family inet address 192.168.1.2/30 set interfaces lo0 unit 0 family inet filter input local_acl set interfaces lo0 unit 0 family inet address 192.168.255.2/32 set firewall family inet filter local_acl term terminal_access from source-address 192.168.1.0/30 set firewall family inet filter local_acl term terminal_access from protocol tcp set firewall family inet filter local_acl term terminal_access from port ssh set firewall family inet filter local_acl term terminal_access from port telnet set firewall family inet filter local_acl term terminal_access then accept set firewall family inet filter local_acl term terminal_access_denied from protocol tcp set firewall family inet filter local_acl term tcp-estab from protocol tcp set firewall family inet filter local_acl term tcp-estab from tcp-established set firewall family inet filter local_acl term tcp-estab then accept set firewall family inet filter local_acl term terminal_access_denied from port ssh set firewall family inet filter local_acl term terminal_access_denied from port telnet set firewall family inet filter local_acl term terminal_access_denied then log set firewall family inet filter local_acl term terminal_access_denied then reject set firewall family inet filter local_acl term default-term then accept set routing-options static route 192.168.255.1/32 next-hop 192.168.1.1
R1 デバイスの設定
ステップバイステップでの手順
以下の手順に従って、R1 デバイスを設定します。
-
インターフェイスを設定します。
[edit] user@R1# set interfaces ge-0/0/0 description "Link from R1 to R2" user@R1# set interfaces ge-0/0/0 unit 0 family inet address 192.168.1.1/30 user@R1# set interfaces lo0 unit 0 family inet address 192.168.255.1/32
-
R2デバイスのループバックアドレスに対して、ホスト名と静的ルートを設定します。Telnet および SSH のアクセスも設定します。
[edit] user@R1# set system host-name R1 user@R1# set system services ssh root-login allow user@R1# set system services telnet user@R1# set routing-options static route 192.168.255.2/32 next-hop 192.168.1.2
R1 デバイスでの設定の確認とコミット
ステップバイステップでの手順
次の手順に従って、キャンディデート構成をR1デバイスで確認してコミットします。
-
show interfaces
設定モード コマンドを使用して、インターフェイスの設定を確認します。コマンドの出力結果に意図した設定内容が表示されない場合は、この例の手順を再実行して設定を修正します。[edit] user@R1# show interfaces ge-0/0/0 { description "Link from R1 to R2"; unit 0 { family inet { address 192.168.1.1/30; } } } lo0 { unit 0 { family inet { address 192.168.255.1/32; } } }
-
R2 デバイスがループバック アドレスまで到達するのに使用する静的ルートや、SSH および Telnet アクセスが有効であることを確認します。
show routing-options
およびshow system services
設定コマンドを使用します。コマンドの出力結果に意図した設定内容が表示されない場合は、この例の手順を再実行して設定を修正します。[edit] user@R1# show routing-options static { route 192.168.255.2/32 next-hop 192.168.1.2; } user@R1# show system services ssh { root-login allow; } telnet;
-
R1 デバイスの設定に問題がなければ、受験者の設定をコミットします。
[edit] user@R1# commit
R2 デバイスの設定
ステップバイステップでの手順
以下の手順に従って、R2 デバイスを設定します。始めに、Telnet および SSH アクセスを選択的にブロックするステートレス ファイアウォール フィルターを定義します。
-
edit firewall family inet filter
local_aclの階層に移動します。[edit] user@R2# edit firewall family inet filter local_acl
-
フィルター条件terminal_accessを定義します。この条件は、指定されたソースプレフィックスからのTelnetとSSHを許可します。
[edit firewall family inet filter local_acl] user@R2# set term terminal_access from source-address 192.168.1.0/30 user@R2# set term terminal_access from protocol tcp user@R2# set term terminal_access from port ssh user@R2# set term terminal_access from port telnet user@R2# set term terminal_access then accept
-
フィルター条件terminal_access_deniedを定義します。この条件は、その他すべての送信元アドレスからの SSH および Telnet を拒否します。この条件は、条件に一致するログを記録し、明示的なインターネット制御メッセージ プロトコル(ICMP)宛先到達不能応答をパケットの送信元に返信します。フィルターロギングオプションの詳細については、ファイアウォールフィルターロギングアクションをご覧ください。
ヒント:discard
アクションを使用すると、送信元への ICMP エラーメッセージの生成を抑制できます。詳細については、ファイアウォールフィルターロギングアクションをご覧ください。[edit firewall family inet filter local_acl] user@R2# set term terminal_access_denied from protocol tcp user@R2# set term terminal_access_denied from port ssh user@R2# set term terminal_access_denied from port telnet user@R2# set term terminal_access_denied then log user@R2# set term terminal_access_denied then reject user@R2# set term default-term then accept
- オプション。
フィルター条件tcp-estabを定義します。この条件はインターネットへのアウトバウンドアクセスを許可し、Juniper Mist Cloudへの接続をサポートします(tcp-establishedはビットフィールド一致条件のtcp-flags "(ack | rst)"であり、これは確立されたTCPセッションであるものの、TCP接続の最初のパケットではないことを示しています)。
[edit firewall family inet filter local_acl] user@R2# set term tcp-estab from protocol tcp user@R2# set term tcp-estab from tcp-established user@R2# set term tcp-estab then accept
-
フィルター条件default-termを定義します。この条件は、他のすべてのトラフィックを許可します。Junos OSステートレス フィルターの末尾には、暗黙的な deny 条件があることを思い出してください。default-termは、明示的なacceptアクションでフィルターを終了させてこの動作を上書きします。フィルターが終了すると、その他のすべてのトラフィックがファイラーによって許可されます。
注:この例では他のすべてのトラフィックを許可しますが、ご自身のネットワークでは、ルーティングエンジンを保護した方がよいでしょう。詳細についてはルーティングエンジンを保護するを参照ください。
[edit firewall family inet filter local_acl] user@R2# set term default-term then accept
-
ループバックインターフェイスを設定し、入力方向にフィルターを適用します。
[edit] user@R2# set interfaces lo0 unit 0 family inet filter input local_acl user@R2# set interfaces lo0 unit 0 family inet address 192.168.255.2/32
-
ホスト名、ge-0/0/0インターフェイス、R1デバイスのループバックアドレスへの静的ルートを設定し、SSHおよびTelnetを使用したリモートアクセスを有効にします。
[edit] user@R2# set system host-name R2 user@R2# set system services ssh root-login allow user@R2# set system services telnet user@R2# set interfaces ge-0/0/0 description "Link from R2 to R1" user@R2# set interfaces ge-0/0/0 unit 0 family inet address 192.168.1.2/30 user@R2# set routing-options static route 192.168.255.1/32 next-hop 192.168.1.1
R2デバイスでの設定の確認とコミット
ステップバイステップでの手順
次の手順に従って、受験者の設定を R2 デバイスで確認してコミットします。
-
show firewall
設定モード コマンドを使用して、ステートレス ファイアウォール フィルターの設定を確認します。コマンドの出力結果に意図した設定内容が表示されない場合は、この例の手順を再実行して設定を修正します。[edit] user@R2# show firewall family inet { filter local_acl { term terminal_access { from { source-address { 192.168.1.0/30; } protocol tcp; port [ssh telnet]; } then accept; } term terminal_access_denied { from { protocol tcp; port [ssh telnet]; } then { log; reject; } } term default-term { then accept; } } }
-
show interfaces
設定モード コマンドを使用して、インターフェイスの設定とフィルター アプリケーションを確認します。コマンドの出力結果に意図した設定内容が表示されない場合は、この例の手順を再実行して設定を修正します。[edit] user@R2# show interfaces ge-0/0/0 { description "Link from R2 to R1"; unit 0 { family inet { address 192.168.1.2/30; } } } lo0 { unit 0 { family inet { filter { input local_acl; } address 192.168.255.2/32; } } }
-
R1 デバイスのループバック アドレスに到達するのに使用する静的ルートを確認し、Telnet および SSH アクセスが有効であることを確認します。
show routing-options
およびshow system services
設定コマンドを使用します。コマンドの出力結果に意図した設定内容が表示されない場合は、この例の手順を再実行して設定を修正します。[edit] user@R2# show routing-options static { route 192.168.255.1/32 next-hop 192.168.1.1; } user@R2# show system services ssh { root-login allow; } telnet;
-
R2 デバイスの設定に問題がなければ、受験者の設定をコミットします。
ヒント:デバイスのリモートアクセスに影響を与えうる変更を行う際は、
commit-confirmed
の使用を検討します。[edit] user@R2# commit
ステートレス ファイアウォール フィルターの確認
TelnetおよびSSHアクセスを制限するファイ ウォールフィルターが正常に動作していることを確認します。
受理されたパケットの確認
目的
トラフィックが 192.168.1.0/30 サブネットから送信されている場合、ファイアウォール フィルターが SSH と Telnet を正しく許可していることを確認します。
アクション
-
ルーターまたはスイッチのファイアウォール ログを消去します。
user@R2> clear firewall log
-
192.168.1.0/30 サブネット内の IP アドレスのホストから、
ssh 192.168.255.2
コマンドを使用して、許可された送信元アドレスから SSH を使用してデバイスにログインできるか確認します。このパケットは受理されるべきですが、このパケットのパケット ヘッダー情報は、パケット転送エンジンのファイアウォール フィルター ログ バッファーに記録されるべきではありません。これらのデバイス間のuser最初のSSHログインである場合は、SSHホストキーを保存するようにメッセージが現れます。注:デフォルトの R1 デバイスは、宛先に到達するために使用するエグレス インターフェイスから SSH トラフィックを送信します。その結果、このトラフィックは、R1デバイスのge-0/0/0インターフェイスに割り当てられた192.168.1.1アドレスから送信されます。
user@R1>ssh 192.168.255.2 Password: Last login: Wed Aug 19 09:23:58 2020 from 192.168.1.1 --- JUNOS 20.2R1.10 Kernel 64-bit JNPR-11.0-20200608.0016468_buil user@R2>
-
R2デバイスでCLIからログアウトして、SSHセッションを閉じます。
user@R2> exit logout Connection to 192.168.255.2 closed. user@R1>
-
192.168.1.0/30 サブネット内の IP アドレスのホストから、
telnet 192.168.255.2
コマンドを使用して、許可された送信元アドレスから Telnet を使用してルーターまたはスイッチにログインできるか確認します。このパケットは受理されるべきですが、このパケットのパケット ヘッダー情報は、パケット転送エンジンのファイアウォール フィルター ログ バッファーに記録されるべきではありません。user@host-A> telnet 192.168.255.2 Trying 192.168.255.2... Connected to 192.168.255.2. Escape character is '^]'. login: user Password: --- JUNOS 20.2R1.10 Kernel 64-bit JNPR-11.0-20200608.0016468_buil user@R2>
-
R2デバイスでCLIからログアウトして、R2デバイスへのTelnetセッションを閉じます。
user@R2:~ # exit Connection closed by foreign host. root@R1>
-
show firewall log
コマンドを使用して、R2 デバイスの パケット転送エンジン(PFE)のファイアウォール ログ バッファーに、192.168.1.0/30 サブネット内の送信元アドレスを持つエントリーが含まれていないか確認します。user@R2> show firewall log
ログされたパケットと拒否されたパケットの確認
目的
ファイアウォール フィルターが、発信元が 192.168.1.0/30 サブネットではない SSH および Telnet トラフィックを正しく拒否しているか確認します。
アクション
-
ルーターまたはスイッチのファイアウォール ログを消去します。
user@R2> clear firewall log
-
R1デバイスのループバックアドレスから送信されたSSHトラフィックを生成します。このトラフィックの送信元アドレスは、許可された 192.168.1.0/30 サブネットの外にあります。
ssh 192.168.255.2 source 192.168.255.1
コマンドを使用して、この送信元アドレスから SSH を使用してデバイスにログインできないことを確認します。このパケットは拒否され、パケットのヘッダー情報はファイアウォール フィルター ログのバッファーに記録されるはずです。user@R1 ssh 192.168.255.2 source 192.168.255.1 ssh: connect to host 192.168.255.2 port 22: Connection refused root@R1>
この出力結果は、SSH接続が拒否されたことを示しています。この出力は、フィルターが ICMP エラー メッセージを生成していること、および許可されない送信元アドレスから送信された SSH トラフィックを正しくブロックしていることを確認します。
-
R1 デバイスのループバック アドレスから送信された Telenet トラフィックを生成します。このトラフィックの送信元アドレスは、許可された 192.168.1.0/30 サブネットの外にあります。
telnet 192.168.255.2 source 192.168.255.1
コマンドを使用して、この送信元アドレスから Telnet を使用してデバイスにログインできないことを確認します。このパケットは拒否され、パケットのヘッダー情報は PFE のファイアウォール フィルター ログのバッファーに記録されるはずです。user@R1> telnet 192.168.255.2 source 192.168.255.1 Trying 192.168.255.2... telnet: connect to address 192.168.255.2: Connection refused telnet: Unable to connect to remote host
この出力結果は、Telnet接続が拒否されたことを示しています。この出力は、フィルターが ICMP エラー メッセージを生成していること、および許可されない送信元アドレスから送信された Telnet トラフィックを正しくブロックしていることを確認します。
-
show firewall log
コマンドを使用して、R2デバイスのファイアウォールログバッファーに、送信元アドレスの192.168.255.1を持つパケットが拒否されたことを示すエントリーが含まれていないか確認します。user@R2> show firewall log Log : Time Filter Action Interface Protocol Src Addr Dest Addr 15:17:11 pfe R ge-0/0/0.0 TCP 192.168.255.1 192.168.255.2 15:12:04 pfe R ge-0/0/0.0 TCP 192.168.255.1 192.168.255.2
この出力から、送信元アドレス192.168.255.1からのトラフィックがフィルターのterminal_access_denied条件に一致したことがわかります。
Action
列には、これらのパケットが拒否されたことを示すR
が表示されています。インターフェイス、トランスポート プロトコル、送信元アドレスおよび宛先アドレスも一覧表示されています。これらの結果から、この例においてファイアウォールフィルターが正しく動作したことが確認できます。