natテーブルを利用したLinuxルータの作成・2(DNATで透過型プロキシサーバを実現)iptablesテンプレート集 改訂版(4)(1/3 ページ)

この連載では、初心者にとってハードルの高いiptablesの設定を、テンプレートを用いながら紹介していきます。「習うより慣れよ!」の精神でまず試してみてはいかがでしょう。(編集部)

» 2010年03月11日 00時00分 公開
[鶴長鎮一@IT]

はじめに

 今回は、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


DNATで透過型プロキシサーバを実現する

 NAT(Network Address Translation)とは、パケット中のIPアドレスを書き換える技術です。本連載では、送信元(=ソース)を書き換える場合をSNAT、送信先(=ディスティネーション)を書き換える場合をDNATと呼んでいます。

 前回はSNATとIPマスカレード(またはNAPT)を使って、1つのグローバルIPアドレスを複数のプライベートIPアドレスで共有する方法を解説しました。

 今回はDNATを使用します。DNATを使えば、AホストあてのパケットをBホストあてに変更することができます(図1)。DNATを応用すれば、WebサーバあてのパケットをHTTPプロキシサーバへ向けることができます。

DNAT 図1 DNATでパケットの送信先情報を書き換える

 外部ネットワークへの接続リソースを節約するために、しばしばプロキシサーバが使われます。1度目のアクセスでダウンロードしたデータをプロキシサーバに保存し、2度目以降のアクセス時には保存したデータを再利用すれば、アクセスを高速化し、外部ネットワークにつながるバックボーンの使用率を抑えることができます。

 プロキシサーバを利用するには、通常はクライアント側の設定が必要です。例えばWebアクセスを高速化するHTTPプロキシサーバを利用するには、Internet ExplorerやFirefoxといったブラウザに、あらかじめプロキシサーバのアドレスを設定しておきます。しかし、こうした設定作業は大変煩わしいものです。

 そこでDNATを使って、Webサーバあてのパケットを強制的にHTTPプロキシサーバに向けるようにします。こうしたプロキシサーバは、利用者が意識することなく透過的に利用できるため、「透過型プロキシサーバ」と呼ばれています。

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

 プロキシサーバを構築する際、本来はキャッシュデーモンのセキュリティや、サーバへのアクセス制限を厳密に行う必要があります。この解説は簡易的な構築方法にとどめているため、実際の運用に当たっては注意が必要です。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。