squid3プロキシサーバの設定(Ubuntu13.10)

Ubuntu13.10でsquid3パッケージが提供されており、パッケージ名からコマンドまですべてsquid3になっています。
(たしかそれなりに前からこうであったはず。)


Ubuntuのネットワーク設定とプロキシ設定

インストールは以下のコマンドを打つだけです。
sudo apt-get install squid3 -y

インストール後、プロキシ設定を行っていきます。

設定ファイルの書き換え

私の場合、主に以下の設定を変更しています。
設定ファイルを書き換える際、すべて読むには長すぎるため、検索を使うべきです。
設定ファイル中の設定名で検索をかけて、行を追記または書き換えています。

テキストエディタとしてvimが使えない場合、デスクトップ環境ではgeditが使用できます。
sudo gedit /etc/squid3/squid3.conf


プロキシのポート番号を変える

デフォルト設定:
http_port 3128
変更例:
http_port 58080

ポート番号の変更は、攻撃に対する対応として、念のためにデフォルトから変更しておきます。実際にはたいした効果はないと思いますが。
一応、ポート番号は50000番代から先が自由に使用可能となっているので、50000番以降のポート番号に変更しています。

メモリ上のキャッシュ総量を増やす

デフォルト設定
# cache_mem 256 MB
変更例
cache_mem 2048 MB
 キャッシュがメモリ上にあったほうが、高速にウェブを閲覧することができます。
単純な方法として、メモリキャッシュのサイズを増やします。
私はいつも、以下の行を追記して設定を変更しています。

メモリにキャッシュするファイルのサイズ上限を増やす

デフォルト設定
# maximum_object_size_in_memory 512 KB
変更例
maximum_object_size_in_memory 2048 KB
 大きなファイルをメモリキャッシュしてメモリをすぐに使い果たすことを防ぐために、メモリキャッシュするファイルにはサイズ上限が設定されています。
画像ファイルなどがメモリキャッシュされるように、サイズを増やしておきます。

キャッシュディレクトリのパスとキャッシュサイズを変更する

デフォルト設定
#cache_dir ufs /var/spool/squid3 100 16 256
変更例
cache_dir ufs /raid0_array/squid_cache 40960 16 256

キャッシュディレクトリにはいくつかの設定項目がありますが、主に変更するのは、パスとキャッシュサイズです。

パスはデフォルト設定のままでも構いません。
ただし、SSDを使用していて、頻繁に読み書きされそうなプロキシキャッシュを置きたくない場合や、キャッシュファイルを置く空き容量の余裕がない場合には、パスの変更が効果的です。
私の環境ではRAID0アレイを構築してあります。キャッシュを置く領域は広くて早いほうが良いので、RAID0アレイ上のディレクトリをキャッシュに使用するようにパスを変更しています。

キャッシュサイズはMB単位で、デフォルトでは100MBしか用意されていません。
ディスクの空き容量を見ながら、できるだけ大きなキャッシュサイズを指定します。

キャッシュ対象にするファイルの最大サイズを増やす

デフォルト設定
# maximum_object_size 4 MB

変更例


maximum_object_size 64 MB

大きなファイルほど、キャッシュがヒットした時に大きな効果を得ることができます。
一方で、HDD領域の使用量も増えることになります。

大きなzipファイルやインストーラなどは通常、一回きりしかダウンロードしないため、キャッシュするのは無駄になります。
一度しかダウンロードしないであろうファイルタイプについては、キャッシュルールの変更で対応します。

キャッシュルールの変更


 デフォルト設定
#refresh_pattern (\.deb|\.udeb)$   129600 100% 129600
変更例
refresh_pattern (\.deb|\.udeb)$   129600 100% 129600

Ubuntuのsquid設定ファイルには、キャッシュルールのサンプルとして、debパッケージのキャッシュルールが記述されているため、コメントアウト(#)を外してキャッシュルールを有効化しておきます。
私の場合、仮想マシンゲストを運用することが多いため、.debパッケージファイルをキャッシュすることには十分に意味があります。通常の環境では、debパッケージを使用するのは一回きりになるので意味はありません。
また、APTパッケージマネージャが独自にキャッシュを持っているので、再インストールが多い場合にもsquid側でキャッシュする意味はありません。

設定の反映

squidデーモンの一時停止

 次のキャッシュディレクトリを作成コマンドは、squidが停止している時しか実行できないようになっています。
sudo service squid3 stop

設定ファイルをチェックする

変更した設定ファイルをsquidが読み込めるかどうか、設定ファイルの記述ミスをチェックすることができます。
squid3 -k parse
squid3になってから出力が増えましたが、基本的にはERROR行が出ていなければOKです。
 

キャッシュディレクトリの作成

キャッシュディレクトリのパスをデフォルト設定から変更した場合、キャッシュディレクトリを新たに作成する必要があります。
事前にmkdirなどで、ディレクトリを作成しておきます。
(設定ファイルに指定したパスまでは、ユーザがあらかじめ用意しておく必要があります。)
sudo mkdir -p /myraid0_array/squid_cache
キャッシュディレクトリをsquidに作成させます。
sudo squid3 -z
キャッシュディレクトリ(16x256個のネストしたディレクトリ構造と適切なパーミッション)を、squidが自動生成します。

Ubuntu13.10でプロンプトが帰ってこないように見えますが、コマンドは成功終了しています。(エンターキー押下などで確認できます)

Ubuntuのプロキシ設定

Ubuntuにプロキシ設定します。
「システム設定」から「ネットワーク」の「ネットワークプロキシ」を選択します。
「メソッド(M)」を「なし」から「手動」に切り替えます。
プロキシのURL(orアドレス)とポート番号の入力画面が出るので、URLに"localhost"、 ポート番号にはsquid設定ファイルの http_port で指定したポート番号を入力します。
最後に「システム全体に適用」するをクリックすれば、プロキシ設定がUbuntu上に反映されます。
(ただしAPTパッケージマネージャとGitクライアントには個別にプロキシ設定をする必要がある場合があります。)

Ubuntuのプロキシ設定

プロキシ設定の反映を確かめたければ、squidを立ち上げていない状態で、FireFoxなどでウェブブラウズできないことを確認すれば良いと思います。

squidデーモンの再起動

squidデーモンを起動します。
sudo service squid3 start

ウェブブラウズできるようになっていれば、設定成功です。



追加設定

広告ブロックの追加





設定ファイルの1060行あたり、 "http_access deny all"と書いてある箇所が、アクセス制御ルールの記述箇所です。

追加のルールは、以下の、コメントアウトされていない有効な deny all ルールより前に書きます。
# And finally deny all other access to this proxy
http_access deny all


以下はサンプルです。
(2013年現在で以下のブロックルールは(niconicoの広告URLが変わったためか)有効ではないので、あくまで記述例です。)

#(他の設定で接続が通ってしまうかもしれないのでブロックの記述は"http_access deny all"よりできるだけ上に書く)
#ニコニコ時報ブロック(2011.05.12変更)#from http://blog.nezweb.net/archives/118acl nicojihou url_regex -i ^http://.*nicovideo\.jp/.+marquee.*
acl nicojihou url_regex -i ^http://.*nicovideo\.jp/.+rotation.*
acl nicojihou url_regex -i ^http://.*nimg\.jp/.+marquee.*
acl nicojihou url_regex -i ^http://ad\.nicovideo\.jp/server/get\?.*
acl nicojihou url_regex -i ^http://api\.nicodic\.jp/.+
#ニコニコ時報ブロック
http_access deny nicojihou


#ニコニコ広告ブロック
#コメント部の広告が消えるらしい #http://ad.nicovideo.jp/
acl nicoad url_regex -i ^http://ad.nicovideo.jp/.*
#広告が(右上ごと)消えるはず #http://ads.nicovideo.jp/
acl nicoad url_regex -i ^http://ads.nicovideo.jp/.*
#画面の下のほうの画像を消します。
acl nicoad url_regex -i ^http://res.nimg.jp/img/base/foot/.*
#一部広告を消します。あまり効果はありません。
acl nicoad url_regex -i ^http://res.nimg.jp/img/ads/.*

http_access deny nicoad


ファイルキャッシュルールの変更

設定ファイルの4080行あたり、"refresh_pattern"と書いてある箇所がファイルキャッシュルールの記述箇所です。
(「^ftp」で検索すると一発でヒットします。)

設定の変更は、設定ファイル中の以下の記述、
#Suggested default:
refresh_pattern ^ftp:        1440    20%    10080

の下に追記することで行います。

以下はサンプルです。(適切に改行を消して使用してください。)


#画像ファイルと動画ファイルの保存時間を延長(仮)
#43200=30daysrefresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 10080 90% 43200  ignore-no-cache  ignore-private
refresh_pattern -i \.(iso|avi|wav|mp3|mp4|mpeg|swf|flv|x-flv)$ 43200 99% 432000  ignore-no-cache  ignore-private


#圧縮ファイルのキャッシュルール(短めに設定)
refresh_pattern -i \.(zip|rar)$ 10 2% 10  ignore-no-cache  ignore-private

#ニコニコキャッシュ用
#サムネイルと動画をキャッシュする(サムネ:smile?i= , 動画:smile?v=)
#最低保存期間14日、最長90日
refresh_pattern -i \.(smilevideo|nicovideo)\.jp\/(smile|watch) 26160 99% 129600  ignore-no-cache ignore-no-store ignore-private



問題が発生した場合などのTIPS

APTについて

デスクトップ環境では、システムのプロキシ設定をしていればAPTパッケージマネージャもプロキシ経由の接続を使用します。
Squidを停止して"apt-get update"を実行し、「W: http://archive.canonical.com/dists/saucy/Release.gpg の取得に失敗しました  localhost:58080 へ接続できません:」などとエラーを返すのを見ることで確認することができます。
デスクトップのないサーバ環境などの場合、apt-getコマンドをProxy経由で使用する方法にしたがって設定を行います。

VirtualBoxについて

NAT接続しているVirtualBoxゲストは、ホストのプロキシ設定を無視して、プロキシを経由せずネットワークに接続します。
(VirtualBoxアプリケーション側にあるプロキシ設定(「ファイル→環境設定→プロキシー」)は、VirtualBoxが自身のアップデートを確認するためのネットワーク接続に使用するプロキシの設定なのだそうです。)
プロキシを経由させる方法はいろいろとあるのですが、ホスト側でSquidの設定を書き換える必要もあると思われるため、検証と説明はいずれ。


Gitについて

Gitはホストのプロキシ設定を無視して、プロキシを経由せずネットワークに接続します。
プロキシ経由でGitを使用する場合、問題が発生するため、httpを使うかネットワーク接続を操作するアプリケーションを導入するとのことですが、今のところGitが使えなくなってはいないので、こちらも後回しにしています。

問題発生時

問題:何か問題が発生しました
対策:squidの使用を停止しましょう
冗談はともかく。

問題:画像サイトで表示される画像が壊れている。リロードしても解決しない
対策:壊れたsquidキャッシュをクリアしましょう。
Squidを停止
sudo service squid3 stop
キャッシュディレクトリを削除(キャッシュディレクトリのパスは適宜読み替える)
sudo  rm -rf /var/spool/squid/*
キャッシュディレクトリを再構成
sudo squid3 -z
Squidを再起動

sudo service squid3 start

問題:ウェブブラウズができない。Squidが原因かどうか知りたい
対策:FireFoxでプロキシを通さずウェブブラウズしてみてください
ツールバーから「編集」→「設定」を選択。
「詳細」の「ネットワーク」タブにプロキシを設定するための項目がある。
「接続設定(E)」のダイアログにて、「プロキシを使用しない(Y)」に設定変更
これでFireFoxからプロキシを通さずにWebページが見られるようであれば、Squidが原因。

なお、Squidが異常動作をする原因としては、キャッシュディレクトリが設定上限サイズまたはディスクの空き容量を使い切った場合が考えられるので、上記のキャッシュクリアの手順を行うと解決する場合がある。

このブログの人気の投稿

Ubuntu13.04で使える動画編集ソフト一覧

ubuntu13.04で無線LANが繋がらない場合の対処