Proxy

Reference:
http://anabuki.dip.jp/tips/squid.htm

Squid

ProxyサーバーSquidの設定方法

 プロキシーは、代理の意味で、web対象のプロキシーサーバーは
アクセスしたホームページをキャッシュすることによる端末の高速化とインターネット負荷の軽減
特に低速なアクセス回線には有効。
端末から直接インターネットにアクセスさせないことによるセキュリティの確保とコンテンツの制限
などのために設置するもので、Linuxではsquidが有名である。

 squidの機能は、次の通りである。
HTTP、FTP、GOPHER、WAIS、SSLの中継
高速なキャッシュアルゴリズム
ICPによるsquid間のキャッシュ情報交換
HTTPアクセラレータ
透過プロキシ
 これら機能を実現するためのネットワーク構成は、以下の2方法に大別される。

  
 また、Proxyサーバーは、挿入形態として2方式あり、端末から見た位置づけが異なる。

○一般的な形態

 Proxyを利用するのにブラウザ側で指定が必要な方法で、ブラウザの機能にあるProxyサーバーを設定する。

ネットワークの形態は、2形態のいずれでも良い。

 Squidの設定方法は、/etc/squid/squid.conf ファイルで

・HTTP_Portの設定
 ブラウザのProxyサーバーで指定するポート番号の設定。デフォルトでは3128番になっている。8080がよく使われているので、変更する場合は、コメント指定の # を削除すると共に以下のように変更する。

 http_port 8080

・ICP_PORTの設定
 ICPはプロキシー同士でキャッシュを交換するためのUDPベースのプロトコルである。上位とか下位にプロキシーが存在して串刺しの構成とする場合に使用する。デフォルトは3130である。使用しない場合は、以下のようにコメント指定をはずすとともにポート番号を0とする。

icp_prot 0

・アクセス制限
 Proxyを利用するユーザーを限定したい場合に設定する。以下の例は 192.168.0.0/24 からのアクセスのみを許可する設定である。
 まず、 acl all src 行の近くに localsubnet(名前は何でも良い) を定義する。

acl localsubnet src 192.168.0.0/24
acl all src 0.0.0.0/0.0.0.0

 次にデフォルトでは localhost のみの許可となっているアクセス制限に localsubnet を許可する定義を追加する。

http_access allow localhost
http_access allow localsubnet
http_access dent all

・キャッシュメモリーのサイズ変更
 デフォルトは8Mである。これでよい場合は何もしなくて良いが、メモリーに余裕がある場合は、20M程度割り当てておくのがベターのようである。

cache_mem 24M

・ディスクキャッシュサイズの変更
 デフォルトは100Mである。大きすぎるのも問題かも知れないが、100Mでは少ない。/var/spool/squid にキャッシュが作成されるため、/var が存在するパーティションの状況と相談しながら数100M程度に増やしておくのが良いようである。

cache_dir /var/spool/squid 300 16 256

・上位にsquidが存在しており、それを使わないと外部に出られない時の設定
 ネットワークのセキュリティ確保などの理由ですでにsquidがネットワーク内に存在しており、それを使わないと外部に出られない構成となっており、その内部にsquidを設置しなければならない場合は、以下の指定により、必ず上位のsquidを経由することとなる。
 上位のsquidが 192.168.2.1 でポートが8080の場合の例

cache_peer 192.168.2.1 parent 3128 3130
never_direct allow all

・有害コンテンツのブロック
 以下に示すリストのように,アクセス制御するURLのリストを正規表現で記入したテキストファイル作成する。

/etc/squid/blacklist.txt
**
^http://www.yahoo.co.jp/
^http://www.goo.co.jp/

 上記の例では,/etc/squidのディレクトリの中に「blacklist.txt」として,「Yahoo!JAPAN」と「goo」に対してアクセス制御した場合である。

 また、ブロックするパス名リストファイル(URLからホスト名を除いた部分)の作成する。
 以下に示すリストのように,アクセス制御するパスのリストを正規表現で記入したテキストファイル作成する。

/etc/squid/blackpath.txt

xxx
adult
sex

上記の例では,/etc/squidのディレクトリの中に「blackpath.txt」として,「xxx」,「adult」,「sex」の文字列がURLに含まれる場合に対してアクセス制御する例である。

※正規表現
 正規表現が,「^」で始まっていれば前方一致(文字列の先頭部分が一致),「$」で終わっていれば後方一致(文字列の最後の部分が一致),「^」と「$」で文字列がはさまれていれば完全一致を意味する。

  次に /etc/squid/squid.conf に以下の修正を行う。

#Examples:
#acl myexample dst_as 1241
#acl password proxy_auth REQUIRED
#
#Defaults:
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 SSL_ports port 443 563
acl Safe_ports port 80 21 443 563 70 210 1025-65535
acl CONNECT method CONNECT
acl localsubnet src 192.168.0.0/255.255.255.0
acl blacklist url_regex “/etc/squid/blacklist.txt”
acl blackpath urlpath_regex “/etc/squid/blackpath.txt”

#

  1. INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

#
http_access deny blacklist
http_access deny blackpath
http_access allow localhost
http_access allow localsubnet
http_access deny all

・端末のIPアドレスをアクセス先Webサーバーに知られたくない場合の設定
forwarded_for off

 以上で設定は終了である。squidを再起動すれば動くはずである。再起動は次の通りである。

#/etc/rc.d/init.d/squid restart

○透過プロキシー

 上記の方法では、全端末のブラウザにプロキシーの設定が必要となり煩雑である。端末の設定はそのままでプロキシーを強制的に挿入させる方法があり、透過プロキシーと呼ばれている。この場合のネットワーク構成は、右側の串刺しタイプに限定される。また、ftpは強制的にプロキシー経由と出来ないため、上記のブラウザの設定が必要である。

 設定する方法は、ゲートウェイマシンにsquidをインストール必要があり ipchains を起動して80 ポートへのアクセスを全てproxyのhttpポートに変換する。後は、上記の一般的なプロキシー設定に加えて以下の設定を行えばOKである。

・ipchainsの設定

 80番ポートへのアクセスをsquidの待ち受けポート(ここではデフォルトの3128番)に変換するため、以下の設定を行う。

/sbin/ipcahains -F
 /sbin/ipchains -A input -p tcp -s 0/0 -d 127.0.0.1/32 www -j ACCEPT
/sbin/ipchains -A input -p tcp -s 0/0 -d 192.168.0.0/24 www -j ACCEPT
/sbin/ipchains -A input -p tcp -s 192.168.0.0/24 -d 0/0 www -j REDIRECT 3128

 この設定は、起動の度に行う必要があるため、 /etc/rc.d/rc.local の最後に追記するなり、別ファイルに記述して、/etc/rc.d/rc.local から起動するような設定が必要である。

・squidの設定  一般的な設定に加えて以下を追加する。

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

これでsquidをリスタートすれば透過プロキシーとして動作する。端末を接続してwebがアクセスできればOKである。念のために /var/log/squid/access.log で確認すれば本当にsquidを使っているかどうかが分かる。
○WEBアクセラレーター(Reverse Proxy)

 Webアクセラレーターは、グローバルからのホームページアクセスを中継し、CASHEで高速化する物である。

 設定方法は、まず上で指定した、アクセス許可をプライベートアドレスに限定するのではなく全てに許可する。
 次に、

http_port 80
httpd_accel_host localhost(内部のWebサーバーアドレス)
httpd_accel_port 80

として再起動する。これでこのSQUIDに外部からポート番号80でアクセスすると指定した内部のWebサーバーに転送される。

 また、通常のProxyとしても使用したい場合は、

httpd_accel_with_proxy on

とする。これで内部からポート番号80でアクセスするとProxyが機能する。

 ただし、この共用設定をおこなうと、外部からのアクセスにもProxyサーバーとして機能してしまうため、不正アクセスの踏み台となってしまうので注意が必要である。
 対策としてアクセス制限を試してみた。以下の設定で一応プロキシーの踏み台使用は防止できている。

acl target dst 本サーバーのグローバルアドレス/255.255.255.255
acl target_in dst 内部のWebサーバーのIPアドレス/255.255.255.255

http_access allow localsubnet
http_access allow all target
http_access allow target_in
http_access deny all