💨

プロキシサーバーについて

2023/12/10に公開

プロキシサーバの利用用途

・セキュリティ向上
 -送信元IP隠蔽
 -アンチウイルス、URLフィルタ実装
・Intenetアクセスログの集中管理
・Internet通信の高速化
 -HDDディスクへのキャッシュによるInternet通信量削減

httpプロキシ通信シーケンス

工程 IPヘッダ TCP/UDPヘッダ HTTPリクエスト
DNSクエリ/レスポンス
フェーズ1:httpリクエスト
①Client⇒プロキシ SrcIP:Client
DstIP:プロキシ
SrcPort:Clientランダム
DstPort:8080
GET http://www.yahoo.co.jp/news/index.html HTTP/1.1
Host:www.yahoo.co.jp
フェーズ2:名前解決
②プロキシ⇒DNS SrcIP:プロキシ
DstIP:DNS
SrcPort:プロキシランダム
DstPort:53
www.yahoo.co.jp A Record
③DNS⇒プロキシ SrcIP:DNS
DstIP:プロキシ
SrcPort:53
DstPort:プロキシランダム
www.yahoo.co.jp A 2.2.2.2
フェーズ3:代理httpアクセス
④プロキシ⇒WEBサイト SrcIP:プロキシ
DstIP:WEBサイト
SrcPort:プロキシランダム
DstPort:80
GET /news/index.html HTTP/1.1

ポイント

・通常のhttpリクエストの場合、リクエスト行が「GET /news/index.html HTTP/1.1」となるがプロキシへリクエストする場合は、「http://www.yahoo.co.jp/news/index.html HTTP/1.1」となる。
・DNSへの名前解決はプロキシが実施する。
・プロキシサーバの対象となる通信はHTTP・HTTPSなので、ICMPやUDPとは通信経路が異なる

https通信の場合

・TLSは「末端の端末以外は通信内容が分かってはいけない」という大前提がある。
・GETメゾッドではなく、CONNECTメゾッドを使う。
 CONNECT www.google.com:443 HTTP/1.1

CONNECTを受けたプロキシの動作

1.Clientに「HTTP/1.1 200 Connection Established」をhttpレスポンス返す。
2.https通信の中身は一切触れず、IPヘッダとTCPヘッダを変更してWEBサーバへ転送する。

https通信のプロキシアクセスログ

・CONNECTメゾットに記載のFQDNのみログに残る
・GETメゾットと異なり、ファイルパスまでは暗号化されており残せない。
[http の場合] GET http://www.example.com/news/index.html
[https の場合] CONNECT www.example.com:443

プロキシの種類

・「明示型」と「透過型」がある。
・ブラウザにプロキシ設定をしておく明示型が主流。
・透過型はブラウザに設定が不要

透過型の実現方法

・経路の少し横に配置し、L3SWのPBRでhttp通信だけ捻じ曲げるのが一般的
・プロキシのFW機能(サーバ)でTCP80をTCP8080に変換し受ける。

メリット デメリット
・ブラウザにプロキシ設定不要 ・httpsで証明書エラーが出る。
 -ルート証明書配布
 -サーバ証明書動的作成
・PBR設計が必要
※明示型の場合、CONNECTメゾットを使うため、証明書エラーは出ない。

参考

https://milestone-of-se.nesuke.com/nw-basic/grasp-nw/proxy/
https://qiita.com/gunso/items/94c1ce1e53c282bc8d2f
https://zenn.dev/oreo2990/articles/145437fa43a001

Discussion