はじめての「ヤマハ vRX さくらのクラウド版」(6)セキュリティーフィルター適用

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

第5回の記事では、「ヤマハ 仮想ルーター vRX」はインストールした状態で接続要求にどのように返事をするのかをツールで観察しました。今回は簡潔なセキュリティーフィルターを適用して、フィルターの動作を観察します。

観察環境の概念図

観察環境は第5回と変わりません。観察するvRXの機能が変わります。

vRXを起動する

検証を開始する前に、検証対象のvRXを起動します。

今回の観察ポイント

セキュリティーフィルターのおさらい」をしてから、2つの定義パターンを外部から観察します。

前提や背景:セキュリティーフィルターをおさらい

Web GUIのプロバイダ接続の設定で自動生成されるなど、ヤマハネットワーク製品の一般的なセキュリティーフィルターの定義を参考に、フィルター定義の内容を簡単に確認します。

観察(1):セキュリティーフィルター定義(1)→ICMPの静的フィルター機能

フィルター動作を観察することに絞り込んだシンプルな定義です。静的フィルターを用いて、pingが双方向で通過する様子を観察します。

観察(2):セキュリティーフィルター定義(2)→pingの動的フィルター機能

動的フィルターの「ping」プロトコルを利用したシンプルな定義です。動的フィルターを使って、中から外に向けてpingが通過する様子を観察します。外から中へのpingは静的フィルターで破棄されます。

セキュリティーフィルターをおさらい

ヤマハルーターで自動適用されるセキュリティーフィルターは、ファイアウォール機能(動的フィルター機能)がリリースされるタイミングでRTA54i(初めてブロードバンド回線に対応した製品)に実装されたWeb GUIの組み込み機能です。だれもが簡単に安全を守れるように「7段階のセキュリティーレベル」を設定し、簡単に選べるように工夫しています。セキュリティーレベル7段階で利用するすべての定義を登録しておき、レベルに応じて適用するフィルターを選択します。この7段階は、さまざまな実績を経て、最終的にはレベル6またはレベル7が標準(デファクトスタンダード)になり、現在ではレベル選択機能は廃止されています。

ここでは、独自のセキュリティーフィルターを設計する前にどのように利用されているか、おさらいをします。

ヤマハの公開情報
設定例NVR500 GUI「プロバイダ情報の設定」で設定されるIPフィルターの解説
設定例Web GUI「プロバイダー接続」で設定されるIPフィルターの解説
設定例IPフィルターをWeb GUIから設定する手順
ヤマハ vRX ユーザーガイドファイアウォールを設定する

自動生成される一般的なセキュリティーフィルターの定義例

ネットボランチシリーズのWeb GUIなどで自動生成されるパケットフィルターの定義イメージを紹介します。

  • 緑字(192.168.100.0/24など)は、プライベートIPアドレスや内部セグメントに付与されたIPアドレスなどを表します。
  • 赤字(180など)は、静的フィルター番号、動的フィルター番号、プロトコルを表すニーモニックなどを表します。
#
# LAN1は、内部セグメントに接続され、 192.168.100.1/24 が割り当てられている。
# LAN2は、インターネット接続回線(WAN)に接続されている。
# LAN2に付与されたグローバルIPアドレスをフィルター定義の"192.168.100.0/24"と併記すべき場合がある。
#
ip filter source-route on                 {Source-route付きIPパケットのフィルタリング}
ip filter directed-broadcast on              {directed-broadcastのフィルタリング}
# 
# 静的フィルターの定義
# 
## ingress/egress filterのための定義
ip filter 100 reject 10.0.0.0/8 * * * *          {ingress, プライベートIPアドレスの通信を拒否}
ip filter 101 reject 172.16.0.0/12 * * * *        {ingress, プライベートIPアドレスの通信を拒否}
ip filter 102 reject 192.168.0.0/16 * * * *        {ingress, プライベートIPアドレスの通信を拒否}
ip filter 103 reject 192.168.100.0/24 * * * *        {ingress, LAN側と同じIPアドレスの通信を拒否}
ip filter 110 reject * 10.0.0.0/8 * * *          {egress, プライベートIPアドレスの通信を拒否}
ip filter 111 reject * 172.16.0.0/12 * * *        {egress, プライベートIPアドレスの通信を拒否}
ip filter 112 reject * 192.168.0.0/16 * * *        {egress, プライベートIPアドレスの通信を拒否}
ip filter 113 reject * 192.168.100.0/24 * * *        {egress, LAN側と同じIPアドレスの通信を拒否}
## 特定サービス対応のための定義
ip filter 120 reject * * udp,tcp 135 *           {Windowsが脆弱になりやすい通信を拒否}
ip filter 121 reject * * udp,tcp * 135           {Windowsが脆弱になりやすい通信を拒否}
ip filter 122 reject * * udp,tcp netbios_ns-netbios_ssn * {Windowsが脆弱になりやすい通信を拒否}
ip filter 123 reject * * udp,tcp * netbios_ns-netbios_ssn {Windowsが脆弱になりやすい通信を拒否}
ip filter 124 reject * * udp,tcp 445 *           {Windowsが脆弱になりやすい通信を拒否}
ip filter 125 reject * * udp,tcp * 445           {Windowsが脆弱になりやすい通信を拒否}
ip filter 126 restrict * * tcpfin * www,21,nntp      {従量課金回線の不必要な発呼抑制}
ip filter 127 restrict * * tcprst * www,21,nntp      {従量課金回線の不必要な発呼抑制}
## ネットワークを守るセキュリティーフィルターの定義
ip filter 130 pass * 192.168.100.0/24 icmp * *       {ICMPは常に通す}
ip filter 131 pass * 192.168.100.0/24 established * *    {静的フィルターのみ, 通信が確立されたTCPは常に通す}
ip filter 132 pass * 192.168.100.0/24 tcp * ident      {メールサーバーのidentは常に通す}
ip filter 133 pass * 192.168.100.0/24 tcp ftpdata *     {静的フィルターのみ, FTPは常に通す}
ip filter 134 pass * 192.168.100.0/24 tcp,udp * domain   {静的フィルターのみ, DNS問い合わせは常に通す}
ip filter 135 pass * 192.168.100.0/24 udp domain *     {静的フィルターのみ, DNS問い合わせは常に通す}
ip filter 136 pass * 192.168.100.0/24 udp * ntp       {静的フィルターのみ, NTPは常に通す}
ip filter 137 pass * 192.168.100.0/24 udp ntp *       {静的フィルターのみ, NTPは常に通す}
## ネットワークを守るセキュリティーフィルターの定義
ip filter 199 pass * * * * *
# 
# 動的フィルターの定義
# 
## 許可するサービスの定義
ip filter dynamic 180 * * ftp                {動的フィルターのみ, FTPを使うときは通す}
ip filter dynamic 181 * * domain               {動的フィルターのみ, DNSを使うときは通す}
ip filter dynamic 182 * * www                {動的フィルターのみ, HTTPを使うときは通す}
ip filter dynamic 183 * * smtp                {動的フィルターのみ, SMTPを使うときは通す}
ip filter dynamic 184 * * pop3                {動的フィルターのみ, POP3を使うときは通す}
ip filter dynamic 185 * * submission            {動的フィルターのみ, Submissionを使うときは通す}
ip filter dynamic 198 * * tcp                {動的フィルターのみ, FTPを使うときは通す}
ip filter dynamic 199 * * udp                {動的フィルターのみ, FTPを使うときは通す}

#
# 接続先フィルターの入力(IN)と出力(OUT)の適用
#
ip lan1 secure filter in 100 101 102 103 120 121 122 123 124 125 130 132
ip lan1 secure filter out 110 111 112 113 120 121 122 123 124 125 126 127 199 dynamic 180 181 182 183 184 185 198 199
# 
# 

上記の例のうち、まず静的パケットフィルターに関する説明を以下に記します。

  • source-routeやdirected-broadcastなどの、通常のフィルター定義では防ぎにくい攻撃パケットを破棄する便利機能は有効にしておきます。
  • 「ingress/egress filterのための定義」は、内部LANで使用するIPアドレスを外部から投入して内部のサービス妨害を狙うような攻撃や、意図せず外部の妨害をしてしまうような事態をあらかじめ防ぐフィルターです。必要に応じて適用します。
  • 「特定サービス対応のための定義」は、Windowsなどを内部LANで利用するときに便利な共有機能が使用する通信の定義です。内部LANで利用するなら良いですが、インターネット上で利用すると攻撃されやすいので、不要な場合はこの定義を使ってブロックしておきます。攻撃者はこういった便利なサービスの脆弱性を狙っているので、インターネットから入ってくるものはすべて破棄するとよいでしょう。
  • 「ネットワークを守るセキュリティーフィルターの定義」は、RT100iの頃に実装されたフィルター機能の定義です。ブロードバンドの普及に合わせて、この定義をベースに必要なところを動的フィルターに切り替えてきました。
  • 「ネットワークを守るセキュリティーフィルターの定義」は、RT100iの頃に実装されたフィルター機能の定義です。ブロードバンドの普及に合わせて、この定義をベースに必要なところを動的フィルターに切り替えてきました。静的フィルターのみで構築する場合は利用しているサービスのポートを常に開放しますが、それでは常に攻撃にさらされて危険なので、そういうときに動的パケットフィルターを活用します。動的パケットフィルターを利用すると「通信している間のみ開放される」ので、常時開放しているポートを減らせます。

その後に動的フィルターが定義されていますが、定義されている内容を解説する前に、動的フィルターを使ったセキュリティーフィルターの組み方についての基本的な考え方を説明します。

  • INは公開サービスのみ通過させ、それ以外は破棄します。通過させる定義は最小限に絞り込むのが良いです。
  • OUTは基本的に通過させます。
    • 静的フィルターは基本的に許可します。しかし、egress filterや外部との通信を禁止したいサービス(Windowsファイル共有など情報漏洩につながるものや攻撃になりえるものなど)があれば破棄します。
    • 動的フィルターの定義にて、通してもよいサービスを登録します。動的フィルターにヒットすると利用してよいセッションとして登録され、その相互通信が許可されます。

動的フィルターの定義に関しては、上記の例で記載しているのはもっとも基本的なサービスの数々です。随時対応サービスが追加されているので、コマンドリファレンスなどを参考に必要なサービスを追加登録します。執筆時点では次のようなプロトコルの定義が利用可能になっています。

  • tcp/udp/ftp/tftp/domain/www/smtp/pop3/telnet/netmeeting
  • 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
  • submission
ヤマハの公開情報
ヤマハネットワーク製品 製品ページ
設定例
→→ 設定例:WAN側セキュリティー機能を利用する
→→→ 設定例:NVR500 GUI「プロバイダ情報の設定」で設定されるIPフィルターの解説
→→→ 設定例:Web GUI「プロバイダー接続」で設定されるIPフィルターの解説
→→→ 設定例:IPフィルターをWeb GUIから設定する手順
ヤマハネットワーク製品 技術情報ページ
ヤマハ vRX ユーザーガイド
→ → ファイアウォールを設定する
ファイアウォール機能(動的パケットフィルター)
コマンドリファレンス
→ → ip filter
→ → ip dynamic filter
→ → show ip connection

セキュリティーフィルター定義(1)

ここからはセキュリティーフィルターの定義パターンを適用してみて、vRXの動作を外部から観察します。1つ目の定義パターンはフィルター動作を観察することに絞り込んだシンプルな定義です。静的フィルターを用いて、pingが双方向で通過する様子を観察します。

はじめに今回の作業における一連の操作コマンドを列挙します。その後で各作業項目ごとに解説します。

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

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

[動的フィルターの定義]
# ip filter dynamic 280 * * domain
# ip filter dynamic 298 * * tcp
# ip filter dynamic 299 * * udp

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

[設定ファイル番号の2番に保存しておく]
# save 2 "secure filter dynamic"
# show config list

... <<<スキャン操作の前にログをクリアする>>>
# clear log

... <<<この間にスキャン操作(ping, traceroute, nmapなど)を行う>>>

... <<<パケットの入出力を観測する>>>
# show log

... <<<動的フィルターの管理コネクションの表示>>>
# show ip connection

セキュリティーフィルターを設定する

はじめにセキュリティーフィルターの設定です。コントロールパネルのコンソールから手入力するので定義は最小限に絞り込みながら、通信ログは記録するようにします。設定内容としては、IN方向は静的フィルターによりICMPを通し、それ以外はすべて破棄します。一方、OUT方向は動的フィルターにより、DNS問い合わせ、UDP/TCPのプロトコルを制御して通過させます。

設定の記録

設定コマンドを一通り投入したら、saveコマンドを用いて設定を保存します。上記の例では設定ファイル番号2番に保存しています。

下記の画像は、saveコマンドによる保存操作までを行い、show config listで設定内容を確認したものです。

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

設定ができたら、clear logコマンドを実行してからインターネット上のサーバーにpingを実行します。その後、ログを確認します。

下記の画像は実行例です。pingの対象サーバーとしてホスト名を指定したので、DNSサーバーに問い合わせてIPアドレスを調べた後にpingを行っています。show logで通信記録を確認してみると、以下のような通信を確認することができます。

  • 外部からのポートスキャンを1件破棄(赤色でマスクしたところ)
  • DNSの正引きと逆引きの問い合わせは静的フィルターで通過
  • DNS問い合わせの戻りパケットは動的フィルターで通過
  • ping(ICMP echo request/echo reply)のOUTとINの組(合計6セット)が静的フィルターで通過

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

手元のPCからvRXに向けてpingを実行します。下記の例では4回送信して4回返事がありました。

show logコマンドでログを見ると、4回のping(INとOUTの組)と、それ以外にどこかからのポートスキャンが1回記録されているのが確認できました。

nmapを実行する(1) 外→内(Intense scan)

手元のPCからNmap(Intense Scan)を実行しました。以下はNmapの実行結果の概要です。

調査内容結果
pingup
SYN Stealth Scan (1000 Ports)filtered, ignored states, no-responce
OS推定不明
Traceroute16 hops
調査所要時間42.26 秒

show logでログを確認すると、TCP/443(https)と1組のpingの後、ランダムな順番でポートスキャンを行っています。1000個のポートに対するスキャンは大量のログを残していました。

ポートスキャンの記録が続きます。

nmapを実行する(2) 外→内(Intense scan, all TCP ports)

比較として「all TCP ports」を試しました。これはポート番号1から65535までの全ポートをスキャンするものです。想定外のポートが開いていないかどうか一度は確認しておきたいところですが、すべてをスキャンするには約37分かかってしまいました。以下に実行結果の概要を示します。

調査内容結果
pingup
SYN Stealth Scan (65535 Ports)filtered, ignored states, no-responce
OS推定不明
Traceroute16 hops
調査所要時間2195.16

セキュリティーフィルター定義(2)

続いてもうひとつのセキュリティーフィルター定義を試してみます。こちらは動的フィルターの「ping」プロトコルを利用したシンプルな定義です。動的フィルターを用いて、外から中へのpingは破棄し、中から外へのpingを通過させる様子を観察します。

こちらも一連の操作コマンドを先に提示し、その後で各作業項目ごとの解説を行います。

... <<<セキュリティーフィルターを設定する>>>
# 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

[設定ファイル番号の3番に保存しておく]
# save 3 "secure filter dynamic ping"
# show config list

... <<<スキャン操作の前にログをクリアする>>>
# clear log

... <<<この間にスキャン操作(ping, traceroute, nmapなど)を行う>>>
 
... <<<パケットの入出力を観測する>>>
# show log

... <<<動的フィルターの管理コネクションの表示>>>
# show ip connection

セキュリティーフィルターを設定する

こちらもまずはセキュリティーフィルターを設定します。IN方向は静的フィルターによりすべて破棄します。一方、OUT方向は動的フィルターにより、DNS問い合わせ、ping、UDP/TCPのプロトコルを制御して通過させます。

設定の記録

設定コマンドを一通り投入したら、saveコマンドを用いて設定を保存します。上記の例では設定ファイル番号3番に保存しています。

下記の画像は、saveコマンドによる保存操作までを行い、show config listで設定内容を確認したものです。

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

設定ができたら、clear logコマンドを実行してからインターネット上のサーバーにpingを実行します(下記画像参照)。pingの対象サーバーとしてホスト名を指定したので、DNSサーバーに問い合わせてIPアドレスを調べた後にpingを行っています。show logで通信記録を確認してみると、以下のような通信を確認することができます。

  • DNSの正引きと逆引きの問い合わせ
  • 外部のポートスキャンを5件破棄 (赤色でマスクしたところ)
  • DNSの正引きと逆引きの問い合わせは静的フィルターで通過
  • DNS問い合わせの戻りパケットは動的フィルターで通過
  • ping(ICMP echo request)のOUTが5個、静的フィルターで通過

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

手元のPCからvRXに向けてpingを実行します。今回は4回送信しましたが返事がありませんでした。

show logコマンドでログを確認すると、4回のpingを破棄していました。

nmapを実行する(1) 外→内(Intense scan)

手元のPCからNmap(Intensec Scan)を実行しましたが、pingを実行したところでホストがダウンしていると判定し、調査を中断しました。以下、実行結果の概要です。

調査内容結果
pingdown
SYN Stealth Scan (1000 Ports)-(未実施)
OS推定-(未実施)
Traceroute-(未実施)
調査所要時間6.12 秒

nmapを実行する(2) 外→内(Intense scan, all TCP ports)

手元のPCからNmap(Intense scanに加えてall TCP portsも)を実行しました。こちらもpingを実行したところでホストがダウンしていると判定し、調査を中断しました。実行結果の概要を以下に示します。

調査内容結果
pingdown
SYN Stealth Scan (65535 Ports)-(未実施)
OS推定-(未実施)
Traceroute-(未実施)
調査所要時間5.66 秒

vRXをシャットダウンする

検証が終わったら、検証対象のvRXをシャットダウンします。

セキュリティーフィルターのまとめ

pingに対するアクセス制御を設定して、静的フィルターと動的フィルターの挙動を観察しました。結果を以下にまとめます。

  • 静的フィルターの動き
    • 静的フィルターを用いることで、壁(常に破棄)やトンネル(常に通過)を作ることができます。
    • 静的フィルターで入力パケット(IN方向)を破棄した場合、破棄したパケットに関する返信は行いません。
    • ICMP(ICMP echo request)を破棄した場合、通信相手のホストのup/down判定は「down」になります。downを検知するとその後のアクションを行わないアプリケーションもあります(Nmapなど)。使用するアプリケーションなどの都合でホストがupしていることを示す必要がある場合は、ICMP echo requestは通過させるように設定しなければなりません。
  • 動的フィルターの動き
    • 動的フィルターを用いることで、使いたいときに開くトンネル(穴)を作ることができます。また、片方向通信(内部→外部はOK、外部→内部はNG)を実現できます。
    • 内部ホストからの通信を許可する場合は、動的フィルターで出力パケット(OUT方向)を通過させると、その戻りパケットも通過させることができます。
    • 内部ホストからのpingは、動的フィルターでpingアプリケーションを許可させることで通信可能になります。この時、外部ホストからのpingは破棄されます。
    • 内部ホストで利用するアプリケーションは、上記のpingと同様に動的フィルターに追加登録していくとよいでしょう。

これらの結果を整理すると、セキュリティーフィルターを以下のように使い分ければ、利用環境に見合うアクセス制御を実現することができます。

用意されたセキュリティーフィルターのテンプレートからカスタマイズすると、とても難しい印象を持つと思います。しかし、今回観察した「フィルター機能の基本的な二つの挙動」を理解すると設定が容易になります。これらを理解した上でターゲット環境に求められるセキュリティーフィルターを組み立ててみてください。

関連リンク

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

ヤマハの公開情報
ヤマハネットワーク製品 技術情報ページ
ヤマハ vRX ユーザーガイド
→ → ファイアウォールを設定する
ファイアウォール機能(動的パケットフィルター)
コマンドリファレンス
→ → ip filter source-route
→ → ip filter directed-broadcast
→ → ip filter
→ → ip filter dynamic (syslog記録は、初期値で syslog=on オプションが指定済み)
→ → ip lan1 secure filter in (syslog記録は、 syslog notice on が必要)
→ → ip lan1 secure filter out (syslog記録は、 syslog notice on が必要)
→ → syslog notice
→ → show ip connection
→ → clear log
→ → show log

検証経費

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

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

連載トップへのリンク

連載回数番号リンク
第1回はじめる前に
第2回インストールとシャットダウン
第3回初期設定
第4回入出力を観測
第5回インストール状態確認
「はじめてのさくらのクラウド版vRX」の連載一覧

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