29.5 透過型プロキシの設定

一般的なプロキシサーバの作業では、Webブラウザがプロキシサーバの特定のポートに要求を送信し、プロキシが要求に応じて必要なオブジェクトを提供します。ネットワークで操作する場合には、次のような状況が発生することがあります。

いずれの場合も、透過型プロキシを使用できます。原則はきわめて簡単で、プロキシはWebブラウザのリクエストを捕捉して応答するため、Webブラウザは要求したページを出所を認識せずに受信します。透過型プロキシと呼ばれるのは、このプロセス全体が透過的に実行されるためです。

29.5.1 /etc/squid/squid.conf内の設定オプション

squidを透過的なプロキシとして動作させるには、メインの設定ファイル/etc/squid/squid.conf内でhttp_portタグのtransparentオプションを使用します。squidを再起動した後は、httpポートをhttp_portで指定されたポートにリダイレクトするようファイアウォールを再設定するだけです。次のsquid設定ラインでは、これはポート3128になっています。

http_port 3128 transparent

29.5.2 SuSEfirewall2を使用したファイアウォール設定

ファイアウォールを介して受信するリクエストをすべて、Squidポートへのポート転送ルールに従ってリダイレクトします。そのためには、8.4.1項 「Configuring the Firewall with YaST」で説明しているように、同梱のツールであるSuSEfirewall2を使用します。このツールの設定ファイルは/etc/sysconfig/SuSEfirewall2にあります。この設定ファイルは、適切なエントリで構成されています。透過型プロキシを設定するには、次に示すようにいくつかのファイアウォールオプションを設定する必要があります。

  • インターネットを指すデバイス:FW_DEV_EXT="eth1"

  • インターネットを指すデバイス:FW_DEV_INT="eth0"

インターネットなど、信頼されない(外部)ネットワークからアクセスが許可される、ファイアウォール上のポートとサービスを定義します(/etc/servicesを参照)。この例では、外部に対してWebサービスのみが提供されます。

FW_SERVICES_EXT_TCP="www"

安全な(内部)ネットワークからのアクセスが許可される、ファイアウォール上のポートとサービス(TCPサービスとUDPサービスの両方)を定義します(/etc/servicesを参照)。

FW_SERVICES_INT_TCP="domain www 3128"
FW_SERVICES_INT_UDP="domain"

この例では、WebサービスとSquid (デフォルトポートは3128)へのアクセスが許可されます。domainサービスはDNS (ドメインネームサービス)を意味します。このサービスは一般に使用されます。一般に公開しない場合は、単に上記のエントリから削除して次のオプションをnoに設定します。

FW_SERVICE_DNS="yes"

最も重要なのは15番目のオプションです。

例 29-1 ファイアウォールの設定:オプション15

# 15.)
# Which accesses to services should be redirected to a local port on
# the firewall machine?
#
# This option can be used to force all internal users to surf via
# your squid proxy, or transparently redirect incoming webtraffic to
# a secure webserver.
#
# Format: 
# list of <source network>[,<destination network>,<protocol>[,dport[:lport]]
# Where protocol is either tcp or udp. dport is the original
# destination port and lport the port on the local machine to
# redirect the traffic to
#
# An exclamation mark in front of source or destination network
# means everything EXCEPT the specified network
#
# Example: "10.0.0.0/8,0/0,tcp,80,3128 0/0,172.20.1.1,tcp,80,8080"

上記のコメントは、次の構文を示しています。最初に、プロキシファイアウォールにアクセスする内部ネットワークのIPアドレスとネットマスクを入力します。次に、これらのクライアントからのリクエストの送信先となるIPアドレスとネットマスクを入力します。Webブラウザの場合は、ネットワーク0/0を指定します。これは、あらゆる場所」を意味するワイルドカードです。その後、これらのリクエストの送信先となるオリジナルポートを入力し、最後に全リクエストのリダイレクト先となるポートを入力します。SquidはHTTP以外のプロトコルをサポートしているため、要求は他のポートからFTP (ポート21)、HTTPSまたはSSL (ポート443)などのプロキシにリダイレクトされます。この例では、Webサービス(ポート80)がプロキシポート(ポート3128)にリダイレクトされます。他にも追加するネットワークやサービスがある場合は、対応するエントリに空白1個で区切って指定する必要があります。

FW_REDIRECT="192.168.0.0/16,0/0,tcp,80,3128"

ファイアウォールとそれを使用した新規設定を開始するには、/etc/sysconfig/SuSEfirewall2ファイル内のエントリを変更します。エントリSTART_FW"yes"に設定する必要があります。

セクション 29.3, Squidの起動のように、Squidを起動します。正常に動作しているかどうかを確認するには、/var/log/squid/access.logにあるSquidログを参照してください。すべてのポートが正しく設定されているかどうかを確認するには、ネットワーク外にあるコンピュータから、該当するコンピュータのポートスキャンを行います。Webサービス(ポート80)のみがオープンしている必要があります。nmapコマンドを使用してポートを検索する場合の構文は、nmap -O IP_addressです。