Twitterに投稿 はてなブックマークに追加 Yahoo!ブックマークに追加 Google Bookmarksに追加

目次 >> プロキシーサーバ

プロキシサーバの設定

ここでは、Squidを使用したプロキシサーバの構築方法を示す。

Squidのインストール

ここでは、コマンドラインからのインストール方法について解説する。GUI環境があるのであればそちらの方が簡単にできる。

Ubuntu では、apt-getで行う。

$ sudo apt-get install squid
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  squid-common squid-langpack
Suggested packages:
  squidclient squid-cgi logcheck-database resolvconf winbind
The following NEW packages will be installed:
  squid squid-common squid-langpack
0 upgraded, 3 newly installed, 0 to remove and 6 not upgraded.
Need to get 1238 kB of archives.
After this operation, 8786 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://us.archive.ubuntu.com/ubuntu/ natty/main squid-langpack all 20110214-1 [235 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ natty/main squid-common all 2.7.STABLE9-2.1ubuntu6 [267 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ natty/main squid amd64 2.7.STABLE9-2.1ubuntu6 [736 kB]
Fetched 1238 kB in 1min 9s (17.8 kB/s)                                         
Preconfiguring packages ...
Selecting previously deselected package squid-langpack.
(Reading database ... 135978 files and directories currently installed.)
Unpacking squid-langpack (from .../squid-langpack_20110214-1_all.deb) ...
Selecting previously deselected package squid-common.
Unpacking squid-common (from .../squid-common_2.7.STABLE9-2.1ubuntu6_all.deb) ...
Selecting previously deselected package squid.
Unpacking squid (from .../squid_2.7.STABLE9-2.1ubuntu6_amd64.deb) ...
Processing triggers for ureadahead ...
ureadahead will be reprofiled on next reboot
Processing triggers for ufw ...
Processing triggers for man-db ...
Setting up squid-langpack (20110214-1) ...
Setting up squid-common (2.7.STABLE9-2.1ubuntu6) ...
Setting up squid (2.7.STABLE9-2.1ubuntu6) ...
Creating squid spool directory structure
2011/05/22 17:44:11| Creating Swap Directories
squid start/running, process 7389

Fedora10では、yumで行う。squidのバージョンは3.0。

# yum install squid
Loaded plugins: refresh-packagekit
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package squid.x86_64 7:3.0.STABLE10-1.fc10 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
squid x86_64 7:3.0.STABLE10-1.fc10 fedora 1.6 M

Transaction Summary
================================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 1.6 M
Is this ok [y/N]: y
Downloading Packages:
squid-3.0.STABLE10-1.fc10.x86_64.rpm | 1.6 MB 00:01
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : squid 1/1

Installed:
squid.x86_64 7:3.0.STABLE10-1.fc10

Complete!

起動するにするには

# /etc/init.d/squid start
init_cache_dir /var/spool/squid... Starting squid: . [ OK ]

である。もっとも初期設定では、LANの他のコンピュータからは使えない。

Squidの設定

主要な設定はFC4、FC5、FC6、Fedora10、openSUSE10.0、Ubuntu 11.04とも

/etc/squid/squid.conf

で行う。

使用するポートの設定

使用するポートの設定は下記のように行う。

http_port 3128

デフォルトでは3128ポートが使われているが、セキュリティを向上させるためにも、別の番号にすることをお勧めする。8080のような、Proxyサーバによく利用されるポート番号も避けるべきである。

アクセス制御

初期状態では、ローカルホストすなわち、squidを立ち上げているマシンからしかアクセスできないので、LAN内のパソコンからアクセスできるようにする。まず、LANのIPの範囲をlocalnetという名前でアクセスコントロール記述する。
acl localnet src 192.168.11.0/255.255.255.0
を追加。
http_access allow manager localhost
の下あたりに、
http_access allow localnet
を追加する。

アクセス元のIPを表示しない

アクセス元のIPを表示すると、ファイアウォール内のネットワークの情報が多少なりともわかってしまい、セキュリティ上の問題で隠したい場合も多い。そのような場合は、forwarded_for on

forwarded_for off

にするとアクセス元のIPを隠すことが出来る。(HTTP_X_FORWARDED_FORヘッダがunknownになる。)

Proxyの存在を知らせない

Proxy経由であることを完全に消したい場合は、下記の記述を追加してヘッダから、各種情報を削除する。「アクセス元のIPを表示しない」に加えて下記の設定を行うことにより、外部からはProxyを経由していることがわからなくなる。Proxy経由のアクセスを制限しているサイトにつなぎたい場合などの有効であるが、誰かに不正に利用されても、あたかもこのサーバから発信しているように見えるため、本当に必要な場合以外はあまりお薦めしない。

Squidのバージョンが2系列の場合

header_access X-Forwarded-For deny all
header_access Via deny all
header_access Cache-Control deny all

header_access X-Forwarded-For deny allは、FORWARDED_FORの出力を抑制し、 header_access Via deny allはプロキシのバージョン情報などを抑制し、 header_access Cache-Control deny allは、キャッシュ制御情報の出力を抑制する。

Squidのバージョンが3系列の場合

request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all
reply_header_access X-Forwarded-For deny all
reply_header_access Via deny all
reply_header_access Cache-Control deny all

賞味期限を延ばす

有効期限が設定されていないファイルなどでも、squidにキャッシュしたファイルの寿命を制御して、延ばすことができる。特に画像のように頻繁に変更されないファイルは、この設定を行うことにより、キャッシュを有効に利用してアクセススピードを向上させることが出来る。

refresh_pattern -i \.(gif|png|jpe?g|tif?f|bmp)$ 1440 25% 10080
refresh_pattern -i \.(mpe?g|avi|ra?m|wmv|mov)$ 1440 25% 10080
refresh_pattern -i \.(wav|mp3|mid)$ 1440 25% 10080
refresh_pattern -i \.(class|swf|pdf)$ 1440 25% 10080
refresh_pattern -i \.(js|css)$ 1440 25% 10080
refresh_pattern . 45 20% 4320

squid.confに追加する。記述の意味はこのサイトにある。
なお、正規表現はリストの順に適用されるので、すべてを表す「.」の行の前に各ファイルを記述した行を置くこと。

キャッシュに保存する最大ファイルサイズを変更する

squidは、ある一定のサイズ以上のファイルは、キャッシュに保存しない。その設定はmaximum_object_sizeとmaximum_object_size_in_memoryで決まる。デフォルトでは4MB以上のファイルはディスクには保存されない。また、8KB以上(ver 3.1からは512KB以上)のファイルはメモリには保持されない。ディスクが十分大きい場合は、maximum_object_size値を、メモリが十分ある場合はmaximum_object_size_in_memory変更するとパフォーマンスを上げることができる。

maximum_object_size 4096 KB
maximum_object_size_in_memory 8 KB

キャッシュの使用するディスク領域を変更するには、

cache_dir ufs /var/spool/squid 100 16 256

のように記述する。デフォルトではこの項目は無く、ディスクは使われず、メモリ内にキャッシュされるだけである。ここでは100MBまでHDDを使用する。そのとなりの、16、256はディレクトリの分割数を指定しているが、通常はデフォルトの16、256でOK。

また、メモリに保持されるキャッシュの容量はcache_memで調整できる。標準では8MB(ver 3.1からは256MB)であるが、メモリが十分ある場合、増やすとパフォーマンスが上がる。

cache_mem 8 MB

起動・停止・再起動

起動、停止、再起動の方法

起動は下記のように行う

# /etc/init.d/squid start
Starting WWW-proxy squid (/var/cache/squid) done

起動できないときはとりあえず下記のように打ってみる。

# squid -k parse

もし設定に問題がなければ何も表示されないはずである。

例えば、

# squid -k parse
FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname'

Squid Cache (Version 2.5.STABLE10): Terminated abnormally.
CPU Usage: 0.028 seconds = 0.016 user + 0.012 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 1
Aborted

このようなメッセージが表示された場合、hostnameがきちんと設定されていないために、起動できないという意味である。その場合は、

# hostname foo.example.com

のようにして設定してやると、ほかに問題がなければ動くはずである。

パソコン起動時の自動起動の設定

サーバ起動時に自動起動するようにするには、

# chkconfig squid on

念のため確認

# chkconfig squid --list
squid 0:off 1:off 2:off 3:on 4:off 5:on 6:off

起動しない場合は

もし、

FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname'

というエラーが出て起動しない場合は、visible_hostnameを自分のホスト名を使い設定する。

visible_hostname example.com

認証

openSUSE 10.0の場合、認証機構は標準ではインストールされていないので、まずはインストールする必要がある。

本家http://www.squid-cache.org/へ行って、ソースをとってきて解凍する。解凍してできた

$cd /tmp/squid-2.5.STABLE12

のようなディレクトリに移り、

$./configure
$make

と打つ。ここで、すでにyastでインストールされている場合は、make installはしない。カレントディレクトリを

$cd /tmp/squid-2.5.STABLE12/helpers/basic_auth/NCSA

に移り、ここで

#make install

すると

/usr/local/squid/libexec

あたりにncsa_authがインストールされる。

次にhtpasswd2もしくはhtpasswd2を使ってパスワードを生成する。openSUSE 10.0の場合は

$htpasswd2 -c /usr/local/squid/etc/passwd dsato
$New password:
$Re-type new password:
$Adding password for user dsato

そしてsquid.confの中の

auth_param basic program /usr/local/squid/libexec/ncsa_auth /usr/local/squid/etc/passwd
acl password proxy_auth REQUIRED
http_access allow password

を有効にする。(無ければ記述)

なおここで、

http_access allow password

http_access allow localnet password

と書けば、IPによる制限およびパスワードによる制限の両方を有効にできる。

#/etc/init.d/squid restart

で再起動する。

Internet Explorerにおけるプロキシの自動設定

まず、自分のドメインがexample.comの場合、DNSサーバの設定を変更してwpad.example.comというドメインを作成する。

次に、http://wpad.example.com/wpad.datでアクセス可能な場所にwpad.datというテキストファイルを作成する。

内容は、

function FindProxyForURL(url,host)
{ if(isPlainHostName(host)||
     isInNet(host,"192.168.1.0","255.255.0.0")) return "DIRECT"; 
  else return "PROXY 192.168.1.123:3128";
}

つまり

function FindProxyForURL(url,host)
{ if(isPlainHostName(host)||
     isInNet(host,"ネットワークの範囲","ネットワークの範囲(サブネット)")) return "DIRECT"; 
  else return "PROXY プロキシサーバのアドレス:ポート番号";
}

の様な書式で書く

リバースプロキシ

リバースプロキシは、通常のプロキシとは違って、サーバ側のパフォーマンスを改善するために行われる。

WindowsでSquid

WindowsでSquidを作動させる方法を示す。
まず、http://www.acmeconsulting.it/SquidNT/から、コンパイル済みSquid 2.6 for Windowsをダウンロードしてくる。
そして、c:\に展開する。(Windows版SquidのデフォルトディレクトリはCドライブのルートになっているので、今回はこれで設定してみる。起動時に-fオプションを使ってsquid.confの場所を指定してやれば、別のフォルダにインストールすることもできる。)

まず、C:\squid\etcフォルダ内にある、3つのファイルを

squid.conf.default ==> squid.conf
mime.conf.default ==> mime.conf
cachemgr.conf.default ==> cachemgr.conf

のように変更する。そして、visible_hostnameという項目を探して適当に設定する。

visible_hostname tech.ckme.co.jp

の様に設定するのが適切だが、

visible_hostname hoge

の様に設定しても問題ない。いずれにしても、この項目を設定しないと起動することができない。

次に、次のような場所を見つけて、下記のように最後にhttp_access allow localhostを追加する。

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

# Example rule allowing access from your local networks. Adapt
# to list your (internal) IP networks from where browsing should
# be allowed
#acl our_networks src 192.168.1.0/24 192.168.2.0/24
#http_access allow our_networks
http_access allow localhost

もし、自分のネットワーク内からのアクセスも許可するのであれば、

acl our_networks src 192.168.1.0/24 192.168.2.0/24
http_access allow our_networks

の行のコメントを外して、IPアドレスの部分は自分のネットワークに適したものに変える。なお、ネットワーク内のほかのパソコンからもSquidを利用できるようにするには、ファイアウォールの設定で、例外でポートを追加しておく必要がある。

次に、コマンドプロンプトから、C:\squid\sbinフォルダに移動し、

C:\squid\sbin>squid.exe -z

と打ち込む。すると、C:\squid\var\cache以下にキャッシュフォルダが作成される。
そして、

C:\squid\sbin>squid.exe

と打つと、Squidが起動するはずである。これで、ウェブブラウザのプロキシの設定を変更して、アクセスしてみてアクセスできれば成功である。

Windowsのサービスとしてインストールするには、

C:\squid\sbin>squid.exe -i

と打つ。あとは、コントロールパネル内の管理ツールの中にあるサービスを起動して、Squidという項目を見つけて、開始すればよい。デフォルトではWindows起動時に自動的に起動するようになっている。

サービスを解除するには、

C:\squid\sbin>squid.exe -r

と打てばよい。アンインストールするには、C\squidフォルダを丸ごと消せばよい。

関連項目

リンク

最終更新日


本文中のFC4はFedora ProjectのFedora Core 4を、FC5はFedora Core 5を、FC6はFedora Core 6をopenSUSEはNovellのSUSE Linux OSSを表します。Fedora7以降は、単にFedora7、Fedora8、Fedora9、Fedora10、Fedora11、Fedora12、Fedora13、Fedora14、Fedora15と表示しています。Ubuntuは、必要に応じて17.04、18.04のようにバージョン番号をつけて区別しています。

ここに登場するドメイン名やIPアドレスなどはフィクションです。実在の人物・団体等とは一切関係がありません。
実際に使用する際は、各自の環境に合わせて書き換えてください。
もし何か間違いなどありましたらこちらからご連絡ください
リンクに許可は不要です。
Copyright (C) 2014 Chikuma Engineering Co., Ltd. All Rights Reserved.