Squid と匿名プロキシと

Squid で匿名プロキシを立てる

Cent OS などの RHEL系Linux を使っている場合、
# yum install squid
でインストール出来ます。

2.7系や3.1系などの最新版を使いたい場合には http://www.squid-cache.org/Versions/ より tarボールをダウンロードしてき make するとよいでしょう。

 

» squid.conf の設定 ~基本編~

始めに squid.conf の基本設定です。

  • http_port
    • LISTEN するポート番号です。デフォルトは 3128 なのですが、8080 にするのが慣例だったりしますが、何でも構いません。LISTENする IPアドレスを書くこともできます。
      http_port 8080
  • cache_store_log
    • cache store ログですが、
      cache_store_log none

      とか書いちゃっていいです。このファイルを見ればキャッシュされた時間とか色々分かりますが、サイズがどんどん大きくなっていくので正直邪魔です。

    • access ログくらいはとっておいた方がいいでしょう。
  • acl
    • https を通し、CONNECT メソッドを許可する場合には何もしなくても構いません。
      が、CONNECT メソッドを許可するということは、直接的な TCP/IP を squid を使うクライアントに許可してしまうことになるので、セキュリティ的には本当はあまり好ましくありません。しかし、NAPT(IPマスカレード)じゃない環境で https 通信させるためには必須です。CONNECT メソッドを禁止する場合には

      ##acl CONNECT method CONNECT

      とします。(自分で明示的にコメントアウトしたものは ## とかしておくと後で分かり易いです。)

    • squid を利用するクライアントを限定させたい場合にはこの acl タグを使います。
      acl PermittedHosts src 192.168.10.0/24

      と言った感じのアクセス許可を書いてください。(書いただけではアクセス制御はされません。http_access で使用します。)

  • http_access
    • # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS と書かれた行を探してください。この下に
      http_access allow PermittedHosts

      と書いておきます。PermittedHosts の部分は、先ほどの acl に合わせます。この数行下に http_access deny all があることを確認しておいてください。これで、許可された IP アドレス以外の squid の利用を防げます。(アクセスしても Access Denied と表示されるようになる。)

  • cache_effective_user / cache_effective_group
    • 常駐する squid プロセスのユーザを指定します。squid にしておきます。グループも同じです。
      cache_effective_user squid
      cache_effective_group squid

 

» squid.conf の設定 ~匿名編~

お待たせしました(笑)。ここから匿名にするための設定です。

  • visible_hostname
    • エラーメッセージなどの表示の際に、そのメッセージの下部に表示されるホスト名を変更するためのタグです。何も書かないと gethostbyname()関数で取得した値が表示されるとありますので、つまり squid が起動しているサーバのホスト名が表示されます。それでも構わないという場合はいいのですが、何か適当な値に設定しておく方が安心です。
      visible_hostname proxy.example.com

      などと設定しておけば良いでしょう。

  • forwarded_for
    • 既定では HTTP_X_FORWARDED_FOR という環境変数に接続元の IP アドレスを載せて接続先サーバへ通知するのですが、これを止めさせます。
      forwarded_for off

      これで HTTP_X_FORWARDED_FOR の内容は unknown になります。しかし、この HTTP_X_FORWARDED_FOR という環境変数はプロキシ特有の環境変数なので、そもそも出力させたくない場合には別の設定(header_access)が必要となります。(とは言え、精神的に気持ち悪いのでこの設定は必ず off にしておく方が精神衛生上も良いでしょう )

 

ここまでの設定で、少なくとも接続元の IP アドレスが漏れる心配はなくなりました。(設定はたった2つですが!)

しかし、まだプロキシ特有の環境変数が出力されているので、これを送らないように変更します。

 

  • header_access
    • squid.conf の中で、この設定を変更すると HTTP標準に違反すると警告されていますが、変更します。
      意味は、簡単で、deny all の前に書いた環境変数を出力しないようになります。指定するときは、HTTP_を取り除き、_(アンダーバー)を -(ハイフン) にします。
    • HTTP_X_FORWARDED_FOR 環境変数を出力しないようにします。
      header_access X-Forwarded-For deny all
    • HTTP_VIA 環境変数を出力しないようにします。
      header_access Via deny all
    • HTTP_CACHE_CONTROL 環境変数を出力しないようにします。
      header_access Cache-Control deny all

      HTTP_CACHE_CONTROL は Internet Explorer も使っているようですが、まぁ、送らなくてもいいでしょう。

    • 以下の2つは書くことを奨励しません。
      header_access referer deny all
      header_access user-agent deny all
      • HTTP_REFERER をチェックしている CGI などは多数あります。これは何処から飛んできたかを示す環境変数で、リンク元とかの特定に利用されているほか、不正な CGI呼び出しなどをこの環境変数をチェックして調べている場合が数多いサイトであります。確かにこちら側の情報が流れてしまうのですが、これは消さない方がいいです。
      • 次の HTTP_USER_AGENT は、使っているブラウザなどの情報を示すもので、これは消しても構いません。あるいは、header_replace で、テキトーに変更するのも Okay です。しかし、どういったブラウザからアクセスされているのか統計を取っているページなどもあるため、消しても消さなくてもいいと言った感じです。

前のページへ

 

関連するコンテンツ


コメントを残す


メモ - 以下の HTML タグと属性が利用できます。
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>