Windows 8.1でプロキシサーバーを構築する
動機
- プロキシサーバというものはどのようにして構築するのか試したかった。
- LinuxはよくわからないのでWindows。
- インターネット閲覧でブラックリスト、ホワイトリスト方式のフィルタリングをどのように実現するのかを試してみたかった。
- アクセスログを取集してみたかった。
プロキシサーバソフト
Squidを使用する。Delegateという日本人が開発した方を使いたかったが、解説サイトがあまりないので、Squidにした。
プロキシサーバ構築
Squid for Windows をダウンロード
Squid for Windows
http://squid.acmeconsulting.it/index.html の Squid Downloads → mirror 1 → 2.7STABLE8 の Standard をダウンロード
ダウンロードしたファイルを展開
squid-2.7.STABLE8-bin.zip を 解凍し、フォルダ squid を c:\ にコピーする。ここでは c:\ にしたが、任意の場所で構わない。
設定ファイルのファイル名を変更する
C:\squid\etc にある
- mime.conf.default → mime.conf
- squid.conf.default → squid.conf
- cachemgr.conf → cachemgr.conf
設定ファイルを編集
squid.conf をメモ帳などで開く
※#はコメント行
※検索では複数検索されるが、図の部分を検索
LAN環境のサブネットを登録
Ctrl + F で acl localnet を検索する。LAN環境のサブネットを「localnet」という定義名で登録する。
うちのLAN環境は 192.168.11.xx/24 なので
acl localnet src 192.168.0.0/16 → acl localnet src 192.168.11.0/24 に修正する。
多分その上の
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
は不要だけど残しておく。同じ定義名を複数記述すると、どれも登録されるということみたい。
→
Squidのポートを設定する
http_port を検索する。ここではデフォルトの3128のままにした。
このポートはブラウザのプロキシ設定で指定するポート番号になる。
ログファイルのローテーション周期を指定する
logfile_rotate を検索する。ここではデフォルトの10にするが、時間的なローテーション周期は不明。なお、コメントアウトされているので、# をとるだけ。
→
visible_hostname を検索する
unknown にすると、ホスト名が相手方に unknown と通知される。任意の名前でOK。
→
Squidに必要なフォルダを生成する
コマンドプロンプトを起動し
C:\squid\sbin>squid -z
必要なフォルダが生成される。
Squidをサービスに登録する
コマンドプロンプトを管理者モードで起動し
C:\squid\sbin>squid -i
サービスから削除するには
C:\squid\sbin>squid -r
Squidのサービスを開始する
コマンドプロンプトを管理者モードで起動し
net start squid
サービスを停止する場合は net stop squid
設定ファイルを修正した場合は、Squidを再起動する必要がある。
これでプロキシサーバーの Squid が起動した状態。
なお、Squidを稼働させているパソコンのIPアドレスは 192.168.11.8 。
別のパソコンからSquidを経由してネットにアクセス
IEにプロキシ接続を設定
下図のようにSquidを起動しているパソコンのIPアドレスとポートを指定する。「ローカルアドレスにはプロキシサーバを使用しない」にチェックすると、イントラネット上のWebサービスにアクセスする場合、プロキシを経由しない。
ローカルイントラネット上のWebサイトはプロキシの対象外。ちなみにこれは自作のWebアプリ。
インターネットにアクセス
プロキシサーバ(Squid)を起動しているパソコンのWindowsファイアーウォールでTCPポート3128受信を許可していないからである。
下図の手順でプロキシサーバ(Squid)を起動しているパソコンのWindowsのファイアーウォールでTCPポート3128受信を許可する
Webフィルタリングする
設定ファイル squid.conf でフィルタリングを設定する。
デフォルト定義
デフォルト定義だとプロキシ経由でインターネット接続できる。
- acl 定義名 定義種別 種別に応じた値
(定義種別)- src:IPアドレス
- port:ポート番号
- dstdomain:ドメイン
- url_regex:URL
- http_access allow 定義名:許可
- http_access deny 定義名:拒否
allowとdenyは記述順に優先される。
デフォルト定義 ※コメントは削除した
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.11.0/24 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access deny all
フィルタリングしてみる
クライアントPCのIPアドレスは 192.168.11.5.
http_access allow localnet → #http_access allow localnet コメントアウトする。
localnetは 192.168.11.0/24 なので、クライアントPCは定義名 localnet に含まれる。
http_access allow localnet をコメント化されるので、次の行の http_access deny all が適用される。定義名 all は acl all src all なので、すべてのIPが拒否されるということになる。
この状態でアクセスするとフィルタリングされてアクセスできない。
http_access allow localnet を有効化し、acl Safe_ports port 80 をコメントアウトするとアクセスできない。これは http_access deny !Safe_ports で safe_ports でないポートを拒否するようにしているため。「acl Safe_ports port 80 # http」をコメントアウトすると定義名 acl Safe_ports にはポート番号 80 は含まなれなくなるので、インターネットアクセスができなくなる感じ。
ドメイン指定でフィルタリングする
yahoo.co.jp と bing.com を拒否する
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.11.0/24 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
#bingとyahooを遮断
acl denyDomain dstdomain www.yahoo.co.jp .bing.com
http_access deny denyDomain
http_access allow localnet
http_access deny all
ちなみに http_access allow localnet を先に書くとLAN上のPCからのアクセスはすべて許可するので、bing.com と yahoo.co.jp は拒否されない。記述する順番に注意。
・・・・・・
http_access allow localnet
#bingとyahooを遮断
acl denyDomain dstdomain www.yahoo.co.jp .bing.com
http_access deny denyDomain
・・・・・・
URLフィルタ
http_access allow localnet
http_access deny all
よりも上に下記を追加。
#urlに yahoo があるのを遮断
acl denyRegx url_regex yahoo
http_access deny denyRegx
URLに yahoo が含まれる yahoo.co.jp も yahoo.com も拒否される。
bingで yahoo を検索 を検索してもフィルタリングされる。URLパラメータもフィルタ対象になるようだ。
http://www.bing.com/search?q=yahoo&qs=n&form=QBLH&pq=yahoo&sc=0-4&sp=-1&sk=&cvid=e8a0827c496b42a9ac45930deafe4ff0
ただし、Googleだとフィルタされない。Googleで Yahoo を検索。Yahooは検索できるが、検索結果をクリックすると、遮断された。
https://www.google.co.jp/?gws_rd=ssl#q=yahoo
Squidのログ
1411054269.454 236673 192.168.11.5 TCP_MISS/200 425280 CONNECT www.google.co.jp:443 - DIRECT/74.125.235.111 -
1411054269.454 151626 192.168.11.5 TCP_MISS/200 14090 CONNECT encrypted-tbn1.gstatic.com:443 - DIRECT/173.194.38.68 -
1411054269.454 151594 192.168.11.5 TCP_MISS/200 9344 CONNECT encrypted-tbn2.gstatic.com:443 - DIRECT/173.194.38.70 -
1411054269.454 151391 192.168.11.5 TCP_MISS/200 8903 CONNECT encrypted-tbn0.gstatic.com:443 - DIRECT/173.194.38.65 -
1411054269.454 151391 192.168.11.5 TCP_MISS/200 8536 CONNECT encrypted-tbn3.gstatic.com:443 - DIRECT/173.194.38.71 -
1411054395.782 0 192.168.11.5 TCP_DENIED/403 1391 GET http://www.google.co.jp/url? - NONE/- text/html
Google で Yahoo を検索した時のIEの開発者ルールキャプチャ
許可リストにあるもののみ許可する
bing.com yahoo.co.jp cman.jp だけ通し、それ以外は遮断。http_access allow localnetをコメントアウトする。
acl whiteList dstdomain .bing.com .yahoo.co.jp .cman.jp
http_access allow whiteList
#http_access allow localnet
cman.jpに接続しているが、cman.jpでないドメインの広告が除外されている。
SSL接続を遮断してみる
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
#http_access deny CONNECT !SSL_ports
http_access deny CONNECT SSL_ports
#urlにyahooがあるのを遮断
acl denyRegx url_regex yahoo
http_access deny denyRegx
http_access allow localnet
とりあえず、プロキシを稼働させてみた。運用するわけでないので、さらなる追及はまた今度。
わかりやすく、読みやすい文章でした
返信削除comepanさん、コメントありがとうございます。
削除あらためて読み直したところ、誤った日本語、誤字脱字がたくさんあり、お恥ずかしい限りです。
間違った内容などありましたらご指摘いただけると幸いです。