Squid を透過型 HTTP Proxy としてインストールする

Squid は Web Proxy Cache として広く利用されているソフトウェアです。 ここでは、それを 「透過型」 の HTTP Proxy としてインストールします。 透過型 HTTP Proxy を外部と接続するゲートウェイ上で動かすと、 利用者が意識すること無く、HTTP のアクセスをキャッシュすることができ、 外部接続のネットワークの負荷を下げることが出来ます。 また、各種のアクセス制御により、セキュリティの向上に役に立つ場合があります。

現在の最新の安定版は、2.5 STABLE7 (2004/10/11 リリース) です。

2.5 STABLE9 が 2005/02/24 にリリースされました。

コンパイル

  1. ソースを展開します。
    % tar xzvf …/squid-2.5.STABLE7.tar.gz
    % cd squid-2.5.STABLE7
    
  2. configureを実行し、makeします。 透過型に対応するために、configure に --enable-pf-transparent を指定します。 アンダースコアが含れている不正なホスト名が指定されてもエラーにしたくない場合には、 --enable-underscores を指定します。
    % ./configure --prefix=/usr/local/squid --enable-pf-transparent --enable-underscores
    % make
    

インストールと設定

  1. グループIDを追加します。 /etc/group に以下のような設定を追加します。
    squid:*:68:
    
  2. ユーザIDを追加します。 vipw コマンドで以下のような設定を追加します。
    squid:*:68:68::0:0:Squid Web Proxy Cache:/usr/local/squid:/sbin/nologin
    
  3. インストールします。 /usr/local/squid の下に格納されます。
    % su
    # make install
    # mkdir /var/squid /var/squid/cache /var/log/squid
    # chown squid:squid /var/squid /var/squid/cache /var/log/squid
    # chmod 750 /var/squid /var/squid/cache /var/log/squid
    
  4. 設定ファイル /usr/local/squid/etc/squid.conf を編集します。 詳細な説明がコメントとして書かれているので、それに従って設定します。 なお、このサンプルをページの最後に添付します。 参考にしてください。
  5. キャッシュの初期化をします。 少し時間が掛かります。
    # /usr/local/squid/sbin/squid -z
    
  6. 透過型 HTTP Proxy として動作させるために、NAT を設定します。 OpenBSD 3.2 以降を使用しているなら /etc/pf.conf のフィルタリングルールの前に、 OpenBSD 3.1 以前を使用しているなら /etc/nat.conf に、 以下のような設定を追加します。 ファイルが無ければ作成します。 なお、NAT を動かすためには、PF が有効になっている必要があります。 事前に設定しておいてください。
    rdr on fxp1 proto tcp from any to 0.0.0.0/0 port 80 -> 127.0.0.1 port 3128
    
    新しい設定を読み込ませます。 OpenBSD 3.2 以降を使用しているなら
    # pfctl -f /etc/pf.conf
    
    OpenBSD 3.1 以前を使用しているなら
    # pfctl -N /etc/nat.conf
    
  7. 起動の設定を /etc/rc.local に記述します。
    echo -n ' squid'
    /usr/local/squid/sbin/squid
    
  8. 停止の設定を /etc/rc.shutdown に記述します。
    /usr/local/squid/sbin/squid -k shutdown
    
  9. ログファイルをローテーションするように crontab を設定します。 以下の例は、週一回(月曜日早朝)にローテーションします。 利用者が多い場合は、毎日にしたほうが良いでしょう。
      30    3     *     *     1     /usr/local/squid/sbin/squid -k rotate
    

squid.conf のサンプル

  1. 透過型 HTTP Proxy として、192.168.0.* からのリクエストのみ許可する設定の例です。
    # ----------------------------------------------------------------------
    # NETWORK OPTIONS
    # ----------------------------------------------------------------------
    http_port 3128
    icp_port 0
    
    # ----------------------------------------------------------------------
    # OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM
    # ----------------------------------------------------------------------
    hierarchy_stoplist cgi-bin ?
    acl QUERY urlpath_regex cgi-bin \?
    no_cache deny QUERY
    
    # ----------------------------------------------------------------------
    # OPTIONS WHICH AFFECT THE CACHE SIZE
    # ----------------------------------------------------------------------
    cache_mem 20 MB
    cache_swap_low 90
    cache_swap_high 95
    maximum_object_size 4096 KB
    minimum_object_size 0 KB
    maximum_object_size_in_memory 20 KB
    ipcache_size 512
    ipcache_low 90
    ipcache_high 95
    fqdncache_size 512
    cache_replacement_policy lru
    memory_replacement_policy lru
    
    # ----------------------------------------------------------------------
    # LOGFILE PATHNAMES AND CACHE DIRECTORIES
    # ----------------------------------------------------------------------
    pid_filename     /var/squid/squid.pid
    cache_dir ufs    /var/squid/cache 1024 64 64
    cache_access_log /var/log/squid/access.log
    cache_log        /var/log/squid/cache.log
    cache_store_log  /var/log/squid/store.log
    
    # ----------------------------------------------------------------------
    # OPTIONS FOR EXTERNAL SUPPORT PROGRAMS
    # ----------------------------------------------------------------------
    dns_retransmit_interval 5 seconds
    dns_timeout 1 minutes
    auth_param basic children 5
    auth_param basic realm Squid proxy-caching web server
    auth_param basic credentialsttl 2 hours
    
    # ----------------------------------------------------------------------
    # OPTIONS FOR TUNING THE CACHE
    # ----------------------------------------------------------------------
    equest_header_max_size 10 KB
    request_body_max_size 10 MB
    refresh_pattern ^ftp:           1440    20%     10080
    refresh_pattern ^gopher:        1440    0%      1440
    refresh_pattern .               0       20%     4320
    
    # ----------------------------------------------------------------------
    # TIMEOUTS
    # ----------------------------------------------------------------------
    connect_timeout 1 minutes
    read_timeout 3 minutes
    request_timeout 30 seconds
    client_lifetime 6 hours
    half_closed_clients on
    
    # ----------------------------------------------------------------------
    # ACCESS CONTROLS
    # ----------------------------------------------------------------------
    acl all src 0.0.0.0/0.0.0.0
    acl manager proto cache_object
    acl localhost src 127.0.0.1/255.255.255.255
    acl local src 192.168.0.0/255.255.255.0
    acl Safe_ports port 80          # http
    acl CONNECT method CONNECT
    http_access allow manager localhost
    http_access deny manager
    http_access deny !Safe_ports
    http_access deny CONNECT
    http_access allow local
    http_access deny all
    icp_access deny all
    reply_body_max_size 0 deny all
    
    # ----------------------------------------------------------------------
    # ADMINISTRATIVE PARAMETERS
    # ----------------------------------------------------------------------
    cache_mgr webmaster@my.domain
    cache_effective_user squid
    cache_effective_group squid
    visible_hostname myserver.my.domain
    
    # ----------------------------------------------------------------------
    # OPTIONS FOR THE CACHE REGISTRATION SERVICE
    # ----------------------------------------------------------------------
    
    # ----------------------------------------------------------------------
    # HTTPD-ACCELERATOR OPTIONS   この4行は、透過型 HTTP Proxy のための設定。
    # ----------------------------------------------------------------------
    httpd_accel_host virtual
    httpd_accel_port 80
    httpd_accel_with_proxy on
    httpd_accel_uses_host_header on
    
    # ----------------------------------------------------------------------
    # MISCELLANEOUS
    # ----------------------------------------------------------------------
    logfile_rotate 10
    append_domain .my.domain
    
    # ----------------------------------------------------------------------
    # DELAY POOL PARAMETERS (all require DELAY_POOLS compilation option)
    # ----------------------------------------------------------------------