ネットワークスペシャリスト - SE娘の剣 -

ネットワークスペシャリストの試験対策サイトです。ネットワークスペシャリスト試験の合格体験談、合格のコツ、過去問解説、
基礎知識などの情報を掲載します。試験対策セミナー・研修も行っております。 ネットワークスペシャリスト試験対策なら
左門至峰の最も詳しい過去問解説「ネスペ」シリーズ(技術評論社)で!!

カテゴリ:10.アプリケーション層(L5〜L7) > 10.6 Proxyサーバ

Proxyとは”代理”という意味。
何を代理するかというと、一般的には、クライアントPCがインターネットにアクセスするのをProxyサーバ(「フォワードプロキシ」と言います。この言葉も覚えましょう!)が代理で応答する。
[PC]→HTTP→[Proxyサーバ]→HTTP(代理)→[インターネット(Web)]
LinuxのSquidというソフトで実現することもあれば、BlueCoatなどのアプライアンス(専用機)を利用する場合もある。
女性ほおづえ
なぜProxyサーバを設置するのでしょうか。
その目的はなんですか?
目的は2つです。
.札ュリティの強化(サーキットゲートウェイ型ファイアウォールとして)
▲ぅ鵐拭璽優奪肇▲セスの高速化
 一度閲覧したコンテンツをProxyサーバがキャッシュするため、他のクライアントPCが同一サイトにアクセスした場合に、表示が速い。
(J簑的な目的)通信ログの取得
 それ以外には、ファイアウォールのルールをシンプルにすることで、セキュリティを強化する狙いもある。Proxyサーバを使うことで、社内からのHTTPやFTP通信は、送信元IPアドレスをProxyサーバのみに限定することができるなどのメリットがあります。

過去問(H19FE秋午前問37)では、プロキシの仕組みとして、以下のように述べられている。
社内ネットワークからインターネット接続を行うときに,インターネットへのアクセスを中継し, Webコンテンツをキャッシュすることによってアクセスを高速にする仕組みで,セキュリティ確保にも利用されるもの
また、H30秋NW午後橘1では、「社内に対して,アクセス先URLのログ取得や,外部サーバのコンテンツをキャッシュして使用帯域を削減する目的で用いられる」と記載されています。

◆TCPのコネクション
TCPコネクションは2つになる。
過去問(H18NW午前 問24)で具体的に問われている。
proxy
一つはクライアントとプロキシサーバ間、もうひとつは、プロキシサーバとWebサーバ間である。


■Proxyサーバのログの例
(1)認証無し(Linux)
m/images/cleardot.gif - DIRECT/216.58.196.238 image/gif
1557126956.478     47 192.168.0.8 TCP_MISS/200 10436 GET http://sc.seeeko.com/ - DIRECT/203.104.130.159 text/html
1557126956.874     30 192.168.0.8 TCP_MISS/200 300 GET http://counter2.blog.livedoor.com/c? - DIRECT/125.6.146.22 image/gif
★こちらはHTTPSなので、CONNECTメソッドで接続している
1557126913.361    383 192.168.0.8 TCP_MISS/200 9887 CONNECT direct.bk.mufg.jp:443 - DIRECT/104.87.68.15 -

(2)認証有り(Windowsでやりました)
1558229766.648     71 192.168.0.7 TCP_MISS/200 10573 GET http://nw.seeeko.com/ user1 HIER_DIRECT/203.104.130.159 text/html
1558229766.881     35 192.168.0.7 TCP_MISS/200 3051 GET http://nw.seeeko.com/site.css? user1 HIER_DIRECT/203.104.130.159 text/css

女性悩み

Reverse(逆)のProxyですが、
何が”逆”なのでしょうか?
あまり深い意味はないです。
インターネット閲覧時のProxyサーバの役割は、内部から外部への通信を”代理(Proxy)”します。Reverse Proxyは外部から内部への通信を”代理(Proxy)”するので、”逆”になります。
女性目閉じる

そんな通信ってあるのですか?
はい、あります。
SSL-VPN装置はReverseProxyの一つです。外部(出先や自宅)から、内部(社内LAN)にSSL-VPN装置経由でアクセスするからです。
過去問では「Webサーバを使ったシステムにおいて、インターネットから受け取ったリクエストをWebサーバに中継する仕組み」とある。(H21NW午前 問17)
リバースプロキシ_ネットワークスペシャリスト
また、リバースプロキシサーバは、公開サーバに直接アクセスさせない仕組みとしても活用されます。
過去問(H30NW午後橘1)をみてみましょう。
一般に,プロキシには,[  ア:フォワード  ]プロキシと[  イ:リバース  ]プロキシがある。F社のプロキシのように[  ア:フォワード  ]プロキシは,社内に対して,アクセス先URLのログ取得や,外部サーバのコンテンツをキャッシュして使用帯域を削減する目的で用いられる。一方,[  イ:リバース  ]プロキシは,外部から公開サーバのオリジナルコンテンツに直接アクセスさせないことによる改ざん防止,キャッシュによる応答速度の向上,及び複数のサーバでの負荷分散を行う目的で用いられる。
ですから、リバースプロキシにも種類があり、大きく2つと考えておきましょう。
ヽ杏瑤らのリモートアクセス用
公開サーバのセキュリティ確保や応答時間の向上

プロキシサーバを利用するためのパソコンの設定として、過去問(H18NW午後1問2)では、以下のように述べられている。
プロキシサーバを利用するには,PCのWebブラウザにプロキシサーバの情報を設定する必要がある。その方法としては,プロキシサーバのIPアドレスを直接設定する方法と,プロキシサーバの利用情報を定義したファイル(以下,自動設定ファイルという)をWebサーバに登録し,その登録場所のURLをPCのWebブラウザに設定する方法とがある。B君はこれらの方法を比較し,自動設定ファイルを用いる方法を採用した。
1 
 

自動設定ファイルって、確かpac(proxy auto config)ファイルですよね。
メリットはありますか?
プロキシサーバのIPアドレスが変わっても、端末(パソコン)の設定変更をしなくて済む。パソコンが1000台などとたくさんある場合には、設定が大変だよね。
まあ、この点に関しては、IPアドレスを直接指定するのではなく、FQDNで指定しすればこの問題は解決する。
では、PACのメリットは何か?
メリットは、プログラムを書いたり、複雑な設定ができることである。たとえば、サーバAが落ちたらBに行くとか。大規模なネットワークでは、pacを使うことが多くなる。

■ProxyのPACファイルの作業メモ。
試験には関係ないので、無視してください。けっこうはまってしまった・・・。
・やったことは、proxy.pacファイルを作成する。
・PACはローカルのパスは指定できない(HTTPで通信する必要がある)ので、Webサーバを建てて、そこに配置する。
管理が楽なので、XAMPPをWebサーバとして起動。C:\xampp\htdocsにproxy.pacを配置。
・PACファイルは、関数FindProxyForURLを使う
引数はurl, hostであり、インターネットにアクセスすると、この2つが引数として渡される。この値をもとに、PACにてプロキシの制御を行う。
たとえば、http://www.example.co.jpにアクセスすると、引数として、urlにhttp://www.example.co.jp、hostにwww.example.co.jpが渡される。
以下は、宛先がexample.co.jpであればプロキシを経由させない(direct)、それ以外はプロキシサーバ172.16.1.100に通信させるPACである。

-----------proxy.pac----------
function FindProxyForURL(url, host) {
    // www.example.co.jpのホストへはProxyを経由せずに直接接続
    if (shExpMatch(host,"www.example.co.jp")) {
        return "DIRECT";
    }
    // それ以外のURLは、以下のProxyを利用する
      return "PROXY 172.16.1.100:8080";
    }
------------------------------
※実物は以下に置きました。
http://nw.seeeko.com/proxy.pac

すごくはまった。原因の切り分けができていない。
まず、ローカルのファイルはダメなので、サーバにPACを置いた。http://127.0.0.1/proxy.pac
ループバックアドレスが原因かと思い、IPアドレスを指定したが、これが原因ではなかった。単なる構文の書き方なのか、よくわからない。まあ、動いてよかった。

H22NW午後1問1には、以下の記述がある。
プロキシ1はキャッシュとURLフィルタリング用のプロキシサーバ,プロキシ2はウイルスチェック用のプロキシサーバである
女性ほおづえ

キャッシュはプロキシ本来の機能ですね。
プロキシのセキュリティ機能って、URLフィルタやウイルスチェックを指すんでしょうか?
いや。そうではない。プロキシのセキュリティ機能は、プロキシサーバで中継することにより、送信元のIPアドレスを隠したり、データの整合性チェックなどを行っている。
よって、URLフィルタやウイルスチェックはプロキシの機能ではない。

ただ、実際の製品としては、BlueCoatが圧倒的なシェアを誇っている。この、BlueCoatではURLフィルタやウイルスチェックの機能を持っている。また、実際の現場でもよくつかわれる機能である。
試験問題は、実務に合わせて作られているため、このような出題になったのであろう。
1
テストには出ないと思いますが、参考までに質問です。
動画のキャッシュもできますか?
最近では、社内での動画利用も増えてきていると聞きました。
偉い人の挨拶が動画で配信されるとか。
BlueCoatの場合はできる。他社の場合はできるが、多少厳しそうだ。
とうのも、YouTubeなどの場合、動画一つに対し、アドレス(URL)が固定ではなく、変動するからだ。BlueCoatの場合は、このあたりの対処をCache Pulseでうまくやっている。

H23SC秋PM1問3に、プロキシの利用機能の例が載っているので紹介する。キャッシュによる高速化の本来機能ではなく、オプション機能を中心に述べられている。あくまでもオプション機能の例であり、製品によっても機能が異なる点には留意してほしい。

(1)利用者認証機能
 利用目的:インターネットサイトにアクセスする従業員を識別し認証する。
  ブラウザがHTTPリクエストのProxy-Authorizationヘッダに付与し,Uプロキシに送信した認証情報を,各従業員に一意に割り当てられた利用者IDとパスワードに照らして,アクセスした利用者を識別し認証する。

(2)アクセスログ取得機能
 利用目的:従業員によるインターネットサイトへのアクセスについて,HTTPリクエストごとに,次の項目を取得する。
  アクセス日時,アクセス元のIPアドレス,利用者ID,リクエストライン(HTTPメソッド,URL,   HTTPプロトコルのバージョン),インターネットサイトのIPアドレス,受信データサイズ,インターネットサイトからのレスポンスコード

(3)送信内容取得機能
 利用目的:インターネットサイトにデータが送信された場合(POSTリクエスト,  PUTリクエストの利用時など)に,その送信内容を取得する。

(4)フィルタリング機能
 利用目的:インターネットサイトへのアクセスを業務目的だけに制限する。
HTTP通信ではブラックリスト方式,   HTTPS通信ではホワイトリスト方式で,インターネットサイトのホストのFQDNに基づいたアクセス規制をする。

(5)ウイルスチェック機能
 利用目的:インターネットサイトからのウイルス感染やインターネットサイトへのウイルス送信を防止する。送受信データ内のウイルスをチェックする。

女性目閉じる

疑問なんですが、HTTPSによる暗号化通信の場合、プロキシサーバはうまく処理できるのですか? 暗号化の鍵はPCとWebサーバでのみ共有されているから…
HTTPS通信の場合、PCはプロキシサーバに対し、HTTPSのセッション中継せずに、透過させるように依頼するCONNECTメソッドを使用します。
過去問(H21NW午後1問2)では、「Webメールで利用するHTTPSでは、PCは[ オ CONNECT]メソッドを利用してプロキシサーバへ接続先を指定し、SSLセッションをASPサーバとの間で確立する」と述べられている。

具体的には、H23SC秋午後橘3に、Uプロキシの動作として説明がある。
Uプロキシを利用したHTTPS通信では,暗号化された通信路をブラウザとWebサーバ間で確立する。Uプロキシを利用した場合のHTTPS通信を図3に示す。proxy2
女性口開き

そうなんですか?じゃあ、SSL通信をすれば、プロキシによるセキュリティチェック、ウイルスチェックなどは無しということ?
結構危険ですね。
最近の製品では、HTTPS通信であっても、きちんと中継する製品が多い。この仕組みを実現するには、プロキシサーバで、代理のサーバ証明書を提示する。場合によっては、PC側でブラウザによるセキュリティ警告がでる可能性がある。
詳しくはこの問題にチャレンジいただきたい。

一方,  Lプロキシを利用したHTTPS通信では,ブラウザとLプロキシ間,及びLプロキシとWebサーバ間において,それぞれ独立の暗号化された通信路を確立する。Lプロキシは証明書1を受け取ると,ブラウザには転送せずに,自身で証明書1の検証を行う。次に,   Lプロキシは認証局として証明書1と同じコモンネームのサーバ証明書(以下,証明書2という)を新たに作成し,ブラウザに送る。Lプロキシを利用した場合のHTTPS通信を図4に示す。 proxy23  

■パケットをキャプチャしてみました。
プロキシサーバに対し、GETで送るのか、CONNECTメソッドにするかの判断をするのは誰でしょうか?
少なくとも利用者である人間はそんなことをしませんよね。
やっているのはブラウザです。
では、PCからのパケットを見てみましょう。
GoogleなどのHTTPS通信の場合は、以下のようにCONNECTメソッドを使っています。
connect
一方のHTTP通信の場合は、GETなどでアクセスします。
get

■CONNECTメソッドの悪用
また、ここからはセキュリティの範囲になりますが、CONNECTメソッドを悪用してセキュリティをすり抜ける例を紹介します。

まずは過去問(2018春SC午後玉2)をみてみましょう。
W氏 :プロキシサーバの設定をみると,CONNECTメソッドの悪用を防ぐ制限がなされていませんね。
Kさん:CONNECTメソッドを悪用すると,どういう問題が生じるのでしょうか。
W氏  :図3に示すように,CONNECTメソッドを悪用してトンネルを確立させることで,Webメールサーバの機能を回避できます。そして,,海硫麋鬚砲茲辰討いつかの問題が生じます
Kさん: ポート制限機能に関する設計の見直しと設定変更案を作成します。

CONNECT x1.y1.z1.4:25 HTTP/1.1
図3 CONNECTメソッドを悪用したリクエスト

ここで、下線,里いつかの問題というのは、本来するべきセキュリティチェックが行われないというものです。
この問題に即して解説します。(問題文を読んでいただくと、より状況が分かりやすいと思います)
・メールを送信するには、セキュリティチェック機能がある「Webメールサーバ」を経由する必要がある。それ以外の方法(外部メールサーバに直接や、インターネットから直接)を使って、セキュリティチェック機能を逃れようとしても、FWのポリシーでブロックされてしまっている。
・しかし、Proxyサーバへの通信はもちろん許可されている(この場合はなぜか、DMZにProxyサーバがある)。Proxyサーバ経由で上記のCONNECTメソッドを使って、外部メールサーバ(x1.y1.z1.4)に25番ポートで送信する。すると、CONNECTメソッドなので、Proxyサーバはなにもチェックせずに外部メールサーバに通信を中継していまう。→これが抜け道。
・こうして、FWのポリシーで絞られていても、社内のセキュリティチェックをすり抜けることができる。

さて、対策ですが、問題文にあるように、「ポート制限機能に関する設計の見直し」を行います。簡単にいうと、Proxyサーバで25番ポートの通信をうけないのです。

Proxyサーバ(オープンソースのSquidの場合)で、この設定をするには、設定ファイルを以下のようにします。
acl SSL_ports port 443  ←SSLのポートとして443を指定。複数指定する場合は、443 25 21などと複数ポートを並べて指定
http_access deny CONNECT !SSL_ports ←指定した上記のポート以外はCONNECTメソッドの使用を禁止
こう指定することで、HTTPSである443の通信以外のCONNECTメソッドによる通信を禁止します。

ネットワークスペシャリストの過去問(H26午後玉筍院砲法▲廛蹈シの復号機能について述べられている
復号機能をもつプロキシサーバの場合,PCからのconnect要求を受信した後の動作は,次のようになる。
復号機能をもつプロキシサーバの動作手順の概要を,図3に示す。
 
seeeko_proxyネットワークスペシャリスト
図3に示したように、 PCからのconnect要求を受信したプロキシサーバは,まず, 銑の手順でWebサーバとの間でSSLセッションを開設し,更にPCとの間でも,ぁ銑Δ亮蟒腓SSLセッションを開設する。このとき,イ如ぅ廛蹈シサーバは,サブジェクト(Subject)に含まれるコモン名(CN : Common Name)に,サーバ証明書1と同じ情報をもたせたサーバ証明書2を生成して, PC宛てに送信する。PCはサーバ証明書2を検証し,認証できたときにΔ行われ.  SSLセッションが開設される。ここで,  PCがサーバ証明書2を正当なものと判断してプロキシサーバを認証するためには,PCに, (エ)サーバ証明書2を検証するのに必要な情報を保有させる必要がある。

中間者攻撃を防ぐProxyの仕組みが書かれてある。

ネットワークスペシャリストを目指す女性SEあれ? 

なぜ、ProxyでSSLを中継すると、中間者攻撃を受けやすくなるの?

HTTPSでは、WebサーバとPC間でSSLによる安全な通信経路を確立する。利用者がWebサーバの証明書を確認できるため、中間者がつけいる隙がない(図1)
 
ネットワークスペシャリストProxy
しかし、プロキシサーバがSSLを終端してしまうと、利用者にはプロキシサーバの証明書しか見ることができない。その先で中間者攻撃が行われいるかどうかの判断ができないだ。最近では攻撃者もベリサインなどの正規の認証局から発行された証明書を使う。プロキシサーバでも中間者の証明書を確認するが、正規の認証局から発行されているので「正しい」としか判断できない(図2)。

そこで、上記の過去問だ。「プロキシサーバは,サブジェクト(Subject)に含まれるコモン名(CN : Common Name)に,サーバ証明書1と同じ情報をもたせたサーバ証明書2を生成して, PC宛てに送信する」のである。

実際の動き
画面キャプチャで紹介する
ForiGateをProxyサーバとして利用し、SSLを中継する。
すると、Fortigateが証明書を出すので、証明書エラーがでる。
ssl1

ForiGateのルート証明書を入手し、「証明書のインストール」にてPCにインストールする
ssl2

すると、「信頼されたルート証明機関」にFortiGateのルート証明書がインストールされる
ssl3

この状態でアクセスると、さきほどのように赤字でのセキュリティ警告は出ない。
証明書を開くと、「発行者」は「FortiGate」であるが、たしかにCNはGoogleになってる。
ssl4

とはいえ、こんな感じに、やんわりと警告は残っている。
ssl5

H30NW午後橘1には、以下の記載があります。「一方,[ イ:リバース]プロキシは,外部から公開サーバのオリジナルコンテンツに直接アクセスさせないことによる改ざん防止,キャッシュによる応答速度の向上,及び複数のサーバでの負荷分散を行う目的で用いられる。」

過去問(H27秋NW午前玉18)では、「プロキシサーバ又はリバースプロキシサーバを新たにDMZに導入するセキュリティ強化策のうち,導入によるセキュリティ上の効果が最も高いものはどれか」として、「DMZ上の公開用Webサーバとしてリバースプロキシサーバを設置し,その参照先のWebサーバを,外部からアクセスできない別のDMZに移設することによって,外部から直接Webサーバのコンテンツが改ざんされることを防ぐ」とあります。

別の過去問(H23春AP午後問5)もみてみましょう。

〔リバースプロキシサーバの導入〕
リバースプロキシサーバは,インターネットからのアクセスを受け付け,アクセス時に指定されたURLに対応する別のサーバに通信を中継する,プロキシサーバの一種である。 URLとサーバの対応は,あらかじめ設定されている。
C社では,セキュリティの強化とWebサーバの負荷分散のため,リバースプロキシサーバを導入してシステムを分散管理することにした。変更後のシステム構成を図2に示す。
変更後のシステム構成では,リバースプロキシサーバだけをDMZに配置し,それ以外のサーバは社内LANに配置する。
ゲートウェイとリバースプロキシサーバの通信ではSSLを用いた通信を行い,リバースプロキシサーバと各Webサーバ(192.168.5.201. 192.168.5.202及び192.168.5.203)の通信では, SSLは用いない。
第三者機関から取得したサーパ証明書は[  a  ]にインストールする。
reverse_proxy
図2 変更後のシステム構成

電話工事管理システム,インターネット工事管理システム及びテレビ工事管理システムは,それぞれ別々のWebサーバで運用する。ログインページのURLパスは,どの工事管理システムも共通で“login.html"とする。
FWlではポート番号[  b  ]の通信を, FW2ではポート番号[  c  ]の通信を許可しておく。また,リバースプロキシサーバには,表2の設定をする。
表2 リバースプロキシサーバの設定
web 

↑このページのトップヘ