CentOS 5.4 を使ったプロキシサーバ (Squid) 構築

こちらの内容は古いです。
最新のSquid構築の手順は以下のサイトで公開しています。

最近はやっている”Gumblarウイルス”に対応するためにプロキシサーバをたてて
ファイアウォール代わりにつかうのが最終目標…ということにして、早速 CentOS 5.4 を使って構築してみました。
(なお、以下の手順は現在テスト中であり、誤りがある場合があります。お気づきの点がございましたら、もしよろしければコメントを残してください)
[10/1/2 追記]
ブラックリストはこちらに別記しました。

[現状報告]
10/1/2 1:00 squid.conf 設定更新

=事前準備=
(0-1) CentOS 5.xをインストールし、あらかじめ yum update しておく。
(0-2) squid サーバを動かすサーバにホスト名を設定
(例) centos.example.com
(0-3) “ifconfig”で IPなど確認しておく

=設定開始=
(1) squid をインストールする
# yum -y install squid
(2) インストール後、起動させるための設定を実行
# vi /etc/squid/squid.conf
(3) “acl CONNECT method CONNECT”を探して、その付近にローカルネットワークの設定を追記
acl CONNECT method CONNECT
acl lan src 192.168.1.0/24 ← 追加(192.168.1.0/255.255.255.0からのプロキシサーバーへのアクセスを許可(1/2))
http_access allow localhost
http_access allow lan ← 追加(192.168.1.0/255.255.255.0からのプロキシサーバーへのアクセスを許可(2/2))

以下は同一の意味を持つ設定。好きな方で設定すれば可。
192.168.1.0/24 = 192.168.1.0/255.255.255.0

(4) “forwarded_for on” を探して、オフ設定を追記
# forwarded_for on
forwarded_for off ← 追加(プロキシサーバーを使用している端末のローカルIPアドレスを隠蔽化)
(5) “TAG: visible_hostname”を探して、サーバのホスト名を設定
#  TAG: visible_hostname
(中略)
#Default:
# none
visible_hostname centos.example.com ← 追加(外部公開していない環境では、サーバのホスト名に合っていれば何でも良い。)
(6) “TAG: header_access” を探して、
以下を追加 (プロキシ経由でアクセスしていることをアクセス先に知られないようにする)
header_access X-Forwarded-For deny all
header_access Via deny all
header_access Cache-Control deny all
(7) “http_port”を覚えやすい8080に変更する
# Squid normally listens to port 3128
http_port 8080
(8) squid を起動
# /etc/rc.d/init.d/squid start
(9) ブラウザでプロキシを使って接続するように設定
(すべての接続に対してプロキシサーバ経由に設定すれば良い)
xxx プロキシ: squid サーバのIPアドレス
ポート: 8080

[接続できなかったら]
サーバのファイアウォールを確認する
オフで接続できるようであれば、
その他のポート:TCP/8080 を追加する
[オフでも接続できない場合]
squid を再起動してもう一度確認
# /etc/rc.d/init.d/squid restart
接続不可の場合は squid.conf の設定(3) を見直す

(10) 自動起動設定
# chkconfig squid on
ランレベルは特に設定する必要はない模様

(11) IPやドメインを規制
[10/1/2 更新] ※正しくない部分は削除しました。
以下のように
acl denywords url_regex 123.456.789.012
と指定して “http://123.456.789.012/*” にアクセスした場合、このURLへのアクセスを遮断できますが、
123.456.789.012 が http://badurl.example.com/ というドメインを持っていた場合、
http://badurl.example.com/ にアクセスすると 123.456.789.012 のIPを持つサーバにアクセスできてしまいます。
ってことで、
url_regexでIPを遮断すべきでないことがわかりました。

次のように使い分けます。
dst : デスティネーション(サーバ)のIPアドレス
規制したいIPアドレスを列挙する。192.168.x.y や 192.168.x.0/24 のように列挙可能。
dstdoamin : デスティネーション(サーバ)のドメイン名

規制したいドメイン名を列挙する。フルパスや一部 (ex: .badurl.example.com)のように列挙可能。
url_regex : URLの正規表現によるパターンマッチング
文字列を列挙することで、URLや検索クエリなどを規制できる。
その他はこちら(アクセス不可のため、Googleキャッシュ)をご覧ください。

従って
(誤)
acl denywords url_regex 123.456.789.012 badurl2.example.com sexy
http_access deny denywords
と設定するのではなく、
(正)
acl denywords url_regex sexy
acl denydomain dstdomain badurl2.example.com
acl denyip dst 123.456.789.012
http_access deny denywords
http_access deny denydomain
http_access deny denyip
と設定する。

※この設定により、
・”sexy” を検索エンジンで検索すると遮断できます。
・”sexy” がURLに含まれるコンテンツへのアクセスを遮断できます。
“badurl2.example.com” へのアクセスを遮断できます。
サーバ “123.456.789.012” へのアクセスを遮断できます。

(12) 設定を反映
# /etc/rc.d/init.d/squid reload

■確認■
“ping yahoo.co.jp”で yahooのIPを確認して、そのIPとURL (http://www.yahoo.co.jp/)
を規制するように設定(11)し、ブラウザでアクセスしてみましょう。設定後はreloadすること。

(13) 以下を参照して、対象IPを拒否する
http://www.lac.co.jp/info/alert/alert20091225.html
設定後はreloadすること。

[12/31 追記]
(14) 使用するキャッシュの設定
Squidのもう一つの機能、「キャッシュ機能」を有効化するための設定を行います。
数値はあとで修正するとして基本的にいじらない方向で。

# cache_dir ufs /var/spool/squid 100 16 256

cache_dir ufs /var/spool/squid 100 16 256
数値は左から
キャッシュで使用する容量(MB)
ディレクトリを分割するサブディレクトリの数
サブディレクトリを分割する数
となる。
設定後はreloadすること。

カテゴリー: サーバ構築 パーマリンク

コメントを残す