« squid(プロキシサーバ)の設定 - その2 | メイン | テープの規格 »

squid(プロキシサーバ)の設定 - その3

ログ関係、その他役立ちそうな機能をいくつか書こうと思います。

squidのaccess.logを見ていると先頭は日時のようだけど1970/01/01から始まるUNIX時間で書いている。
わかりにくいのでsquid.confの設定を少し変更しました。

# vi /usr/local/squid/etc/squid.conf
---
access_log /usr/local/squid/var/logs/access.log common
---

ログの場所は階層が深いのでシンボリックリンクでアクセスしやすくしましょう。

# mv /var/log/squid /var/log/squid.old

↑のsquidフォルダはrpmでインストールしてある場合存在するので削除か移動する。

# ln -s /usr/local/squid/var/logs /var/log/squid


●ログのローテーション

以下のコマンドを叩くとsquidの出す3つのログファイルが「元のファイル名.番号インクリメント」という名前に変わってくれる。

# squid -k rotate

あとはcronにこのコマンドを登録して週1や月1など好みで動かしてやればいい。
ログの削除もcronに登録することでローテーションの完成。
簡単にローテーションさせたいならこれでOKと思います。

もうひとつはlogrotateがせっかくあるのでこれを使う方法。
以下の変更はログ全般の設定なので慎重に考えた上で変更しましょう。

# vi /etc/logrotate.conf
---
monthly
rotate 3
---
私のマシンはテスト用なので混雑していません。なのでログは1ヶ月単位でローテーションさせても十分です。
3ヶ月分はログを見たいのでログを残す設定を3にしました。
もし圧縮してログを置いていく場合はcompress行のコメントをはずしましょう。

次はsquid用個別の設定です。
以下のファイルを記述しましょう。rpmでsquidをインストールしてあれば既に存在しているので変更すると楽に作ることが出来ます。

vi /etc/logrotate.d/squid
---
/usr/local/squid/var/logs/access.log {
monthly
rotate 3
###copytruncate
###compress
###notifempty
missingok
}
/usr/local/squid/var/logs/cache.log {
monthly
rotate 3
###copytruncate
###compress
###notifempty
missingok
}

/usr/local/squid/var/logs/store.log {
monthly
rotate 3
###copytruncate
###compress
###notifempty
missingok
postrotate
/usr/local/squid/sbin/squid -k rotate
endscript
}
---
missingokはローテーションに失敗しても気にせず処理を続行するという意味。
notifemptyはからのファイルはローテーションしないという意味。
copytruncateはログを切りつめるという意味。よくわかりませんが作業中のログは残らないようなのでコメントアウトしました。

これでcrondが起動していれば機能します。一応確認しておきましょう。
# ps aux|grep cron
---
root 2704 0.0 0.2 6400 916 ? Ss Dec15 0:00 crond
root 29875 0.0 0.2 5528 724 pts/3 S+ 14:44 0:00 grep cron
---
起動していれば上のように表示されると思います。


●直接アクセスさせたい

ローカル内のページや確実に最新のページが見たいページなどはプロキシを通っても直接アクセスしたい。
そのような時は squid.conf に always_direct の設定をしましょう。
例としてヤフーとローカルネットワークを直接アクセスするようにしてみました。

# vi /usr/local/squid/etc/squid.conf
---
acl yahoo dstdomain .yahoo.co.jp
acl my_network src 192.168.1.0/255.255.255.0
always_direct allow yahoo
always_direct allow my_network
---

●特定のサイトの閲覧を禁止したい

aclの設定をします。例えばgoogleとyahooのアクセスを禁止したい場合は以下のようにします。

# vi /usr/local/squid/etc/squid.conf
---
acl deny_domain dstdomain "/usr/local/squid/etc/deny_domain"
http_access deny deny_domain
---

# vi /usr/local/squid/etc/deny_domain
---
www.google.co.jp
www.yahoo.co.jp
---
しかしこの設定だとauctions.yahoo.co.jpには行けるなどお粗末な設定です。あくまで例としてなので。。。

●上位プロキシサーバの設定

# vi squid.conf
--
cache_peer 上位プロキシIPアドレス parent 上位プロキシポート番号 3130 no-query
never_direct allow all
---

3130 はICPポート番号です。私は使っていないのでデフォルトのまま記述しました。
never_directを設定しないと上位プロキシだけじゃなくて自分で見に行ってしまいます。

●cachemgrの設定

squidにはcachemgr.cgiというプログラムがついてきます。どうもWEBブラウザから統計情報が見えるようなのですがなかなかうまく起動させることが出来ませんでした。
わかり次第書きたいと思います。