squid + http 透過プロキシ

squid-2.4.STABLE7 と 2.5.STABLE3 をインストールしたときの備忘録です.

展開とコンフィグとインストール

基本的には 2.4 も 2.5 もコンフィグファイル以外には大きな変更はありません.コマンドの例は 2.5 としていますが 2.4 でもほぼ同じでしょう. ./configure --help とかして適当にオプションを考えます.ここでは,透過プロキシをしたいので --enable-linux-netfilter を有効にします. また,FQDN にアンダースコアを含むとき,squid が reject しないように,--enable-undersores を有効にします.この設定は RFC 違反で本当は適切ではありませんが, infoseek などではいまだにサブドメインにアンダースコアを含むものがまれにありますので致し方ないでしょう.

 
# wget http://www.squid-cache.org/Versions/v2/2.5/squid-2.5.STABLE3.tar.bz2
# tar xvjf squid-2.5.STABLE3.tar.bz2
# cd squid-2.5.STABLE3
# ./configure --prefix=/usr/local/squid-2.5 \
--enable-linux-netfilter \
--enable-err-language=Japanese \
--enable-underscores
# make 
# make install

設定

必要なところのみ適当に変更します.

squid.conf
ポートの決定
http_port 3128
キャッシュに使うメモリー(squid 全体が使うメモリはこれの2,3倍になります)
cache_mem 128 MB
maximum_object_size 16 MB
cache_dir ufs /home/squid 200 32 512
cache_access_log /var/log/squid/access.log
cache_store_log /var/log/squid/store.log
pid_filename /var/run/squid.pid
2.4系 のデフォルトでは,1 MB ですが,0 MB(無制限)とします
2.5系 のデフォルトでは,0 MB (無制限)です
こうしないと http アップローダで1 MB 以上のアップローができません
request_body_max_size 0 MB
アクセスを許すものを決めます
acl localnet src ***.***.***.0/255.255.255.0
http_access allow manager localnet
http_access allow localnet
cache_mgr squid.m9841.info
squid を走らせる GID と UID を決めます
cache_effective_user squid
cache_effective_group squid
透過プロキシの設定
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
プロキシであることを隠微します
無駄にプロキシを弾く所を防ぎます
forwarded_for off
anonymize_headers deny Via
anonymize_headers deny X-Forwarded-For
2.4 の場合は以下のようにします
forwarded_for off
header_access Via deny all
header_access X-Forwarded-For deny all

起動スクリプト

Vine の srpm をインストールしてそれを参考に作ります.
squid-init

自動起動

chkconfig コマンドで squid が起動時に自動で起動するようにしておきます.

 
# cp squid-init /etc/init.d/squid
# chmod 755 /etc/init.d/squid
# chkconfig --add squid
# chkconfig --level 2345 squid on
もしキャッシュディレクトリを作っていないのなら,
# /usr/local/squid-2.5/sbin/squid -z
とします.

Netfilter の設定

ポート 80 への要求を横取りして Squid に渡すようにします.

 
ここで,IN_IF は LAN の NIC,LOCAL_NET は LAN 側の IP です
# iptables -t nat PREROUTING -i IN_IF -p tcp -s LOCAL_NET--dport 80 -j REDIRECT --to-port 3128

ログのローテイト

Squid のログを大きくなりすぎないように logrotated にログの管理を任します.詳しい使い方は説明しませんが, こんなファイルを /etc/logrotate.d/ に置いておくと,Vine Linux の場合,毎週日曜日午前4時にログを分割して新しいものにしてくれます.