目次 >> プロキシーサーバ
ここでは、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の他のコンピュータからは使えない。
主要な設定はFC4、FC5、FC6、Fedora10、openSUSE10.0、Ubuntu 11.04とも
/etc/squid/squid.conf
で行う。
使用するポートの設定は下記のように行う。
http_port 3128
デフォルトでは3128ポートが使われているが、セキュリティを向上させるためにも、別の番号にすることをお勧めする。8080のような、Proxyサーバによく利用されるポート番号も避けるべきである。
acl localnet src 192.168.11.0/255.255.255.0を追加。
http_access allow manager localhostの下あたりに、
http_access allow localnetを追加する。
アクセス元のIPを表示すると、ファイアウォール内のネットワークの情報が多少なりともわかってしまい、セキュリティ上の問題で隠したい場合も多い。そのような場合は、forwarded_for onを
forwarded_for off
にするとアクセス元のIPを隠すことが出来る。(HTTP_X_FORWARDED_FORヘッダがunknownになる。)
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
で再起動する。
まず、自分のドメインが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を作動させる方法を示す。
まず、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フォルダを丸ごと消せばよい。
最終更新日