13.4. 透過型プロキシサーバーの設定

通常のプロキシサーバーを構築した場合、ユーザーは使用している Web ブラウザにプロキシサーバーとポート番号の指定を行わなければなりません。Web ブラウザは設定されたプロキシサーバーに HTTP リクエストを行ない、プロキシサーバーはそのリクエストを外部の Web サーバーへ転送します。通常のプロキシサーバーはこのようにユーザー側で設定されることにより、プロキシサーバーとしての役割を果たすことができます。しかし、ブラウザ設定の手間を省きたい場合やユーザーにプロキシを使わせたいがプロキシサーバーの存在をユーザーに意識させたくないといった状況も考えられます。このようなときに利用できるのが透過型プロキシです。透過型プロキシを利用すると、ユーザーは外部の Web サーバーに直接接続しているように見えますが、実際にはゲートウェイ上で動作させたプロキシサーバーへと接続されています。

透過型プロキシサーバーは、iptables の機能を組み合わせることで実現します。インターネットと LAN を分離するゲートウェイ上で透過型プロキシサーバーを動作させれば、クライアントが Web サーバーへアクセスするためのパケット(TCP の 80 番ポート宛のパケット)を検出し、iptables で定義したルールにより Squid がリクエストを待ち受ける 3128 番ポートにパケットを転送します。そして、そのパケットを Squid が受け取り代理アクセスを行います。これにより、クライアント側では特別な設定を行わなくても Web サーバーへアクセスできるようになります。

以下では、透過型プロキシの設定について解説します。

13.4.1. 透過型プロキシのための Squid の設定

透過型プロキシを有効にするには以下のタグを設定します。

http_port 3128 transparent

http_port port transparent

ここでは、port に Squid の標準のポート番号である 3128 をそのまま指定しています。これは、Squid がリクエストを待ち受けるポート番号で、iptable のルールによりパケットが転送されるポート番号となります。options には、必ず transparent を指定します。その他の options については、squid.conf ファイル内のコメントおよび 項13.3.1 を参照してください。

ティップ

Squid の以前のバージョンにあった httpd_accel_host や httpd_accel_uses_host_header は、Squid 2.6 では、http_port の options指定の defaultsite や vhost に変更されています。

13.4.2. 透過型プロキシのための iptables の設定

透過型プロキシにおける iptables の役割は、Web サーバー宛のパケットを Squid がリクエストを待ち受ける 3128 番ポート(既定値の場合)に転送することです。よって、iptables を使用して以下のようなルールを定義します。iptables の詳細については、第22章を参照してください。

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

次にパケットフォワーディングを有効にします。

# echo 1 > /proc/sys/net/ipv4/ip_forward

設定後、クライアントから Web ページを参照できることを確認します。また、/var/log/squid/access.log に書き出されるログを参照し、プロキシ経由でリクエストがフォワードされていることも確認してください。