- PR -

delegateでSSL対応リバースプロキシの設定方法

1
投稿者投稿内容
仲間
会議室デビュー日: 2007/07/05
投稿数: 2
投稿日時: 2007-07-05 18:12

はじめまして。
質問の場所がこちらかセキュリティーかで悩みましたが
ネットワーク関係のほうが強いと思いますので
こちらに登校させていただきました。

(クライアント )--SSL(https)--(ルーター)---(delegate)---http----(弊社サーバ)
------------internet--------- --------------------社内----------------------
外部のクライアントから弊社のサーバにアクセスする場合に
internet上の通信はSSLでセキュリティをかけていと考えています。


現在の構成ですが、グローバルの固定IPは1つあり、ルータが接続されています。
ルータの外部アドレスがグローバル固定IPの60.x.x.5
内部アドレスは172.16.20.1 で ルータの設定は60.x.x.5のPort10000
にはいってきたものを内部側のPC172.16.20.2のPort10000へ転送します。

そのPCにはdelegateがPort10000で動いていて同じPCのPort10001へ
転送したいと考えています。

設定は下記のとおりですが
-P10000
SERVER=https
FCL="sslway"
MOUNT="/* ​http://localhost:10001/*​ vhost=-172.16.20.2"
REACHABLE="*"
RELIABLE="*"
REMITTABLE="*"
RELAY="proxy:*:*:*"
ADMIN=user@host.domain.jp

delegateがうけ転送を60.x.x.5:10000へ行おうとしています。
172.16.20.2:10000へ接続した場合は172.16.20.2:10001に転送されます。
また
MOUNT="/* ​http://localhost:10001/*​ vhost=-60.x.x.5"
としても変わらず60.x.x.5へ転送しようとします。
どのようにすれば
60.x.x.5:10000へ入ってきたものを、172.16.20.2:10001
へ転送できるでしょうか?

たらお
大ベテラン
会議室デビュー日: 2006/12/25
投稿数: 206
お住まい・勤務地: 東京・永代通り
投稿日時: 2007-07-06 06:44
構成を、確認します。
書き込みからは、このように解釈できますが、
どうも正常に動く気配がないので、解釈が間違っているかもしれません。

コード:
クライアント
  ↓SSL:443
  │
(インターネット)
  │
  │60.x.x.5
 ルーター
  ↓172.16.20.1
  │
  │
  |172.16.20.2:10000
 Delegate(localhost:10001)
  │
  │
  │IP?:443,80
 HTTPサーバー



まず、クライアントからは443で送られてくるので、
どこかで443から10000への変換を行っているはずです。
ルーターとDelegateは同一セグメント上にあるので、ルーターで変換しているのでは?

また、HTTPサーバーのIPアドレスが不明ですので、設定の整合性が見えません。
さらに、localhost:10001に転送する意図が見えません。

Mountの記述方法は、"/* port://<転送先URL>* vhost=-<転送元URL>" ですので、

-P10000
Server=https
Mount="/* http://<実サーバーIP>/* vhost=-172.16.20.2"
Reachable="<実サーバーIP>"

のようではないかと。

_________________
_福田太郎_
仲間
会議室デビュー日: 2007/07/05
投稿数: 2
投稿日時: 2007-07-06 10:19
たらお様 レスありがとうございます。
書き込みがわかりにくいようで申し訳ありませんでした。
行いたいことをたらお様の書き込みを元に変更を掛けてみました。

コード:
--------------------------------------------------------------------------------

クライアント(https://60.x.x.5:10000 へ接続)
  ↓
  │
(インターネット)
  │
  │60.x.x.5(ルータ外部アドレス)
 ルーター
  ↓172.16.20.1(ルータ内部アドレス)
  │
  │
  |172.16.20.2:10000
 Delegate
  │
  │
  │IP 172.16.20.2:10001
 HTTPサーバー


--------------------------------------------------------------------------------
ルータは 60.xx.xx.5:10000で入ってきたものを
delegatePC 172.16.20.2:10000 へ転送しています。


delegateとHTTPサーバは同じPCです。
クライアントが発したSSLデータをdelegateでデコードし
同じPCの別ポートのhttpサーバソフトへ転送したいと考えています。
(httpサーバソフトがSSL機能を持たないた)

現在は
delegateが受けてSSLの複合化を行い
複合化したデータを60.x.x.5:10000に転送しようとしています。
ためしにdelegateのPCにLANカード2枚ざしし
アドレスを60.xx.xx.6にふり クロスケーブルで
別のPC(IP 60.xx.xx.5)をつなげると
正常にデコードされ受信しています。

このためMOUNTの仕方問題だと思うのですが
MOUNT="/* http://localhost:10001/*; vhost=-60.xx.xx.5"
MOUNT="/* http://localhost:10001/*; vhost=-172.16.20.2"
MOUNT="/* http://172.16.20.2:10001/*; vhost=-60.xx.xx.5"
MOUNT="/* http://172.16.20.2:10001/*; vhost=-172.16.20.2"
MOUNT="http://172.16.20.2:10001/*; https://60.xx.xx.5:10000"

など、いろいろと試していますが一向にhttp://172.16.20.2:10001/へ転送してくれない状況です。

たらお
大ベテラン
会議室デビュー日: 2006/12/25
投稿数: 206
お住まい・勤務地: 東京・永代通り
投稿日時: 2007-07-07 06:29
詳しい説明ありがとうございます。ポイントがつかめました。
クライアントから、IP直のアクセスをしていますね。これが挙動の原因です。

本来は、クライアントから https://aaa.bbb.co.jp/ にアクセスしてもらい、
インターネット上では aaa.bbb.co.jp → 60.x.x.5 の解決をして、
内部ネットワークでは aaa.bbb.co.jp → 172.16.20.2 の解決をします。

クライアントのパケットがルーターに到達時には、

Ethernetフレームヘッダ{ルーターMACアドレス|前ホップMACアドレス}
  IPパケットヘッダ{クライアントIPアドレス|60.x.x.5}
    TCPシーケンス{SYN/ACK|WINDOWサイズ|etc}
      SSL/HTTPヘッダ{GET/POST|HTTP:60.x.x.5|データ}

という状態ですが、ルーターでNAT後は、

Ethernetフレームヘッダ{DelegentMACアドレス|ルーターMACアドレス}*元先を書換
  IPパケットヘッダ{クライアントIPアドレス|172.16.20.2}*送信先を書換
    TCPシーケンス{SYN/ACK|WINDOWサイズ|etc}*変更なし
      SSL/HTTPヘッダ{GET/POST|HTTP:60.x.x.5|データ}--▲変更なし

というルーターの正常なNAT動作により、
EthernetフレームヘッダとIPパケットヘッダが書き換わります。
ところが、▲HTTPサーバーのIPアドレスは、もちろんそのままです。(SSL暗号状態)
これが、DelegateでSSLデコード後は、

Ethernetフレームヘッダ{ルーターMACアドレス|DelegateMACアドレス}*元先を書換
  IPパケットヘッダ{クライアントIPアドレス|60.x.x.5}*HTTPヘッダを元に書換
    TCPシーケンス{SYN/ACK|WINDOWサイズ|etc}*そのまま
      HTTPヘッダ{GET/POST|HTTP:60.x.x.5|データ}*そのまま

という状態になっていると思われます。
いろいろとMountをお試しのようですが、

MOUNT="http://172.16.20.2:10001/*; https://60.xx.xx.5:10000"
 これが一番Mountイメージとしては近いかと思われます。

-P10000
MOUNT="http://172.16.20.2:10001/*; vhost=-https://60.xx.xx.5"
 とかではどうでしょう。

いちどDelegateでSLLデコードしたパケットを、
Delegateがもういちど処理してくれれば、成功するはずです。

あと、Delegate/HTTPサーバーのroutingテーブルに
 route add 60.x.x.5 255.255.255.255 127.0.0.1 を書くとかの
小技も使えるかもしれません。

_________________
_福田太郎_
1

スキルアップ/キャリアアップ(JOB@IT)