WebサーバとDBサーバを別立てにする意味 情報セキュリティ

WebサーバとDBサーバを別立てにする意味 情報セキュリティ

WebサーバとDBサーバを別立てするの何で?

オンプレでもクラウドでも、WebサーバとDBサーバを別で立てることが多いと思います。情報セキュリティの観点から、その方がいいのかな、となんとなく思っていましたが、真面目に考えたことがなかったので、今回調べてみることにしました。

サーバって何?

今回はサーバの意味、機能もついでにやっておきましょう。

サーバは某掲示板では鯖とか書かれていたりしますが、もちろんサカナではありません。ハードウェア的には24時間常時可動することを目的としたコンピュータです。では、24時間何をしてるんでしょうか?

答えはパソコンなどの端末(クライアントともいう。)からのリクエストを受け付けているのです。

サーバは英語でserverと書きます。serverの動詞形はserveで、サーブは「~を供給する」という意味になります。つまり、サーバはサーブする人だからサーバ。サーブする人というのは、何か(のサービス)を供給する人ということになります

まとめると、

サーバは常時クライアントからのリクエストを受け付け、それに応答して何かのサービスを供給するシステムのこと

となります。

Web3層構造について

Webサービスを提供する場合のサーバ構築では、Webサーバ、APサーバ、DBサーバの3層に分けるのが現在の主流です。WebサーバとAPサーバを分けるようになったのは、動的ページが多くなり、Webサーバが大量のリクエストを受けたときの負荷が高まり、サービスを遅延なく提供するのが難しくなってきたからです。負荷分散の意味でWebサーバとAPサーバを分けるようになりました。

APサーバは、Webサーバからのリクエストを受けて動的なページを生成し、それを返す機能を担います。以前からある2層構造ではWebとAPサーバが同一ハード上に展開されていました。

別立てに意味があるのか、巷の意見

次に、WebサーバとDBサーバの分離についてどのような意見があるのか別立て賛成、意味なしの両面から見てみます。

別立て意味あります

Web3層構造が採用される理由にはいくつかありますが、その1つに「セキュリティの高さ」があります。DBサーバには多くの顧客情報が保存されており、万が一この情報が流出してしまうと大問題になります。Web、AP、DBがすべて1台にインストールされたシステムではクライアントから直接DBサーバにアクセスできてしまいますが、Web3層構造ではクライアントとDBサーバの間にWebサーバ、APサーバ、そしてセキュリティ製品を配置できるため、より堅牢になります。

2層構造では、WebとAPは同一サーバになります。WebサーバをDMZに設置し、DBサーバは学内ネットワークに配置する。間にはFWがありまして、WebサーバからのアクセスだけDBサーバにつなぐようにすれば、安全というわけです。

従来の2層構造では、Webサーバで要求の受け付けから情報の処理まですべてを行っていました。そのため、Webサーバに負荷がかかりすぎてしまい、レスポンスが低下したりWebサーバが停止したりするのが問題でした。そこで、WebサーバとWebアプリケーションサーバを分離することによって、Webサーバの情報処理負荷を軽減するとともに、効率良く大量の処理が可能となりました。

とてもわかり易い話です。正しいように思います。

他方、こんな意見もあります。

意味なしの意見

「サーバ1台では処理しきれない」場合でなければ、サーバを分離する意味は全くありません。

情報セキュリティの観点から?
これ勘違いしてる人が非常に多いです。

Webサービスに対するセキュリティ侵害のほとんどは、正規に外部に公開されているI/Fを経由してAPサーバ(アプリケーションかミドルウェア)の脆弱性を攻撃されるものです。一方、Webサーバ(HTTPサーバ)にはリスクの高い脆弱性というのはほぼ無いと言っていいでしょう。したがって、

  • APサーバがWebサーバと分離されているかどうか
  • APサーバがDMZにあるか別ネットワークか

とかいうのは、攻撃耐性という観点ではほとんど違いがありません。

非公開ファイル(アプリケーションの内部ログなど)の誤公開、といったポカミスのようなものは防げるかもしれませんが、まぁその程度の話です。

APサーバがセキュリティ侵害を受けた結果2次的な攻撃の発信源になる、というところまで考えると、保護すべき他のサーバと同じネットワークに配置するのは最悪の選択なので、DMZにおいて置いた方が遙かにましということになります。

セキュリティ上の観点では、CMSやEコマースシステムなどのように、

外部に公開するサービス
組織内部からのみ利用する管理システム
みたいなものがある場合に、

外部接続はフロントエンドのWebサーバ経由
内部接続はAPサーバを直接触るか、それ用に別のWebサーバを用意してそれ経由という分け方をすることはあります。極端な例は静的ファイル出力型のCMSで、これはWebサーバ→APサーバの接続が全くない形になります。

なるほど。しかし、この意見ではWebサーバとAPサーバの分離について言っているので、Web・APサーバとDBサーバの分離に意味はないとは言っておりませんね。

やはりWebとDBは分けるようです。WebとAPは負荷状況によっては分けると。

結論

WebとDBサーバは分けたほうが情報セキュリティ上やっぱり良い!

こんな意見がありました。

侵入者はまず、OS標準の機能で乗っ取ったサーバをコントロールすると思います。このとき、FTPやrcpでファイルが外部にコピーできてしまうようであれば当然、その機能でファイルをコピーされてしまう可能性が高いです。
ですからWebとDBが同一のサーバ上にあると、DBのファイルにアクセスされる危険が高くなります。これを避ける意味で、WebサーバとDBサーバを分けた環境に構成する方がセキュリティは強化されます。

別のサーバに分けてもWebサーバが乗っ取られたら、結局はこれを足がかりにしてDBサーバにアクセスできるから情報セキュリティ的には変わらないのでは?という意見もあります。 乗っ取られたWebサーバが何も考えず構成されていれば、その危惧が現実になる可能性はさらに高くなります。

しかし、構成するWebサーバに開発環境や実行環境を注意深く構成し、余計なコマンドや機能を入れない(または実行できない)ようにする事で、乗っ取ったサーバでのクラッカーの作業をより困難にする事が可能ですので、サーバを分けてもセキュリティ的に差が無いという訳ではありません。

DMZに設置するWebサーバと内部セグメントのDBサーバの間には、FWなどのセキュリティ製品を配置するでしょうから、情報セキュリティは、一般的に高くなるということです。セキュリティ製品の設定が適切であれば、という条件はつきますが。