はじめての「ヤマハ vRX さくらのクラウド版」(8)新しいセキュリティーポリシーの検討

この連載では、ヤマハ 仮想ルーター vRXをさくらのクラウドで検証する環境を構築いたします。「ヤマハ vRX さくらのクラウド版」がどのように動作するのかや検証費用について説明していきます。皆さんも検証環境を作って、いろいろ試してみてください。

パケットの通過/破棄を制御するため、第6回「IPv4パケットフィルターの挙動」、第7回「NATディスクリプターの挙動」を観察してきました。その結果を踏まえて、従来テンプレートとしてよく使われてきたセキュリティーフィルターの定義を見直してみましょう。それぞれにメリットとデメリットがありますので、環境に合わせて見直します。

セキュリティーポリシーの検討

外部ホストからのICMP/TCP/UDPパケットをどのように処理をしたいかという視点でいくつかの方法を組めるようになっています。それらの方法をご紹介いたします。

  1. (おさらい)新しい基本的なセキュリティーフィルター
    • 第6回、第7回などで紹介してきたインターネット接続設定で適用されるセキュリティーフィルターです。
    • ICMP/TCP/UDPはIPマスカレードで処理します。
    • ping(echo request)に対してIPマスカレードがecho replyを返してしまうため、ポートスキャンの対象にされやすいです。(追加検討する2案はpingに返事をしないように設定しています)
    • セッション管理テーブル(NAT)の使用量を最小化できます。
    • 外部ホストからのスキャンのログは、ICMPについては記録できません。TCP/UDPはNATで記録できます。
  2. 外部ホストからのパケットを破棄する方法1
    • ICMP/TCP/UDPのパケットはIPマスカレードを通過させ、静的パケットフィルターで破棄します。
    • セッション管理テーブル(NAT)の使用量が増大します。
    • 外部ホストからのスキャンをvRXのパケットフィルターに集約することで、ログの破棄方法を統一できます。
  3. 外部ホストからのパケットを破棄する方法2
    • TCP/UDPのパケットをIPマスカレードで破棄します。
    • ICMPのパケットはIPマスカレードを通過させ、静的パケットフィルターで破棄します。
    • セッション管理テーブル(NAT)の使用量を節約できます。(TCPとUDPの分を減らせます)
    • 外部ホストからのスキャンのログは、TCPとUDPはNATで、ICMPはパケットフィルターで分散記録されます。

(おさらい)新しい基本的なセキュリティーフィルター

第7回の記事では、よくあるインターネット接続の設定例を必要最小限に簡略化したものにpingの動的フィルターを追加しました。セキュリティーポリシーを検討するにあたり、パケットフィルターとNATディスクリプターの使い方や考え方を再整理します。

外部→内部のセキュリティポリシー(守りを構築する)

  • NATテーブルで管理されていない通信は、NATディスクリプター(IPマスカレード)ですべて破棄します。この動作は、nat descriptor masquerade incoming コマンドの初期値がrejectになっていることによるものです。(初期値がrejectなので設定には表示されていません)
  • IPv4フィルターも動的フィルターで管理されていないパケットは破棄する設定になっていますが、それ以前にNATディスクリプターで破棄されるので、内部NWやvRXホスト機能まで到達しません。

外部→内部のセキュリティポリシーを表にまとめると以下のようになります。

パケット種別条件動作実現方法
ICMPセッション管理中通過(戻りも通過)IPマスカレードと動的フィルター
ping(echo reply)通過(戻りも通過)IPマスカレードと動的フィルター
ping(echo request)echo replyを返すIPマスカレードでreply
TCPセッション管理中通過(戻りも通過)IPマスカレードと動的フィルター
ポート番号0~1023 宛破棄してRSTを返すIPマスカレードでreject
ポート番号1024~65535 宛破棄して何も返さないIPマスカレードでreject
UDPセッション管理中通過(戻りも通過)IPマスカレードと動的フィルター
その他破棄して何も返さないIPマスカレードでreject

内部→外部のセキュリティポリシー

  • DNS、ping、TCP、UDPのパケットは動的フィルターで管理して通します。
  • 戻りパケット(外部→内部)は、NATテーブルや動的フィルターのセッションテーブルで管理して通過させます。

こちらもセキュリティポリシーを表にしたものを以下に示します。

パケット種別条件動作実現方法
ICMPping(echo request)通過(戻りも通過)IPマスカレードと動的フィルター(ping)
その他通過IPマスカレードと静的フィルター(pass)
TCPすべて通過(戻りも通過)IPマスカレードと動的フィルター(tcp)
UDPDNS問い合わせ通過(戻りも通過)IPマスカレードと動的フィルター(domain)
その他通過(戻りも通過)IPマスカレードと動的フィルター(udp)

設定例

これらのセキュリティポリシーをvRXの設定コマンドとして表現したものを以下に示します。

... <<<IPマスカレードを設定する>>>
 
[NATディスクリプタの定義]
# nat descriptor log on                {NATのアドレス割当をログに記録する}
# nat descriptor type 1 masquerade         {変換タイプをIPマスカレードに設定する}
# nat descriptor address outer 1 primary      {LAN1アドレスをNATの外側IPアドレスに設定する}

[NATディスクリプターのLAN1インターフェースへの適用]
# ip lan1 nat descriptor 1              {LAN1インターフェースへNATディスクリプタを適用}

... <<<セキュリティーフィルターを設定する>>>
# syslog notice on

[静的フィルターの定義]
# ip filter 298 reject-log * * * * *        {INは、破棄してログを記録する}
# ip filter 299 pass-log * * * * *         {OUTは、通してログを記録する}

[動的フィルターの定義]
# ip filter dynamic 280 * * domain
# ip filter dynamic 281 * * ping           {内→外のpingを通す}
# ip filter dynamic 298 * * tcp
# ip filter dynamic 299 * * udp

[接続先フィルターの入力(IN)と出力(OUT)の適用]
# ip lan1 secure filter in 298
# ip lan1 secure filter out 299 dynamic 280 281 298 299

外部ホストからのパケットを破棄する方法1

期待していないスキャンをきちんと記録して分析しやすくするため、セキュリティーフィルターでパケットの破棄を実施するようにしてみます。

前節で紹介した基本的なセキュリティーフィルターでは、nat descriptor masquerade incoming コマンドの値をrejectに設定することでパケットの返信や破棄を行っていました。これをforwardに変更してパケットをvRXに転送します。vRXに転送することでvRX内部のIPv4パケットフィルターで処理されるようになるので、ICMP echo requestも破棄されるようになります。これによりpingによるスキャンに反応しなくなります。nmapによるスキャンではdownと判定されます。

外部→内部のセキュリティポリシー

  • NATテーブルで管理されていない通信は、vRX内部のIPv4パケットフィルターに転送します。TCPとUDPは nat descriptor masquerade incoming コマンドの設定、ICMPは nat descriptor masquerade static コマンドの設定により実現します。
  • IPv4パケットフィルターは、動的フィルターでセッション管理していないパケットをすべて破棄します。期待していないスキャンはここで破棄されます。
  • NATを通過させるため、NAT管理テーブルの使用量が増大する点に注意が必要です。

これらのセキュリティポリシーを表にしたものを以下に示します。

パケット種別条件動作実現方法
ICMPセッション管理中通過(戻りも通過)IPマスカレードと動的フィルター
ping(echo reply)通過(戻りも通過)IPマスカレードと動的フィルター
ping(echo request)破棄静的IPマスカレードでICMP通過
動的フィルターでreject
その他破棄静的IPマスカレードでICMP通過
動的フィルターでreject
TCPセッション管理中通過(戻りも通過)IPマスカレードと動的フィルター
その他破棄IPマスカレードでforward
静的フィルターでreject
UDPセッション管理中通過(戻りも通過)IPマスカレードと動的フィルター
その他破棄IPマスカレードでforward
静的フィルターでreject

内部→外部のセキュリティポリシー

内部→外部のポリシーは、「(おさらい)新しい基本的なセキュリティーフィルター」の「内部→外部のセキュリティポリシー」で説明したポリシーと同様です。

  • DNS、ping、TCP、UDPのパケットは動的フィルターで管理して通します。
  • 戻りパケット(外部→内部)は、NATテーブルや動的フィルターのセッションテーブルで管理して通過させます。
内部→外部条件動作実現方法
ICMPping(echo request)通過(戻りも通過)IPマスカレードと動的フィルター(ping)
その他通過IPマスカレードと静的フィルター(pass)
TCPすべて通過(戻りも通過)IPマスカレードと動的フィルター(tcp)
UDPDNS問い合わせ通過(戻りも通過)IPマスカレードと動的フィルター(domain)
その他通過(戻りも通過)IPマスカレードと動的フィルター(udp)

設定例

設定内容は「基本的なセキュリティーフィルター」とは少し異なります。

... <<<IPマスカレードを設定する>>>
 
[NATディスクリプタの定義]
# nat descriptor log on               {NATのアドレス割当をログに記録する}
# nat descriptor type 1 masquerade        {変換タイプをIPマスカレードに設定する}
# nat descriptor address outer 1 primary     {LAN1アドレスをNATの外側IPアドレスに設定する}
# nat descriptor masquerade incoming 1  forward ≪サーバに割り当てられたグローバルアドレス≫ 
# nat descriptor masquerade static 1 1 ≪サーバに割り当てられたグローバルアドレス≫ icmp 

[NATディスクリプターのLAN1インターフェースへの適用]
# ip lan1 nat descriptor 1             {LAN1インターフェースへNATディスクリプタを適用}

... <<<セキュリティーフィルターを設定する>>>
# syslog notice on

[静的フィルターの定義]
# ip filter 298 reject-log * * * * *       {INは、破棄してログを記録する}
# ip filter 299 pass-log * * * * *        {OUTは、通してログを記録する}

[動的フィルターの定義]
# ip filter dynamic 280 * * domain
# ip filter dynamic 281 * * ping         {内→外のpingを通す}
# ip filter dynamic 298 * * tcp
# ip filter dynamic 299 * * udp

[接続先フィルターの入力(IN)と出力(OUT)の適用]
# ip lan1 secure filter in 298
# ip lan1 secure filter out 299 dynamic 280 281 298 299

実際に設定を行っている画面を以下に示します。

pingを実行する(1) 内部→外部

内部からのpingを行っている画面を以下に示します。第7回の記事や「基本的なセキュリティーフィルター」と同じ動作をしています。

pingを実行する(2) 外部→内部

実行結果の画面を以下に示します。外部ホストからpingを4回実施しましたが応答(echo reply)が届いていないことがわかります。

show logの結果を下図に提示します。IPアドレスをマスクしているところはそれぞれ以下の通りです。

  • 水色で部分マスクしている箇所は、vRXに付与されたIPアドレスです(末尾の".19"のみ表示しています)。
  • 濃い青でマスクしている箇所は、vRXに対してICMPパケットを送信している外部のホストです。
  • 赤でマスクしている箇所は、TCPで接続を試みている外部のホストです。

ログはいくつかのパターンに分類できます。パターンごとに解説します。

[NAT(1): LAN1] Bound ICMP ~

これはICMPのパケットを受信して、1つのNATテーブルが作成されたことを示します。

LAN1 Rejected IN(298) filter: ICMP ~ : echo request
same message repeated 1 times

これはICMPのecho requestを静的パケットフィルターの298番に従って破棄したことを示します。"same message repeated 1 times"は、同じログが連続して出力されたときに記録されるものです。ここでは"1 times"なので1回ですが、例えば50回連続すると"50 times"になります。

[NAT(1): LAN1] Bound TCP ~

これは外部からのTCP接続に対してIPマスカレードにてNATテーブルに登録後、vRXに転送しています。

LAN1 Rejected IN(298) filter: TCP ~

これは外部ホストからのスキャンを静的パケットフィルターの298番に従って破棄したことを示すログです。

これらのログを通して見ると、外部ホストからのスキャンはIPマスカレードを通過して、静的パケットフィルターで記録しながら破棄されていることがわかります。

nmapによるスキャン

続いてnmapによるスキャンを試してみましたが、pingに対する応答がなかったので、vRXがdownしていると判定してスキャンを中止していました。

このときのvRXのログをshow logで確認したものを下図に示します。nmapはTCP443番ポート(HTTPS)のスキャンとICMP echo requestの送信を2度繰り返していますが、vRXはどれにも返事をしなかったことがわかります。

nmapの実行結果の画面を以下に示します。Ping Scanによりdownと判定し、その後のスキャンを中止していることがわかります。

nmapの実行結果を表にまとめたものです。

調査内容結果
pingdown
SYN Stealth Scan (1000 Ports)filtered:ー port
ignored states:ー ports
no-responce:ー ports
OS推定
Tracerouteー hops
調査所要時間4.25 秒

実用上の設定

外部ホストから送られてきた不要なパケットをパケットフィルターでまとめて破棄することができました。その破棄するパケットのログはパケットフィルターにまとめられるため、NATディスクリプターのログは出力されません。停止してよいでしょう。

... <<<NATディスクリプターのログ出力を止める>>>

# no nat descriptor log

外部ホストからのパケットを破棄する方法2

外部ホストからのパケットをvRX内部のフィルターで破棄する方法をもう1つご紹介します。前節の「外部ホストからのパケットを破棄する方法1」ではICMPもTCPもUDPもvRX内部のIPv4フィルターで破棄していました。これに対してここで紹介する方法では、効率よく破棄を実行するため、ICMPはIPv4フィルターで破棄し、TCPとUDPはNATディスクリプターで破棄します。

※NATディスクリプターでICMPを破棄する機能はありません。

破棄するプロトコル方法1における実現方法方法2における実現方法
ICMPIPv4フィルターIPv4フィルター
TCPIPv4フィルターNATディスクリプター
UDPIPv4フィルターNATディスクリプター

外部→内部のセキュリティポリシー

  • NATテーブルで管理されていない通信は、vRX内部のIPv4パケットフィルターに転送します。TCPとUDPは nat descriptor masquerade incoming コマンドの設定値をdiscardに変更することで破棄し、ICMPは nat descriptor masquerade static コマンドで通過させて、IPv4フィルターで処理させます。
  • IPv4パケットフィルターは、動的フィルターでセッション管理していないパケットをすべて破棄します。期待していないスキャンはここで破棄されます。
  • NATを通過させるため、NAT管理テーブルの使用量が増大する点に注意が必要です。

これらのセキュリティポリシーを表にしたものを以下に示します。前節で紹介した方法と比較すると、TCPおよびUDPの「その他」の条件下でパケットを破棄する方法が異なります。方法1ではIPマスカレードでforwardしてから静的フィルターでrejectしていましたが、方法2はIPマスカレードでdiscard(破棄)しています。

IPマスカレード設定方法1における設定方法2における設定
descriptor masquerade incoming コマンドforward (TCPとUDPを通す)discard (TCPとUDPを破棄)
descriptor masquerade static コマンド ICMPを通すICMPを通す
外部→内部条件動作実現方法
ICMPセッション管理中通過(戻りも通過)IPマスカレードと動的フィルター
ping(echo reply)通過(戻りも通過)IPマスカレードと動的フィルター
ping(echo request)破棄静的IPマスカレードでICMP通過
動的フィルターでreject
その他破棄静的IPマスカレードでICMP通過
動的フィルターでreject
TCPセッション管理中通過(戻りも通過)IPマスカレードと動的フィルター
その他破棄IPマスカレードでdiscard
UDPセッション管理中通過(戻りも通過)IPマスカレードと動的フィルター
その他破棄IPマスカレードでdiscard

内部→外部のセキュリティポリシー

内部→外部のポリシーは、「(おさらい)新しい基本的なセキュリティーフィルター」の「内部→外部のセキュリティポリシー」と同様です。

  • DNS、ping、TCP、UDPのパケットは動的フィルターで管理して通します。
  • 戻りパケット(外部→内部)は、NATテーブルや動的フィルターのセッションテーブルで管理して通過させます。
内部→外部条件動作実現方法
ICMPping(echo request)通過(戻りも通過)IPマスカレードと動的フィルター(ping)
その他通過IPマスカレードと静的フィルター(pass)
TCPすべて通過(戻りも通過)IPマスカレードと動的フィルター(tcp)
UDPDNS問い合わせ通過(戻りも通過)IPマスカレードと動的フィルター(domain)
その他通過(戻りも通過)IPマスカレードと動的フィルター(udp)

設定例

こちらも設定例は他の方法と少し異なります。

... <<<IPマスカレードを設定する>>>
 
[NATディスクリプタの定義]
# nat descriptor log on                   {NATのアドレス割当をログに記録する}
# nat descriptor type 1 masquerade             {変換タイプをIPマスカレードに設定する}
# nat descriptor address outer 1 primary          {LAN1アドレスをNATの外側IPアドレスに設定する}
# nat descriptor masquerade incoming 1 discard  
# nat descriptor masquerade static 1 1 ≪サーバに割り当てられたグローバルアドレス≫ icmp 

[NATディスクリプターのLAN1インターフェースへの適用]
# ip lan1 nat descriptor 1                 {LAN1インターフェースへNATディスクリプタを適用}

... <<<セキュリティーフィルターを設定する>>>
# syslog notice on

[静的フィルターの定義]
# ip filter 298 reject-log * * * * *               {INは、破棄してログを記録する}
# ip filter 299 pass-log * * * * *                {OUTは、通してログを記録する}

[動的フィルターの定義]
# ip filter dynamic 280 * * domain
# ip filter dynamic 281 * * ping                 {内→外のpingを通す}
# ip filter dynamic 298 * * tcp
# ip filter dynamic 299 * * udp

[接続先フィルターの入力(IN)と出力(OUT)の適用]
# ip lan1 secure filter in 298
# ip lan1 secure filter out 299 dynamic 280 281 298 299

セキュリティーポリシーのまとめ

検討したポリシーとその選び方を紹介しつつ、環境に合わせてカスタマイズするポイントを紹介いたします。

セキュリティーポリシーの選び方

いくつかの選び方を例示します。要件に合わせて、実現するセキュリティーポリシーを選択してください。

本連載で選択するセキュリティーポリシー

本連載では、外部ホストからのスキャンのログをvRX内部のパケットフィルターで統一するために「外部ホストからのパケットを破棄する方法1」を選択していきます。

また、次回の記事ではvRXへのSSHリモートアクセス環境を準備して、このセキュリティーフィルターに静的IPマスカレードや静的フィルタリングを追加設定して、インターネットからアクセスできるようにしていきます。

カスタマイズのポイント

vRXのパケットフィルター設定をカスタマイズする際にポイントになりそうな点をいくつか紹介します。

1) NATディスクリプターのログ出力を抑止

「外部ホストからのパケットを破棄する方法1」の「実用上の設定」でも説明しましたが、破棄するパケットのログはパケットフィルターにまとめられるので、NATディスクリプターのログは出力されません。停止してよいでしょう。

... <<<NATディスクリプターのログ出力を止める>>>

# no nat descriptor log

2) 静的フィルターや動的フィルターのログ出力を抑止

静的フィルターや動的フィルターの記録が不要なら、ログ出力を停止することができます。以下の表に示すような設定を行ってください。

静的フィルターでログを記録する静的フィルターでログを記録しない
pass-logpass
pass-nolog
reject-log
reject
reject-nolog
動的フィルターでログを記録する動的フィルターでログを記録しない
未設定 (初期値)
syslog=on
syslog=off

3) 動的フィルターの対応アプリケーション

動的フィルターは対応アプリケーションが多数用意されています。利用環境に合わせてこれらの定義を追加登録します。以下は ip filter dynamic コマンドから対応プロトコルを抜粋したものです。

  • Rev.6.02.03(May 2001)以降などの「ファイアウォール機能」
    • tcp/udp/ftp/tftp/domain/www/smtp/pop3/telnet/netmeeting
  • Rev.10.01以降
    • echo/discard/daytime/chargen/ftp/ssh/telnet/smtp/time/whois/dns/domain/tftp/gopher/finger/http/www/pop3/sunrpc/ident/nntp/ntp/ms-rpc/netbios_ns/netbios_dgm/netbios_ssn/imap/snmp/snmptrap/bgp/imap3/ldap/https/ms-ds/ike/rlogin/rwho/rsh/syslog/printer/rip/ripng/ms-sql/radius/l2tp/pptp/nfs/msblast/ipsec-nat-t/sip/ping/ping6/tcp/udp
  • Rev.10.01.47以降、および、Rev.11.01以降
    • submission
コマンドや資料概要
ip filter dynamic コマンド動的フィルターの定義
技術資料:ファイアウォール機能「4.1 動的フィルターの定義」を参照
Rev.6.02.03 リリースノートファイアウォール機能の初実装
Rev.14.00.32 リリースノート仕様変更 [10]

4) 管理テーブルのタイマー調整

「外部ホストからのパケットを破棄する方法1」や「外部ホストからのパケットを破棄する方法2」は、外部ホストからのスキャンでNATテーブル(セッション管理情報)を大量に消費してしまいます。NATテーブルのタイマーを短縮すると、不要になったセッション情報を早期に解放できます。設定方法は以下のコマンドを参照してください。

コマンド概要
nat descriptor timerNATテーブルのセッションを消去するタイマー設定
(参考) ip filter dynamic のtimeoutオプション動的フィルターのセッションを消去するタイマー設定

5) 通常のパケットフィルターでは検出や破棄が困難なパケットフィルター機能を明示的に有効にする

ip filter source-routeコマンドやip filter directed-broadcastコマンドは、通常のパケットフィルターでは破棄できないようなパケットを破棄する機能です。初期値は"on"です。"on"と明示的に設定するとconfigとして表示されます。

... <<<特殊なパケットフィルター機能を有効にしていることを明示する>>>

# ip filter source-route on       {Source-route付きIPパケットのフィルタリング}
# ip filter directed-broadcast on   {directed-broadcastのフィルタリング}
コマンド概要
ip filter source-routeSource-routeオプション付きパケットを破棄します
ip filter directed-broadcastディレクテッドブロードキャストアドレス宛のパケットを破棄します

関連リンク

vRXで利用できるコマンド操作に関連する公式情報です。

ヤマハの公開情報
ヤマハネットワーク製品 技術情報ページ
ヤマハ vRX ユーザーガイド
→ → インターネットゲートウェイとして動作させる
ファイアウォール機能
NATディスクリプター機能
→ → NATディスクリプターの「内向きのパケットの処理」
コマンドリファレンス
→ → nat descriptor masquerade static
→ → nat descriptor masquerade incoming
→ → ip filter dynamic
→ → nat descriptor log
→ → nat descriptor timer

検証経費

今回検証したサーバとvRXに関する費用は次の通りです。

項目経費
vRXを動作させる仮想マシン起動からシャットダウンまでの稼働時間に応じた課金が発生します
vRXのアーカイブ今回の動作確認だけなら費用は発生しません
vRXのライセンス今回の動作確認だけなら費用は発生しません

連載トップへのリンク

連載回数番号リンク
第1回はじめる前に
第2回インストールとシャットダウン
第3回初期設定
第4回入出力を観測
第5回インストール状態確認
第6回セキュリティーフィルター適用
第7回NAT(IPマスカレード、NAPT)の適用
「はじめてのさくらのクラウド版vRX」の連載一覧

※画面キャプチャーなどは、2025年3月時点のものです。