リバースプロキシによるSSL-VPN通信と、リバースプロキシするHTTPS通信の違い

はじめに

例えば、DMZ上にあるサーバを経由して、内部ネットワーク上にあるサーバにアクセスするWebアプリケーションを考える上で、

  • リバースプロキシによるSSL-VPN通信
  • リバースプロキシするHTTPS通信

は何が違うのでしょうか?
一見、リバ-スプロキシ型のSSL-VPNとは、HTTPS通信をリバースプロキシで変換しているだけのようにも感じられます。

何をもってSSL-VPNであると言えるのか。
通常のHTTPS通信はSSL-VPNといって良いのか。
まずはVPNとは何かというところから理解すると良さそうです。

VPNに必要なこと

VPNとは、Virtuial Private Networkの言葉どおり、パブリックな環境でも仮想的なプライベートネットワークが実現できるものです。

このとき、プライベートであるということは、

  • ネットワーク通信が秘匿されること
  • 誰でもアクセスできるものではないこと

を意味します。また、どのようなプロトコルでもVPNを使えるためには、

  • 利用したいプロトコルの実装に制限されないこと

も必要になります。

まとめると、VPNに必要な要件として、

①暗号化
②認証
③カプセル化

これら3つが行われている状態でしか、プライベートネットワークにアクセスできない、という環境であればVPNと言えそうです。

では、リバースプロキシ型SSL-VPNと、リバースプロキシするHTTPS通信ではそれぞれどういう扱いでしょうか?

リバースプロキシ型SSL-VPN

①SSLによる暗号化
②パスワードや電子証明書などによるVPN装置との認証
③SSLによるカプセル化
が行われているので、確かにVPNであると言えそうです。

リバースプロキシするHTTPS通信

①SSLによる暗号化
③SSLによるカプセル化
は満たしていると言えそうです。ただし、
②認証
を伴わないため、SSL-VPNとは異なるものになります。

認証の必要性について書いている資料が少なく、
整理に苦労しましたが、やっとモヤモヤが晴れました。

疑問点

これで定義としての違いは明確になりました。ただ、実装を考える上ではまだ疑問が残ります。

ECサイトのようにユーザー認証を行うサイトなら、SSL-VPNと言えるのか?

Noです。
確かに、一見「ログイン認証を行わなければ利用できないアプリケーション」の仕様にすれば、近い扱いにはなると思います。
ただし、そのようなアプリで認証するときは、「プライベートなネットワーク上にあるDBサーバにアクセスしてユーザ認証している」ことになると思います。
これは先の、

次の3つが行われている状態でしか、プライベートネットワークにアクセスできない

を満たせていませんので、SSL-VPNではない、ということになります。

では認証のためのユーザ情報をDMZ上のWebサーバに持たせればSSL-VPNといえるのか?

これは一応Yesになりそうです。
ただしアプリで使う認証情報をDMZに置いたら危険、という別の問題が発生するので、

1.アプリ用の認証とVPNを確立するための認証は別(クライアント証明書など)にする。
2.DMZ上はリバースプロキシ専用サーバとして、Webサーバ以下は内部ネットワークに実装する。

などの工夫が必要であると考えられます。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.