いちばん失敗した人決定戦

現在、外部のレンタルサーバーでMySQLサーバーを動かし、そのDBに、VPNを介してインターネットを通してやり取りする専用の業務アプリを作り、そのアプリで様々な業務上の作業を行っています。

そこで、ふと思ったのですが、この外部のサーバーとのやり取りはMySQLとの通信だけです。VPNを利用する意味はあるのか?と思いました。
ファイルサーバーやアプリケーションサーバーなどいろいろな用途に使われる場合は、通信のプロトコルやポートなど様々なので、すべてを包括的にトンネル化するVPNが有用だと思いますが、例えば、特定のプロトコルでしか通信しない場合、そのプロトコルで暗号化されていれば、問題ないのかな?と考えました。

実際どうなんでしょうか。
もちろん、接続を開始する段階の「認証」は別で考える必要がありますが。
詳しい方、よろしくお願いします。

A 回答 (4件)

#1の回答者ではありませんが、


HTTPSでPHPで書かれたサイトを通したMySQLに接続した場合について#1さんの回答について考察してみます。
PHPというと、mod_phpをApacheに組み込んでいるのかと思ったのでその辺りの設定もちょっと触れます。

端的に言えば、ちゃんとSSLを使えば(1) - (3)を満たすでしょう。そして、(1) - (3)を満たす場合の安全性はVPNを使っている場合と同等でしょう。SSLというと通信内容の暗号化に目が行きがちですが、SSLの肝はむしろなりすましの防止にあると自分は思います。

(1)通信路の暗号化

SSLv3/TLSv1以上でしか接続しないようになっていて、弱い暗号を使っていなければ、SSLのライブラリーに脆弱性がない限り大丈夫でしょう。

Apacheを使っているなら、この辺りの設定をして、最新のApache、OpenSSLを使うとよいでしょう。
http://httpd.apache.org/docs/2.2/ssl/ssl_howto.h …

(2)接続先の認証(正しいサーバーと接続しているか)

クライアント側のコードでちゃんとサーバーの証明書をverifyするように書いてあればよいでしょう。
ちなみに、前述のとおり証明書をverifyしないとSSLを使う意味がありません。DNS cache poisoningなど様々な方法で偽のサーバーに接続させられ、機密情報を偽のサーバーに送ることとなるでしょう。

余談ですが、クライアントの方はサーバーの証明書のverifyに加えて(3)のためにクライアント証明書をサーバーに提供するように設定しておく必要があります。

(3)クライアントの認証

サーバー側のコードでちゃんとクライアントの証明書をverifyするように書いてあればよいでしょう。
例えば、もしApacheを使っているならこの辺りの設定が必須ですね。
http://httpd.apache.org/docs/2.2/ssl/ssl_howto.h …

ちなみに、クライアント認証がないとインターネット上の任意の攻撃者がサーバーに任意のHTTP requestを投げられます。そして、PHPのライブラリーなどに脆弱性がある場合や、よく知られたパスにプログラムが置いあった場合などに部外者から攻略されるリスクが有ると思います。

(4)MySQL等の脆弱性をついた攻撃への対処

これはSSLを使って防げるものではないですが、VPNにした場合と安全性は変わらないと思います。
PHPのプログラムやPHPのライブラリーに脆弱性があった場合、内部犯によって不正にデータベースの閲覧や改竄をされる可能性があると思います。

ただ、クライアント証明書など様々な方法でアクセスコントロールをして、権限がない人がそのページにアクセス出来ないようにしておくことで権限がある一部の人しか攻略のチャンスが無いようにはできると思います。
それでも本当に攻撃したい場合は権限がある人に攻撃プログラムを実行させたり、その人が昼食に行っている間に攻撃したりという可能性もあるでしょうが、そこら辺は社員へのセキュリティ教育で何とかするところでしょうね。


というわけで、ちゃんとSSLを使えばVPNを使う必要はないと思いますが、#1さんもおっしゃっている通り、ちゃんとするのが難しいですね。
    • good
    • 0
この回答へのお礼

ありがとうございます。

いろいろ ”ちゃんと” やるのは大変そうですね・・・。

そこまでのエキスパートでなければ
素直にVPNを利用した方がいいのかもしれませんね・・・。

勉強になりました。

お礼日時:2013/12/04 20:27

 そういった発想であれば、暗号化の一つであるSSL通信をさせる方法もありますが、その際にWebサーバへ中継しSSL認証させる方法、その他SSL-VPNネットワークを張る方法、VPNネットワークでもキャリア型VPN(フレッツVPNワイドやKDDI IP-VPN等)を利用する方法もあります。


 VPNもセキュリティ確保でのデータ送信する一つの方法ですので、用途に併せ選択して頂ければと存じますが、DBサーバのクエリを回線上乗せる場合には、セキュリティ管理はくれぐれも軽視しない方が良いですよ。
 個人情報や会社機密情報など、責任問題となる場合もあります。
 VPNネットワークでも、コストによりセキュリティ拡充構成とセキュリティが不十分な構成もありますので、VPN(特にIPSEC-VPN)以外での構築となると、Webサーバ中継型https暗号化認証といった構築なども考慮した方が良いかと存じます。
    • good
    • 0
この回答へのお礼

ありがとうございました。

そうなんです、クエリを回線上に乗せるので
それも心配なんです。

現在利用している専用サーバーのVPNが高すぎて
代替案を検討してましたが、
難しいそうです・・・。

お礼日時:2013/12/04 20:29

こんにちは。



外国のホスティング業者等では、MySQL用のポート(IP#3306)を外部接続可能にしているところが多数ありますが、日本だとそのようなサービスを見たことはありません。

お客様のサービス用に、自社管理サーバ(顧客専用Webサーバとして運用)のMySQLポートを外部(顧客業務アプリ)に公開しています。
セキュリティ対策については、ファイアウォールでポートを変更し、対向IPを固定した程度です。
以前はVPN環境でしたが、ご指摘の通りインターネットVPNでは速度が出ないため、現在の形式になりました。
セキュリティの専門家が見たら問題ありかと思いますが、客先には好評で、普通に運用されているようです。
    • good
    • 0
この回答へのお礼

ありがとうございます。

MySQLと直接ではなく、間にPHPを挟んだ場合は、セキュリティ的にはどうでしょうか?
そのphpとのhttp通信をSSLにした場合など。
一般的な業務アプリは、どのようにしてセキュリティを保っているのか
とても興味があります。

お礼日時:2013/11/26 16:01

MySQL等とインターネット経由で直接接続する際は、通信路の暗号化も含めて、以下に注意する必要があります。



(1)通信路の暗号化
(2)接続先の認証(正しいサーバーと接続しているか)
(3)クライアントの認証
(4)MySQL等の脆弱性をついた攻撃への対処

上記が完璧であれば、理論的には、VPNなしに直接接続してもよいことになります。
しかし、現実にはそれは煩雑であるという理由から、MySQL等を直接インターネットに公開することは、あまり行われないのだと思います。MySQL等がそのような想定の設計になっていない可能性もありますし。

ということで、理論的には可能だが、現実には課題があるというのが結論です。
    • good
    • 0
この回答へのお礼

ありがとうございます。

実際には、MySQLと直接ではなく、間にPHPを挟んでいます。
特定のPHPファイルにhttpでアクセスし、Apacheがphpを動かしてやり取りします。
そのhttpの通信をSSLにするれば、通信自体の暗号化はクリアなのかなと思います。

この場合は、ご指摘いただいた注意点(1)から(4)のうち(4)は取り除かれるでしょうか??

お礼日時:2013/11/26 13:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!