ここで重要な開示事項:当社は Geonode であり、フォワードプロキシを販売しています。当社が販売する種類のフォワードプロキシはセキュリティ製品ではなく、ネットワーク防御として購入すべきではありません。 トラフィックを検査して脅威を検知することも、ネットワーク上でポリシーを適用することも、何かを保護することもありません。 これは、リクエストの発信元として表示される場所を変更するものであり、データ収集、地域別のテスト、ネットワークフィルタの回避などに役立ちますが、セキュリティとは全く別物です。もし、ネットワークの境界に何を設置すべきか検討中の方であれば、答えはファイアウォールです。また、この記事は、なぜこの2つが頻繁に混同されるのかを理解する一助となるはずです。
一行で区別する
ファイアウォールはフィルタです。 トラフィックが到着すると、ファイアウォールはルールセットを参照し、許可するか拒否します。つまり、ゲートのようなものです。
プロキシは仲介者です。 プロキシに何かを依頼すると、プロキシはそれを取得して返します。つまり、仲介役なのです。
これら2つが混同されがちな理由は、仲介者が「ゲート」となるのに最適な立場にあるからです。すべてが自分を通過しなければならないのであれば、その内容を検査しても構わないでしょう。 そのため、機能的には依然として区別されているにもかかわらず、製品においてはこれらのカテゴリーが融合してしまっているのです。
この融合の中でも残っている違いは、ファイアウォールの目的は「決定」することであり、プロキシの目的は「ユーザーに代わって行動」することです。両方の機能を備えた製品は2つの役割を果たしており、どちらが必要かを判断することが、この記事の目的です。
NISTの定義によるファイアウォールの役割
NIST特別刊行物 800-41 改訂版 1 には、参考になる定義が記載されています。
ファイアウォールとは、異なるセキュリティ態勢を採用しているネットワーク間またはホスト間のネットワークトラフィックの流れを制御するデバイスまたはプログラムのことです。
この定義には、特に重要な点が2つあります。「流れを制御する」 — その役割は許可と拒否であり、取得することではありません。 また、「異なるセキュリティ態勢」 — ファイアウォールは、信頼度が異なるゾーン間の境界に配置されます。自社のネットワークとインターネットの間、DMZと内部システムの間、あるセグメントと別のセグメントの間などです。
NISTはまた、過去20年間のセキュリティ製品開発の多くを説明する次のような指摘を行っています:
脅威は、ネットワークトラフィックの下位層で最も多く発生していた状態から、徐々にアプリケーション層へと移行してきました。これにより、ネットワーク通信を介して伝播する脅威を阻止する上で、ファイアウォールの全般的な有効性は低下しました。
この変化――パケットからアプリケーションへの移行――こそが、単純なファイアウォールでは不十分になった理由であり、プロキシ機能のような機能がファイアウォールに追加された理由なのです。
ファイアウォール技術の3つの世代
NISTの分類法は、ファイアウォールがどのようにスタックを登ってきたかを理解する上で最もわかりやすい方法です。
パケットフィルタリング。 最も古く、最も単純な方式です。NISTは初期のパケットフィルタ型ファイアウォールを「本質的には、ホストアドレスや通信セッションに対するアクセス制御機能を提供するルーティング装置」と説明し、これらは「ステートレス検査ファイアウォールとしても知られており」、「各トラフィックフローの状態を追跡しない」と指摘しています。 重要な点として、「パケットフィルタはパケットの内容を気にかけない」ということです。
高速で安価であり、アドレスとポートのみを認識します。NISTは、これが「ほとんどの現代のファイアウォールの中核を成している」と指摘する一方で、「今日販売されているファイアウォールのうち、ステートレスなパケットフィルタリングのみを行うものはほとんどない」とも述べています。
ステートフル検査。 ファイアウォールを実用的なものにした改良点。NISTによれば、これは「接続の状態を追跡し、予想される状態から逸脱したパケットをブロックすることで、パケットフィルタの機能を向上させる」ものであり、「トランスポート層に対する認識を強化することで」実現されている。 通常、「送信元IPアドレス、宛先IPアドレス、ポート番号、および接続状態情報」を含む状態テーブルを保持する。
実用上の効果として、自身が確立した接続に対する返信トラフィックは自動的に許可される一方、要求されていないトラフィックは許可されない。これが、多くの人が「ファイアウォール」と言う際に思い描く動作である。
アプリケーションファイアウォール。 これらはコンテンツを検査します。NISTの例は具体的です。アプリケーションファイアウォールは、「電子メールメッセージに、組織が許可していない種類の添付ファイルが含まれているかどうかを判断できる」ほか、「インスタントメッセージング(IM)がポート80(通常はHTTPに使用される)経由で利用されているかどうか」を検出することもできます。 また、FTPのputコマンドなどの特定の操作をブロックしたり、特定のアクティブコンテンツを含むページをフィルタリングしたり、「予期しないコマンドのシーケンス」を特定したりすることも可能です。
この「ポート80経由のIM」という例こそが、スタックを登るべきという主張のすべてを物語っている。パケットフィルタはポート80を検知すると「Webトラフィック」と判断する。その内容を読んで初めて、それがWebトラフィックではないと分かるのだ。
プロキシの仕組み
プロキシは、ユーザーの接続を一旦切断し、独自の接続を確立します。
ユーザーはプロキシに接続し、リソースを要求します。プロキシは宛先に接続し、リソースを取得して、ユーザーに返します。本来なら1つしか存在しないはずの接続が2つ存在することになり、この構造によってプロキシが持つあらゆる特性が生まれます。
NISTは、アプリケーション・プロキシ・ゲートウェイの文脈において、このメカニズムを次のように正確に説明しています: 各接続は「2つの別個の接続の生成をもたらす――1つはクライアントとプロキシサーバーの間、もう1つはプロキシサーバーと真の宛先の間」であり、プロキシは「2つのホストに対して透過的であるように設計されている――それらの視点からは、直接接続が存在しているように見える」。 その結果、「外部ホストはプロキシエージェントとのみ通信するため、内部IPアドレスは外部からは見えません」。
区別すべき2つの種類:
フォワードプロキシはクライアントのために行動します。リクエストはプロキシを経由して送信されるため、宛先にはあなたのアドレスではなくプロキシのアドレスが表示されます。 これが当社が提供しているサービスであり、ウェブスクレイピング、地理的テスト、企業のアウトバウンドフィルタリング、キャッシュなどをカバーしています。NISTは、「現在使用されているプロキシサーバーのほとんどはアウトバウンドプロキシサーバーであり、最も一般的なものはHTTPプロキシである」と指摘しています。
リバースプロキシはサーバーのために機能します。 クライアントからのリクエストがリバースプロキシに届き、バックエンドサーバーに転送されます。これが、ロードバランシング、TLS終端、コンテンツ配信ネットワーク(CDN)の仕組みです。クライアント側から見ると、リバースプロキシこそがウェブサイトそのものです。
NISTはまた、ほとんどの解説で省略されているインバウンド(受信)プロキシについて、率直な指摘をしています: 「近年、インバウンド・プロキシ・サーバーの使用は劇的に減少している」。その理由は、「インバウンド・プロキシ・サーバーは、保護対象となる実際のサーバーの機能を模倣しなければならないが、多くの機能を備えたサーバーを保護する場合、これはほぼ不可能になる」こと、また、そのようなプロキシが提供していたログ記録やアクセス制御は、現在では「通常、実際のサーバーに組み込まれている」ためである。
両者の共通点:アプリケーション・プロキシ・ゲートウェイ
この共通領域は実際の製品カテゴリーであり、NISTは、紛らわしいほど似た名称を持つものとは明確に区別するよう注意を払っています:
アプリケーション・プロキシ・ゲートウェイは、アプリケーション・ファイアウォールとはかなり異なります。
アプリケーション・プロキシ・ゲートウェイとは、「下位層のアクセス制御と上位層の機能を組み合わせた、高度なファイアウォールの機能」であり、「相互に通信しようとする2つのホスト間の仲介役として機能し、両者間の直接接続を決して許可しないプロキシ・エージェント」を含んでいます。
NISTが挙げている利点は以下の通りです: ホスト間の直接接続の防止、ポリシー違反の有無に関するコンテンツの検査、そして(一部の実装においては)「パケット(例:SSLで保護されたペイロード)を復号化し、内容を検査した上で、宛先ホストへ送信する前に再暗号化する機能」であり、復号不可能なデータはそのまま通過させられる。
欠点も同様に具体的である。アプリケーション・プロキシ・ゲートウェイは、「ファイアウォールを通過する必要がある各種類のネットワークトラフィックごとに、個別のアプリケーション固有のプロキシエージェントが必要となる」ため、「新しいネットワークアプリケーションやプロトコルのサポートという点で制限されがち」である。 ベンダーはこのギャップを埋めるために汎用エージェントを提供しているが、NISTは、これらが「単にトラフィックがファイアウォールを通過する『トンネル』を許可するだけであるため、アプリケーションプロキシゲートウェイアーキテクチャの強みの多くを無効にしてしまう傾向がある」と指摘している。
これこそが、このカテゴリ全体に共通する率直なトレードオフである。プロキシ化により詳細な検査が可能になる一方で、転送するすべてのプロトコルを理解する必要が生じ、理解できないプロトコルに対する抜け道が存在することで、その利点が台無しになってしまう。
NISTはまた、専用のプロキシサーバーについても区別している。これらは「トラフィックに対するプロキシ制御を維持する」一方で、「通常、ファイアウォール機能ははるかに限定的」であり、「一般的に、ファイアウォールの負荷を軽減し、ファイアウォール自体では実行が困難な特殊なフィルタリングやロギングを行うために使用される」ものである。
方向性は人々が思っている以上に重要
よく誤解される点なので、明確に述べておく価値がある。
ファイアウォールは通常、双方向を制御するが、インバウンドを保護するものとして捉えられている。 一般的な認識は「外部からの侵入を防ぐ」というものだが、実際にはアウトバウンドのフィルタリングの方が重要な場合が多い。なぜなら、侵害された内部ホストがアクセスできる先を制限できるからだ。
フォワードプロキシは、アウトバウンドのみを処理します。 これらは、宛先が送信元を特定できないように保護し、組織が外部へ送信されるトラフィックを制御・記録できるようにします。これらは、外部からの侵入を防ぐ防御手段ではありません。
フォワードプロキシは、アウトバウンドのみを処理します。 これらはオリジンサーバーの前面に配置されることでオリジンサーバーを保護し、ロードバランシング、キャッシュ、TLS終端処理が行われる場所でもあります。
Webアプリケーションファイアウォールは、Webサーバーの前面に配置され、インバウンド通信を処理します。 NISTはこれらを「Webサーバーの前に配置される専用のアプリケーションファイアウォール」と説明しており、HTTPが「攻撃者によって様々な方法で悪用されてきた」ため導入されたと述べています。NISTは、これらがネットワーク境界に配置されるのではなくWebサーバーの前に配置されるため、「従来のファイアウォールとは大きく異なるものと見なされることが多い」と指摘しています。
その結果、方向性を特定せずに「プロキシとファイアウォールのどちらを使うべきか」と問うことは、不完全な質問となります。アウトバウンドプロキシとインバウンドファイアウォールは競合するものではなく、そもそも向きさえも異なります。
並列比較
| ファイアウォール | フォワードプロキシ | リバースプロキシ | |
|---|---|---|---|
| 主な役割 | トラフィックの許可または拒否 | クライアントに代わってデータを取得 | サーバーのフロントエンド |
| 方向 | 両方(境界指向) | アウトバウンド | インバウンド |
| 接続モデル | パケットを通過または破棄 | 接続を終了し、再発信 | 接続を終了し、再発信 |
| コンテンツを把握するか? | 世代による | はい(暗号化されていないトラフィックの場合) | はい(TLSを終了させるため) |
| クライアントのアドレスを隠すか | いいえ | はい(宛先から) | いいえ |
| サーバーのアドレスを隠すか | 場合により(NAT経由) | いいえ | はい(クライアントから) |
| キャッシュ | いいえ | 一般的 | 一般的 |
| 負荷分散 | いいえ | いいえ | はい |
| 主な目的 | セキュリティ | アクセス、匿名性、制御 | パフォーマンス、スケーラビリティ、保護 |
実用的な疑問のほとんどに答えているのは、最後の行です。ファイアウォールはセキュリティ境界を強制するために存在します。フォワードプロキシは、物事にアクセスする方法や場所を変更するために存在します。これらは代替関係というよりは、互いに補完し合う関係にあります。
どちらか一方、それとも両方必要ですか?
誰にでもファイアウォールは必要です。 どのオペレーティングシステムにも標準で搭載されており、どのルーターにも備わっており、どのクラウドプロバイダーもセキュリティグループを提供しています。これはオプションではなく、小規模な環境では購入の是非を問う問題ではなく、あくまで設定の問題です。 もし「ファイアウォールが必要か」という質問であれば、答えは「すでに持っている」ということであり、設定が必要だということです。
フォワードプロキシが必要になるのは、 大量のデータを収集しており、リクエストを複数のアドレスに分散させる必要がある場合、地域固有のコンテンツを表示する必要がある場合、ネットワークによってフィルタリングされているリソースにアクセスする必要がある場合、あるいは組織を運営しており、外部へのWebアクセスを制御・ログ記録する必要がある場合です。最初の3つは当社の専門分野です。 4つ目のケースは、通常、別途購入するものではなく、既存のファイアウォールやセキュアWebゲートウェイの機能として備わっています。
リバースプロキシが必要となるのは、規模の大小を問わずパブリックWebサービスを運用している場合です。ロードバランシング、TLS終端、キャッシュ、レート制限といった機能はすべてここに含まれており、これは追加機能というよりは標準的なアーキテクチャです。
Webアプリケーションファイアウォールが必要なのは、機密情報を扱う公開Webアプリケーションを運用している場合です。これはネットワークファイアウォールとは異なる製品であり、役割も異なります。一方を導入したからといって、もう一方が導入されているわけではありません。
間違いとして指摘すべき組み合わせが1つあります。それは、セキュリティ目的でフォワードプロキシサービスを購入することです。これにはセキュリティ機能は一切ありません。当社や他社が販売している一般家庭用およびデータセンター用のプロキシは、リクエストの発信元アドレスを変更するだけです。トラフィックの検査、脅威のブロック、ポリシーの適用、エンドポイントの保護は行いません。ベンダーがそれ以外の効果をほのめかしている場合は、それは単なるマーケティングです。
よくある質問
プロキシはファイアウォールですか?
いいえ。ファイアウォールは、セキュリティレベルが異なるネットワーク間で、どのトラフィックを通すかを制御します。一方、プロキシは他者に代わってリクエストを行い、ある接続を終了させ、別の接続を確立します。 一部のファイアウォール製品にはプロキシ機能が含まれていますが(NISTではこれらを「アプリケーション・プロキシ・ゲートウェイ」と呼んでいます)、その機能は異なります。
プロキシはファイアウォールの代わりになりますか?
いいえ。フォワードプロキシはアウトバウンドのリクエストを処理するものであり、インバウンドトラフィックに対する保護、ネットワーク上でのポリシー適用、脅威の検査は行いません。プロキシがコンテンツを検査する場合でも、プロキシを経由してルーティングされたトラフィックしか確認できませんが、ファイアウォールは境界そのものを管理します。
プロキシとファイアウォール、どちらがより安全ですか?
この観点では比較できません。ファイアウォールはセキュリティ制御手段ですが、フォワードプロキシは一般的にそうではありません。ファイアウォール内のアプリケーションプロキシゲートウェイは、直接接続を防止し、コンテンツを検査できるため強力な検査機能を提供しますが、これは一般的なプロキシの特性というよりは、ファイアウォールの機能です。
それぞれはどのレイヤーで動作しますか?
パケットフィルタリング型ファイアウォールは、ネットワーク層でアドレスやポートを処理します。ステートフルインスペクションは、接続状態テーブルを用いてトランスポート層の情報を認識します。アプリケーションファイアウォールやプロキシはアプリケーション層で動作し、そこでプロトコルの内容を読み取ることができます。 NISTは、脅威が時間の経過とともに上位層へと移行してきたことを指摘しており、これが上位層でのアプローチが必要となった理由です。
フォワードプロキシとリバースプロキシの違いは何ですか?
フォワードプロキシはクライアントのために機能するため、宛先からはあなたではなくプロキシが見えます。 リバースプロキシはサーバーの代理として機能するため、クライアントはオリジンではなくリバースプロキシにアクセスします。方向も受益者も正反対ですが、ある接続を終了させ、別の接続を確立するという根本的な仕組みは同じです。
プロキシとファイアウォールの両方が必要ですか?
ファイアウォールは必ず必要です。実際、すでにいくつも導入されているはずです。 フォワードプロキシが必要なのは、特定の用途に限られます。例えば、大量のデータ収集、地域限定のテスト、あるいは組織による外部へのWebアクセス制御などです。リバースプロキシが必要なのは、公開Webサービスを運用している場合です。質問が異なれば、答えも異なります。
プロキシは私のIPアドレスを誰からも隠してくれますか?
宛先からのみ隠します。ISPは依然としてあなたがプロキシに接続していることを認識しており、プロキシの運営者は両端を確認できます。また、ログインするサービスによっては、いずれにせよ身元が特定されます。NISTの定義——外部ホストはプロキシエージェントとのみ通信するため、内部アドレスは外部から見えなくなる——は正確であり、「匿名」という表現よりも範囲が狭いです。
Webアプリケーションファイアウォールとは何ですか?
Webサーバーの直前に配置され、HTTPに対する攻撃を検知するための専用のアプリケーションファイアウォールです。NISTがこれを従来のファイアウォールと区別しているのは、ネットワーク境界ではなくサーバーを保護するという点にあります。これはネットワークファイアウォールとは別の製品であり、一方を導入しても他方を代替するものではありません。
まとめ
これを明確に整理すると、ファイアウォールが判断し、プロキシがユーザーに代わって動作するということです。他のすべては、この2つの動作から派生するものです。
この混乱は、不注意によるものではなく、カテゴリーが融合してしまったことに起因するものです。すべての接続を終了させる仲介者は、それらを検査するのに理想的な立場にあるため、ファイアウォールにはプロキシ機能が追加されていきました。NISTのアプリケーション・プロキシ・ゲートウェイはまさにそのハイブリッドであり、検査の深さという点で真の利点がある一方で、プロトコルごとに特定のエージェントを必要とするという実質的なコストも伴います。
融合していないのは「目的」です。ファイアウォールは、信頼度が異なるゾーン間の境界を強制するために存在します。フォワードプロキシは、リクエストの発信元を偽装し、外部へ送信されるデータを制御するために存在します。境界に何を配置するかを選択する場合、それはファイアウォールの問題です。 外部の世界への接続方法を選択するのであれば、それはプロキシの問題です。この2つは、通信の方向性がもはや見えなくなるほど遠くから眺めた場合にのみ、互いに代替案のように見えるに過ぎません。
