一般的なプロキシサーバの作業では、Webブラウザがプロキシサーバの特定のポートに要求を送信し、プロキシが要求に応じて必要なオブジェクトを提供します。ネットワークで操作する場合には、次のような状況が発生することがあります。
セキュリティ上の理由から、すべてのクライアントがインターネットでのナビゲーションにはプロキシを使用することを推奨される場合。
すべてのクライアントが、認識するかどうかに関係なくプロキシを使用する必要がある場合。
ネットワーク上でプロキシが移動しても、既存のクライアントは古い設定を保持する必要がある場合。
いずれの場合も、透過型プロキシを使用できます。原則はきわめて簡単で、プロキシはWebブラウザのリクエストを捕捉して応答するため、Webブラウザは要求したページを出所を認識せずに受信します。透過型プロキシと呼ばれるのは、このプロセス全体が透過的に実行されるためです。
squidを透過的なプロキシとして動作させるには、メインの設定ファイル/etc/squid/squid.conf内でhttp_portタグのtransparentオプションを使用します。squidを再起動した後は、httpポートをhttp_portで指定されたポートにリダイレクトするようファイアウォールを再設定するだけです。次のsquid設定ラインでは、これはポート3128になっています。
http_port 3128 transparent
ファイアウォールを介して受信するリクエストをすべて、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です。