squidを透過型プロキシとして使う時の設定

squidをubuntu上にインストールし、透過型プロキシとして使用するための設定をメモします。図のようなネットワーク構成で、ubuntu1がsquidを使用します。なお、ubuntu1にプロキシサーバに関する設定を行うことなく、ubuntu1のhttpトラフィックをsquidに介入させる設定は完了しているとします。(vyattaを使って透過型プロキシ環境を構築する参照)
Squidのインストール
ubuntuのターミナル上で下記のコマンドを実行してsquidのインストールは完了です。
/etc/squid3/squid.confの修正
続いてsquidを透過型プロキシとして使うための設定です。/etc/squid3/squid.confに必要な記述を追記します。
アクセスコントロールの設定
まず、squidにクライアントPC(図中ubuntu1)のトラフィックの処理を許可するために、アクセスコントロールを設定します。具体的には、クライアントPC(図中ubuntu1)のネットワークアドレス192.168.101.0/24からのトラフィックの処理を許可するために、下記の2行をsquid.confに追記します。 「acl lan1 src 192.168.101.0/24」でsquidに届いたトラフィックの送信元が192.168.101.0/24であるネットワークを定義しています。「lan1」は適当につけた名前です。そしてここで定義した「lan1」からのトラフィックの処理をsquidに許可するために「http_access allow lan1」を追記します。
squidがトラフィックを待ち受けるポート番号の設定
squidが待ち受けるポート番号を3128に指定し、さらに透過型プロキシとして使う場合には「transparent」を記述します。
ログ形式の設定
/var/log/squid3/access.logに記録されるsquidのログ形式を指定します。デフォルトだと日時が累積秒数で表示されてわかりにくいので、12/Mar/2013:15:20:21のように表示されるように変更します。
キャッシュに使用するディスクサイズの設定
squidがキャッシュに使用するディスク(HDD、SSD)サイズ(MB単位)を指定します。100がディスクサイズ、16が一次ディレクトリ数、256が二次ディレクトリ数を表しています。ここのディスクサイズが大きいほど、より多くのWebコンテンツをキャッシュすることができ、キャッシュヒット率を向上させることができます。
キャッシュに使用するメモリサイズの設定
squidがキャッシュに使用するメモリサイズ(MB単位)を指定します。メモリサイズもディスクサイズと同様、大きいほどキャッシュヒット率を向上させることができます。ディスクよりもメモリのほうがコンテンツを読み込む速度が速いため、メモリサイズを大きくしてメモリキャッシュヒット率を高くしたほうが、クライアントPCに対する応答速度が速くなる場合が多くなります。
DNSサーバの設定
squidが使用するDNSサーバのIPアドレスを指定します。
最後に設定を反映させるためにSquidを下記のコマンドで再起動します。
以上でsquidの設定は完了です。
/proc/sys/net/ipv4/ip_forwardの値の修正
デフォルトでは/proc/sys/net/ipv4/ip_forwardに記述されている値が0となっており、この場合はIPフォワード機能が無効になっています。squidを動作させるにはIPフォワードを有効にする必要があるため、squidがインストールされたubuntuで下記のコマンドを実行し、ip_forwardの値を1に設定します。
上記を実行すると「Permission denied」とエラーが出るかもしれませんが、これはip_forwardに対する書き込み権限がないことが原因です。この場合はsuを使ってrootになってから上記のコマンドを実行するか、もしくは下記のコマンドを実行すればエラーが出ないはずです。
iptablesの設定
最後にsquid(実際にはSquidが動作するubuntu)に対して届いたhttpトラフィック(ポート番号80番)をsquidが待ち受けているポート番号である3128番宛のトラフィックに変換させるためのiptablesの設定を行います。下記をターミナル上で実行します。
上記では、squidにルーティングされてきたトラフィックのうち、送信元が192.168.101.0/24でありかつ宛先ポート番号が80番であるものを、DNATによって宛先アドレスを192.168.101.101(squidのIPアドレス)、宛先ポート番号を3128番(上記で設定したsquidが待ち受けるポート番号)に変換しています。この設定により、クライアントPCのhttpトラフィックをsquidに処理させることができます。
ただし、firestarterなどのファイアウォールを使用している場合は、firestarterによってsquidにルーティングされてきたトラフィックがブロックされて下記のようなエラーが出る場合もあるので、その場合はfirestarterを停止した上で上記のiptablesの設定をしてみて確認すると良いかもしれません。ただし、ファイアウォールを停止することはリスクが伴うので自己責任で安全な環境のもとで停止して下さい。なお、上記のiptableの設定を追加した後にfirestarterを停止するとリセットされて消えるので気をつけて下さい。
開発アプリ
