natテーブルを利用したLinuxルータの作成・3(外部から内部サーバへのアクセスと負荷分散):iptablesテンプレート集 改訂版(5)(1/3 ページ)
この連載では、初心者にとってハードルの高いiptablesの設定を、テンプレートを用いながら紹介していきます。「習うより慣れよ!」の精神でまず試してみてはいかがでしょう。(編集部)
はじめに
前回に引き続き、IPパケットのディスティネーションアドレスを書き換える「DNAT」を使ったiptablesの使用例を紹介します。DNATはパケットの送信先IPアドレス情報を書き換える技術です。Aホストあてのパケットを、DNATでBホストあてに変更できます。
今回は、DNATを使ったポート転送と負荷分散を可能にする方法を解説します。
関連リンク:
→Linuxで作るファイアウォール[パケットフィルタリング設定編]http://www.atmarkit.co.jp/flinux/rensai/security05/security05a.html
→連載記事 「習うより慣れろ! iptablesテンプレート集」http://www.atmarkit.co.jp/flinux/index/indexfiles/iptablesindex.html
→連載記事 「習うより慣れろ! iptablesテンプレート集 改訂版」http://www.atmarkit.co.jp/flinux/index/indexfiles/newiptablesindex.html
DNATでポート転送
市販のブロードバンドルータは「ポート転送」や「仮想サーバ」と呼ばれる機能を搭載しています。ルータの内部ネットにあるサーバに対し、外部ネットから接続できるようにしたものです。外部ネットからルータに対するアクセスのうち、あらかじめ指定したサービスポートのものを内部ネットのサーバに転送します。同等の機能をiptablesを使ってLinuxルータに実装できます。
Linuxでポート転送を実現するには、Linuxルータの外部ネット側アドレス(一般にはグローバルIPアドレス)へのアクセスのうち、HTTPやSMTPのような特定サービスのパケットに対し、ディスティネーション(送信先)アドレスをサーバのアドレス(一般にはプライベートアドレス)に書き換えます。ディスティネーションアドレスを書き換えるには、iptablesのDNATを利用します。
サーバにグローバルIPアドレスを付与し、ネットワーク外の端末から直接アクセスする場合に比べ、指定したサービス以外のパケットがサーバに到達できません。このため、サーバが攻撃にさらされる危険性を多少低減できます。また内部ネットを分割し、サーバのあるセグメントを独立させることで、DMZ(DeMilitarized Zone)を実現できます。
外部ネットからのアクセスを受けるサーバは、内部ネットのほかのホストとセキュリティポリシーが異なります。ポリシーに合った運用がなされるよう、「外部ネット」「内部ネット」「サーバのあるネット」とセグメントを3分割します。外部ネットでも内部ネットでもない新たなセグメントをDMZ(非武装地帯)として開放することで、サーバへの限定的なアクセスを可能にしながら、内部ネットのセキュリティを確保できます。
ポート転送によって、特定サービスポート以外のアクセスを遮断できますが、特定サービスポートに対する外部ネットからのDoSやDDoSといった攻撃を受ける可能性は残るため、注意が必要です。
DNATによるサーバの負荷分散(ロードバランシング)
DNATでポート転送させることで、外部ネットからも内部ネットのサーバにアクセスできますが、iptablesではさらに、転送先に複数のサーバを指定することができます。例えばHTTPに対するアクセスを2台のサーバに割り当てることで、Webサーバの負荷分散が可能になります。
DNATを使った負荷分散が行うのは、リクエストのたびに転送先を変更する「ラウンドロビン方式」です。サーバとクライアント間のセッションが張り直されるたびに異なるサーバが割り当てられ、リクエスト数をサーバの台数に応じて等しく分割できます。
従って、サーバの処理能力に比例したリクエストの割り当てや、一方のサーバがダウンした場合の切り離しなど、本格的な負荷分散システムには対応していません。またcookieやセッション情報の継続性が必要なコンテンツにも対応していません。本格的なスケジューリング・アルゴリズムを使用した負荷分散システムが必要ならば、ロードバランサやリバースプロキシが可能なサーバを利用します。
Copyright © ITmedia, Inc. All Rights Reserved.