この連載では、初心者にとってハードルの高いiptablesの設定を、テンプレートを用いながら紹介していきます。「習うより慣れよ!」の精神でまず試してみてはいかがでしょう。(編集部)
今回は、iptablesを用いて、IPパケットのディスティネーションアドレスを書き換える「DNAT」を実現する例を紹介します。
DNATは、パケットの送信先IPアドレス情報を書き換える技術です。Aホストあてのパケットを、DNATで、Bホストあてに変更することができます。前回解説したiptablesを使ったLinuxルータにDNAT機能を追加すれば、ルータを通過するWebサーバあてのパケットをHTTPプロキシサーバに向けることができます。
→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
NAT(Network Address Translation)とは、パケット中のIPアドレスを書き換える技術です。本連載では、送信元(=ソース)を書き換える場合をSNAT、送信先(=ディスティネーション)を書き換える場合をDNATと呼んでいます。
前回はSNATとIPマスカレード(またはNAPT)を使って、1つのグローバルIPアドレスを複数のプライベートIPアドレスで共有する方法を解説しました。
今回はDNATを使用します。DNATを使えば、AホストあてのパケットをBホストあてに変更することができます(図1)。DNATを応用すれば、WebサーバあてのパケットをHTTPプロキシサーバへ向けることができます。
外部ネットワークへの接続リソースを節約するために、しばしばプロキシサーバが使われます。1度目のアクセスでダウンロードしたデータをプロキシサーバに保存し、2度目以降のアクセス時には保存したデータを再利用すれば、アクセスを高速化し、外部ネットワークにつながるバックボーンの使用率を抑えることができます。
プロキシサーバを利用するには、通常はクライアント側の設定が必要です。例えばWebアクセスを高速化するHTTPプロキシサーバを利用するには、Internet ExplorerやFirefoxといったブラウザに、あらかじめプロキシサーバのアドレスを設定しておきます。しかし、こうした設定作業は大変煩わしいものです。
そこでDNATを使って、Webサーバあてのパケットを強制的にHTTPプロキシサーバに向けるようにします。こうしたプロキシサーバは、利用者が意識することなく透過的に利用できるため、「透過型プロキシサーバ」と呼ばれています。
では、HTTPプロキシサーバを用意します。LinuxのHTTPプロキシには「Squid」や「Apache HTTPD」「3proxy」など多くの選択肢があります。ここではCentOSにSquidをインストールする方法を解説します。
インストールにはパッケージを利用します。yumコマンドで次のようにオンラインインストールします。
# yum install squid ...省略... Is this ok [y/N]: y ←「y」をタイプ
次に「/etc/squid/squid.conf」ファイルを設定します。クライアントがSquidを利用できるようにアクセス制限を解除しておきます。Squidの設定には、ほかにもキャッシュ容量やメモリキャッシュの指定など、アクセス効率を左右する重要な設定がありますが、ここでは簡易的なものにとどめます。なおSquidのデフォルトでは、サービスポートにTCP 3128番を使用します。
...省略... #プロキシを利用する内部ネットの定義とアクセス制限の解除 acl our_networks src 192.168.0.0/24 http_access allow our_networks ...省略... #サービスポートの指定と、透過型プロキシのための設定 http_port 3128 transparent ...省略...
設定終了後、serviceコマンドでSquidサービスを起動します。終了させる場合もserviceコマンドを利用します。なおサーバ起動とともに自動的にSquidサービスを開始するには、chkconfigコマンドでサービスを登録しておきます。
# service squid start ←開始 # service squid stop ←停止 # chkconfig squid on ←自動起動サービスとして登録
動作を確認するには、クライアント側でHTTPプロキシサーバを設定し、Webアクセスを実行します。アクセスログ「/var/log/squid/access.log 」で接続を確認します。
1266564491.140 1264 192.168.0.2 TCP_MISS/200 60243 GET http://www.atmarkit.co.jp/flinux/rensai/iptables203/iptables203b.html - DIRECT/202.218.219.160 text/html 1266564491.212 174 192.168.0.2 TCP_MISS/200 707 GET http://www.atmarkit.co.jp/flinux/stylesheet/flinuxarticle.css - DIRECT/202.218.219.160 text/css 1266564491.524 486 192.168.0.2 TCP_MISS/200 22482 GET http://www.atmarkit.co.jp/stylesheet/articles.css - DIRECT/202.218.219.160 text/css
プロキシサーバを構築する際、本来はキャッシュデーモンのセキュリティや、サーバへのアクセス制限を厳密に行う必要があります。この解説は簡易的な構築方法にとどめているため、実際の運用に当たっては注意が必要です。
Copyright © ITmedia, Inc. All Rights Reserved.