squidによる透過Proxyの構築。

職場での話なのですが、要はエロサイトばかりを見ておらっしゃる方がいたので対策をするため、透過Proxyの構築をしてみました。

<概要> ブラウザへ明示的にProxy設定をしなくとも、クライアントPCはデフォルトゲートウェイを抜けるだけでProxyを通過する仕組みを構築したい。 (ユーザレベルでのネットワーク設定変更・ソフトの設定変更無しに、透過的にProxyを使用させる)

<構成したネットワーク>
 +----------+
 | clientPC | 192.168.0.123/24
 +----------+
      :
      :
 +----------+
 | TR squid | 192.168.0.2/24
 +----------+
      :
      :
 +----------+
 | RT57i    | 192.168.0.1/24
 +----------+
      |
      |
 (the internet)
<ネットワークの流れ>
[1]従来、DHCPにてデフォルトゲートウェイを192.168.0.1にしていたが192.168.0.2へ変更。

[2]192.168.0.2のデフォルトゲートウェイは、192.168.0.1にし、クライアントPCからパケットが流れてきた場合、そのまま素通しする。

[3]例外として、クライアントPCより192.168.0.2に来たパケットにおいて「ポート80」行きのパケットがあった場合、同サーバ内にて動作しているsquid(ポート3128)へリダイレクトする。

[4]結果として、強制的にweb接続はProxy接続となる。

<具体的設定方法>
今回、192.168.0.2に設定した項目は以下の通りです。[ipfilter + ipnatを使用する]

(1)カーネルの再構築をするか、ipfモジュールを読み込む。
# kldload ipf
又は、カーネル再構築で
options IPFILTER をつけてカーネル再構築。

(2)以下ファイルを記述する
{/etc/ipf.rules}
pass in all
pass out all
※今回はパケットを素通しするため単純なルールにする
{/etc/ipnat.rules}※今回の最も大事なところその1
rdr de0 0/0 port 80 -> 127.0.0.1 port 3128
※宛先がport80のものは、すべてpoxyのポートへ飛ばす。(de0はNIC名)
{/etc/rc.conf}
ipfilter_enable=”YES”
ipfilter_rules=”/etc/ipf.rules”
ipfilter_flags=””
ipnat_enable=”YES”
ipnat_rules=”/etc/ipnat.rules”
gateway_enable=”yes”
※最後のgatewayでパケット転送を許可する。

(3)squidをHTTPacceleratorモードで動かすようsquidを変更
{squid.conf}
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

<検証>DHCPにて、192.168.0.2へデフォルトゲートウェイを向け、クライアントPCのブラウザ(proxy)設定がなされていなくとも、Proxy経由にて接続されているか確認する。確認くんなどを利用して、
proxyのバージョン等 … 1.1 rtgate.kenti.jp:3128 (squid/2.5.STABLE9)
などが表示されれば、透過的にProxyが使用されているようです。

あとはsquid.confにて、時間外はホームページ閲覧を禁止する、など時間制限を設定すればよさそうです。

[例:squid.conf]
 acl xtime1 time MTWHFA 23:00-23:59
 acl xtime2 time MTWHFA 0:00-7:00
 acl xtime3 time S 0:00-23:59

 http_access deny xtime1
 http_access deny xtime2
 http_access deny xtime3

※月~土の23:00から翌朝7:00までと、日曜日(終日)は閲覧禁止というルール。

<補足> ipnatに変わるものとして、ipchains、iptablesで構築することも可能です。
[ipchainsの場合]
 ipchains -A input -p TCP -d any/0 www -j REDIRECT 3128

[iptablesの場合]
 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

で代替え可能です。(Linuxでも同じことが可能)

なんてことはないのですが、OpenBlocksなどに今回の設定を施してあげると、有害サイトブロック用ゲートウェイなどを構築し、売れるんじゃないかなぁと考えてみます。

一番の要は、ポートリダイレクトがルータなどでできるととてもいいなぁと思うのです。

“squidによる透過Proxyの構築。” への1件の返信

コメントは受け付けていません。