Squid-NT(キャッシュサーバー)
20131016

動作環境
 Windows7
 Squind2.7
 →3.xはCOSSが使用出来ない為、使用しません。
概要
 内部及び外部ネットワークより使用可能な小規模キャッシュサーバをWindowsにて構築する。
 SSD(HDD)への負担を考え、全てRAMディスク上(m:\)で構成
 →WindowsでのRAMディスクの構成方法はぐーぐる先生にて。
 ストアタイプにはパフォーマンスを考慮し、COSS及びAUFSの複合構成を採用
 基本的にはLinux用と設定方法が同じである。

Windowsによるキャッシュサーバーによるメリット
 peerblockによるIPフィルタリング(Linuxであればiptables)
 Windows用アンチウイルスソフト等によるフィルタリング(ESET Smart Security)
 同ソフトによるペアレントコントロールの適用

デメリット
 動的コンテンツが多いこのご時勢にキャッシュの有用性は低い。
 SSD(HDD)へのアクセスが頻繁に行われる事によるハードウェア寿命の低下及び電気代の増加(OS問わず)
 →RAMディスクで対応
サーバー環境
 使用ディレクトリ : m:\squid\
 →RAMディスクにて構成

 サーバーアドレス : 192.168.0.5 and ry.tl
 →内部用及び外部用のアドレス

 使用ポート(TCP) : 3128 and 5050
 →複数指定可。内部ネットワーク用と外部ネットワーク用に分けています。

 内部ネットワークアドレス : 192.168.0.0/24

 キャッシュストア仕様
  メモリ : サイズ512MB 1MB以下のファイルを格納
  COSS : サイズ1024MB 1MB以下のファイルを格納
  AUFS : サイズ1024MB 1MB以上16MB以下のファイルを格納 8*16*16=32768ファイルまで
  →キャッシュに割り当てた容量の10%(この場合約20MB)をDB管理の為にメモリ消費される点に注意

 認証タイプ : ダイジェスト認証(外部ネットワークのみ適用)

 上記設定を全てRAMディスク上にて構成した場合の使用メモリ : 2.6GB前後
 →512MB(メモリキャッシュ)+1024MB(COSSキャッシュ)+1024MB(AUFSキャッシュ)+20MB(DB管理)+その他
◆まずは下記リンクよりダウンロードしてインストール
 http://squid.acmeconsulting.it/index.html
◆設定ファイルをテキストエディタで編集。
 m:\squid\etc\squid.conf

# 20131016

# 〜認証設定〜
# 認証タイプ及びプログラムパスの指定(この場合ダイジェスト認証を有効化)
 auth_param digest program m:/squid/libexec/digest_pw_auth.exe m:/squid/etc/digpass
# ダイジェスト認証のオプション項目
 auth_param digest children 20 startup=0 idle=1
 auth_param digest realm proxy-caching web server
 auth_param digest nonce_garbage_interval 5 minutes
 auth_param digest nonce_max_duration 30 minutes
 auth_param digest nonce_max_count 50

# 〜アクセス制御設定〜
# 認証にダイジェスト認証を使用する。
 acl password proxy_auth REQUIRED
# 全てのIPアドレスを「all」と定義
 acl all src all
# サーバー自身のIPアドレスの定義
 acl acl localhost src 127.0.0.1/32
 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
# 内部ネットワークの定義
 acl localnet src 192.168.0.0/24
# プロトコルやタイプ毎の定義
 acl manager proto cache_object
 acl CONNECT method CONNECT
 acl SSL_ports port 443
 acl Safe_ports port 80
 acl Safe_ports port 21
 acl Safe_ports port 443
 acl Safe_ports port 70
 acl Safe_ports port 210
 acl Safe_ports port 1025-65535
 acl Safe_ports port 280
 acl Safe_ports port 488
 acl Safe_ports port 591
 acl Safe_ports port 777
# 定義「Safe_ports」及び「SSL_ports」を拒否する。
 http_access deny !Safe_ports
 http_access deny CONNECT !SSL_ports
# サーバー自身及び、内部ネットワークを無条件で許可する。
 http_access allow localhost
 http_access allow localnet
# ここまでの設定で当てはまらない接続についてはダイジェスト認証を実施する。
# →つまり外部ネットワークからの接続
 http_access allow password
# 暗黙のdeny all(ルール全てに該当しない場合、拒否する)
 http_access deny all
# icp及びhtcp拒否
 icp_access deny all
 htcp_access deny all

# 〜サーバー動作設定〜
# 使用するポートを指定(複数可)
# →ルータで設定しておいて、3128を内部ネットワーク向けに使用し、
#  外部向けはproxyでは通常使わないようなポートを設定してセキュリティの向上を図る。
 http_port 3128
 http_port 5050

# キャッシュを使用したくないワードを指定
# →この場合、URLに「cgi-bin」があればキャッシュを使用せずアクセスします。
 hierarchy_stoplist cgi-bin ?

# メモリ内に保存するキャッシュの容量
# →Squid自体の消費メモリはここでの値を超える事に注意
 cache_mem 512 MB

# メモリ内に保存するファイルのキャッシュの最大サイズを指定
# →この値を超えるファイルはメモリに保存されません。
 maximum_object_size_in_memory 1024 KB

# キャッシュファイルのタイプ及びディレクトリ指定(複数可)
# →規模を拡張する場合は、COSSのみRAMディスク若しくはSSDに割り当て、AUFSを大容量HDDに割り当てて対応。
# ストアタイプ「COSS」の使用を定義(1MB以下のファイル)
# →タイプ ストアファイル サイズ ブロックサイズ 最大キャッシュファイルサイズ 不明
 cache_dir coss m:/squid/var/cache/coss 1024 block-size=512 max-size=1048576 max-stripe-waste=65536
# ストアタイプ「AUFS」の使用を定義(1MB以上のファイル)
# →タイプ ストアディレクトリ サイズ(MB) 1階層目ディレクトリ数 2階層目ディレクトリ数 最低キャッシュファイルサイズ
 cache_dir aufs m:/squid/var/cache/aufs 1024 8 16 min-size=1048576

# 保存するキャッシュの最大サイズを指定
# →規模を拡張する場合はここでの値も大きくします。
 maximum_object_size 16MB

# ログ関係その1
# →ログのタイムスタンプを見やすくする[YYYY/MM/DD.HH:MM:SS]
 logformat squid [%{%Y/%m/%d.%H:%M:%S}tl] %6tr %> a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
 logformat squidmime [%{%Y/%m/%d.%H:%M:%S}tl] %6tr %> a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt [%> h] [%<h]
 logformat common %> a %ui %un [%{%Y/%m/%d.%H:%M:%S}tl] "%rm %ru HTTP/%rv" %Hs %<st %Ss:%Sh
 logformat combined %> a %ui %un [%{%Y/%m/%d.%H:%M:%S}tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}> h" "%{User-Agent}> h" %Ss:%Sh
# ログ関係その2
 access_log m:/squid/var/logs/access.log squid
 cache_swap_log m:/squid/var/cache/cache_swap.log
 cache_log m:/squid/var/logs/cache.log
 cache_store_log m:/squid/var/logs/store.log
 logfile_daemon m:/squid/libexec/logfile-daemon.exe
 logfile_rotate 90
 emulate_httpd_log on
 strip_query_terms off
 buffered_logs on

# ファイルタイプのテーブル。ファイルタイプを増やしたい場合は下記conf内を編集して下さい。
 mime_table m:/squid/etc/mime.conf

# プロセスIDを記録する。
 pid_filename m:/squid/var/logs/squid.pid

# その他ファイルパス指定
 netdb_filename m:/squid/var/logs/netdb.state
 diskd_program m:/squid/libexec/diskd-daemon.exe
 unlinkd_program m:/squid/libexec/unlinkd.exe

# キャッシュの有効期間等を定義します。
# →キャッシュのHIT率に直結する為、重要なチューニングポイントの一つ。
# ファイル条件(正規表現可) 条件1 条件2 条件3
 refresh_pattern ^ftp: 1440 20% 10080
 refresh_pattern ^gopher: 1440 0% 1440
 refresh_pattern (cgi-bin|\?) 0 0% 0
 refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 10080 90% 43200
# →この場合、「gif or png or jpg or jpeg or ico」ファイル(画像ファイルを定義)は
#  キャッシュ保存時間が「10080分」以上であればキャッシュを破棄し、新しく取得する。
#  上記が当てはまらなければ次に移行。「lm-factor>90%」以上であればキャッシュを破棄し、新しく取得する。
#   lm-factor=キャッシュの保存時間÷アクセス先サーバー上で作成された時間
#  上記が当てはまらなければ次に移行。キャッシュ保存時間が「43200分」以上であればキャッシュを破棄し、新しく取得する。
 refresh_pattern -i \.(iso|avi|wav|mp3|mp4|mpeg|swf|flv|x-flv)$ 43200 90% 432000
 refresh_pattern -i \.(deb|rpm|exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tiff)$ 10080 90% 43200
 refresh_pattern -i \.index.(html|htm)$ 0 40% 10080
 refresh_pattern -i \.(html|htm|css|js)$ 1440 40% 40320
 refresh_pattern . 0 40% 40320

# クライアントが中断処理を行っても転送を継続する。
 quick_abort_min -1
 range_offset_limit -1

# キャッシュファイルの平均サイズを指定
# →ファイル数上限で起動しなくなる事もあるので、慎重に設定して下さい。
 store_avg_object_size 13 KB

# 不明。アクセス制御関係と推測。
 acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
 upgrade_http0.9 deny shoutcast
 acl apache rep_header Server ^Apache
 broken_vary_encoding allow apache

# proxy経由と認識されなくする。
 header_access X-Forwarded-For deny all
 header_access Via deny all
 header_access Cache-Control deny all
 forwarded_for off

# サーバーが終了するまでの待ち時間
 shutdown_lifetime 10 seconds

# 隣接するproxyサーバが無い為、関連設定を無効化する。
 icp_port 0
 htcp_port 0

# エラーページ表示などのファイルがあるディレクトリ指定
 icon_directory m:/squid/share/icons
 error_directory m:/squid/share/errors/Japanese

# メモリキャッシュ領域が溢れた場合の猶予を増やす(搭載メモリと相談)
 memory_pools_limit 128 MB

# コアダンプを作成する。
 coredump_dir m:/squid/var/cache

# パイプライン処理をさせる。
 pipeline_prefetch on

→環境によって変更する事。
◆認証用パスワードファイルを作成(ダイジェスト認証を使う場合)
 テキストエディタで編集
 m:\squid\etc\digpass

 UserName:password

 と平文で記述していく。
◆キャッシュストア構成
 管理者権限でコマンドプロンプトを実行
 m:\squid\sbin\squid.exe -zf m:\squid\etc\squid.conf
◆サービスに登録
 管理者権限でコマンドプロンプトを実行
 m:\squid\sbin\squid.exe -if m:\squid\etc\squid.conf
◆起動してみる。
 管理者権限でコマンドプロンプトを実行
 m:\squid\sbin\squid.exe -f m:\squid\etc\squid.conf

◆エラーが無ければサービスにて起動する。
 管理者権限でコマンドプロンプトを実行
 net start squid
◆外部ネットワークからの接続を許可する為、ルーター及びファイアウォール設定を変更する。
 Ciscoルーターの例

 フィルタリング設定
  Cisco851#conf t
  Cisco851(config)#ip access-list extended server
  Cisco851(config-ext-nacl)#permit tcp any any eq 5050

 NAT変換
  Cisco851#conf t
  Cisco851(config)#ip nat inside source static tcp 192.168.0.5 5050 interface Dialer0 5050

→各自使用ルーターに応じて設定する事。
◆接続確認
 内部ネットワークからは「192.168.0.5:3128」
 →パスワード入力が不要である事。

 外部ネットワークからは「ry.tl:5050」
 →パスワード入力が必要である事。
◆最後にログローテーション設定
 バッチファイル作成
 m:\squid\etc\log_rotate.bat

M:\squid\sbin\squid.exe -n squid -k rotate
net stop squid
net start squid

続いて、タスクスケジュールに登録していきます。
 コンピュータ右クリックで「管理」を開き、左側より「タスクスケジューラ」を選択し、「タスクスケジューラ ライブラリ」を開きます。
 右クリックで「新しいタスクの作成」を開く。
 「全般」タブにて、名前を付けましょう。「Squidログローテーション」
 「最上位の特権で実行する」にチェック

 「トリガー」タブにて、「新規」ボタンを選択し、開きます。
  「毎日」を選択し、開始を23:59:00に設定
   その他項目は全てデフォルト

 「操作」タブにて、「新規」ボタンを選択し、開きます。
  「プログラムの開始」のままで、「参照」ボタンから「m:\squid\etc\log_rotate.bat」を指定(開く)

 その他項目は全てデフォルト

 「OK」ボタンを押して保存

以上