知行合一

とか言ってみる

【HTTP】プロキシサーバとは

ざーっとこれ知っておけば良いんじゃね的なことを書きます。
参考にした本
www.amazon.co.jp

◼︎プロキシサーバとは
HTTPの代理要求を行うサーバ(中継ではないよ)。UAとWebサーバの間に存在してる。
UAが送ったHTTPリクエストを受け取って、UAが指定した宛先のWebサーバへUAの代わりに要求を行う。

一番の利点は下の方に書いてある「ファイアウォールとしてネットワークを守ることができる」の辺り。

◼︎透過型プロキシと非透過型プロキシ
代理の方法には2種類ある。
非透過型プロキシ・・・UAはプロキシサーバ宛にHTTP要求メッセージを送信。
透過型プロキシ・・・UAは(プロキシサーバの存在を知らないので)Webサーバ宛てにリクエストを送り、それをルータが透過型プロキシサーバへ中継する。

ユーザが意識しなくても代理可能なのが透過型、UA側に設定が必要なのは非透過型。
一般的には非透過型プロキシを指すことが多い。
どちらにしろ、UAはプロキシサーバとセッションを確立することになる。
UAからプロキシサーバ」、「プロキシサーバからWebサーバ」は「HTTPセッション」という点では別々のやりとり。

◼︎リクエストのURIの指定
開始行のリクエストURIでプロキシサーバを使うときは絶対URIをつかう
非透過型プロキシの場合Webサーバに直接接続しているわけではないので、どこのサーバを指定しているかわからなくなるため。
相対URIは「HTTPリクエストを受け取ったサーバのホームディレクトリからの位置」なので、相対URIだとプロキシのホームディレクトリからの位置になってしまう。

◼︎メッセージヘッダとプロキシ
ホップバイホップ・・・プロキシサーバが中継すると書き換えが起こる。
→中継する際に値が変更されたり新たに設定されたり、ヘッダがなくなったりする。
Viaメッセージヘッダ・・・中継したプロキシが情報を書き足していくメッセージヘッダで、メッセージが経由したサーバの情報となる。メッセージを受け取ったら、自分の情報をViaメッセージヘッダの後ろに追加していく

エンドツーエンド・・・プロキシでも変更されない

これにより、HTTPリクエストがどのようにプロキシをたどっていったかを追跡できる。

◼︎プロキシサーバの利点
そもそも何が良いのか。
- プロキシサーバは複数台の要求をまとめて1台で処理できる。
- インターネットに接続するのはプロキシサーバだけで良くなる
- 応答のキャッシュも行うので、同じリソースへの要求はキャッシュから応答できる。

グローバルIPアドレスが一つあれば、プロキシに要求するクライアントはプライベートIPアドレスでOKになる。
しかし、ブロードバンドルータがあればNAT/NAPTするから1つで済むらしい(この辺はまだ勉強不足)。
昔モデムとかで接続していた頃はブロードバンドルータなんてものがなくて、複数台接続しようとしたらプロキシサーバを利用するのが一般的だったんだって。ダイヤルアップルータというものがあったらしいが、安価でも簡単設定でもなかったのでルータがない・NATしないみたいなもんだったらしい...。

また、プロキシはWebサーバから応答されたリソースをキャッシュとして持つので、Webサーバへの要求の回数が減ることになる。(通信料が減る)。しかし、複数台のリクエストを受けるためスペックが低いと処理が遅くなる時もある。キャッシュになる率が上がるがほどほどにって感じ。


◼︎ファイアウォールとしてネットワークを守ることができる
- ファイアウォールとして機能する

ネットワークの視点で見ると、クライアントがいる内部ネットワークとインターネットなど外部ネットワークに分かれる。
内部からのパケットはHTTPなど認められたパケットのみが代理され外部へ送信され、外部からのパケットは内部からの要求の応答以外は代理されず内部に入り込めない。つまり、プロキシサーバが内部と外部の間の壁となっている(ファイアウォール:アプリケーションゲートウェイとパケットフィルタリングの2種類)。
パケットフィルタリングは下記参考。
5分で絶対に分かる:5分で絶対に分かるファイアウォール (3/7) - @IT


プロキシを使うことでクライアントの存在が隠れることになる。クライアントからの要求は代理するが、インターネットからの要求は代理しないのが通常。よって、不正なデータの流入を防いでいる。

プロキシサーバはアプリケーションゲートウェイファイアウォールと呼ばれるファイアウォールの1種。
このうち、HTTPを使用するものが「プロキシ」と呼ばれる。「HTTPしか通さない」

融通聞かないので、通したいプロトコルを代理してくれるサーバソフトを入れるか、HTTP以外はルーティングにしてしまうか、別の危機経由にするか。

◼︎コンテンツフィルタリング/URLフィルタリング
- HTTPメッセージの中身を確認することでWebサーバへアクセスするしないを決定できる

  • URIで制御する方法をURIフィルタリング

→二つ方式がある。

ホワイトリスト方式・・・許可するURIのリストに載っているリクエストURIだけを代理する方式(確実だが利便性にかける)
ブラックリスト方式・・・リクエストしてはいけないURIをリストとしてもち、そのURIには代理しない(サイト増えていくと対応大変)

  • リソースの中身で判断する方法をコンテンツフィルタリング

→代理の際に、許可されたURIかPOSTデータの中に必要のないものは入っていないか(検索エンジンに対する検索ワードなど)をみて代理の有無を判断できる。また、レスポンス受け取ってクライアントに返す際にも不必要、禁止ワードが入ったリソースでないかも確認できる。


ルータが行う「中継は」パケットのIPアドレスを確認して行う。ルータの他の危機も大体はIPヘッダかTCP/UDPヘッダを確認するレベルのもの(わからん)。
だけど、プロキシならHTTPメッセージの内容によって動作を変更できる。「見に行っていいWebサイト」、「見に行ってダメなWebサイトにわかれる」。小学校のパソコンの授業とかでアクセス制限されるやつとかそれだったんだ...




◼︎リバースプロシキ
- リバースプロシキはサーバの負荷や不正な攻撃からの防御をする

プロキシの逆。キャッシュを行い、キャッシュにあるリソースはキャッシュから応答するので、Webサーバへのアクセス数が減り負荷が軽減する。

また、クラッカーがWebサーバを攻撃しようとしてもプロキシサーバがHTTPメッセージの中身を確認してから代理するため不正なリクエイストかどうか確認できる。

このような不正なリクエストからWebサーバを守る専用危機をWAF(Web Application Firewall)と呼ぶが、リバースプロシキもその一種。