HOME / コンピュータTips / Solaris / Squidの設定(Forward Proxy)
Date: 2009/11/23 | | Tags: OpenSolaris, squid, proxy, proxy server, forward proxy, プロキシー, プロクシ, 設定
Squidは、Forward-ProxyにもReverse-Proxyにも、なることができます。
技術的には同じ基盤を使っているのですが、利用ニーズが異なります。
どちらも、
クライアントPC -> Proxy Server -> サーバ
このように書くと同じですが、図に書くとこのような形で異なります。
今回、設定方法を記述するのはこれです。
これは、参考まで・・・。うちはSquidじゃなくて、apacheでやるんだよね。これ。
では、Forward Proxyに対する説明をします。
まずはpkgからインストールします。
pkg install -v SUNWsquid
Creating Plan / Before evaluation: UNEVALUATED: +pkg:/SUNWsquid@2.7.6,5.11-0.111:20090508T163655Z After evaluation: None -> pkg:/SUNWsquid@2.7.6,5.11-0.111:20090508T163655Z Actuators: restart_fmri: svc:/system/manifest-import:default None DOWNLOAD PKGS FILES XFER (MB) Completed 1/1 1128/1128 1.30/1.30 PHASE ACTIONS Install Phase 1199/1199
Proxy Serverを設定する上で、もっとも注意しなくてはならないのは、Open Proxyにしてしまうことです。Open Proxyは、中(信用できる)から外(信用できない)のForward Proxyとは違い、外(信用できない)から外(信用できない)への接続を許します。この結果、悪意のある第3者が、全く別の人間に対する攻撃のパスを用意してしまうことになり、自分が気がつかないうちに、別のサーバに対する加害者となってしまいます。
そこで、Forward Proxy設計のポイントは
などなど、組み合わせて使う必要があります。
ここでは、FireWallまでは立てないが、localhostとinnnernetのIPからのみLISTENし、もし設定に誤りがあっても、squid自身も内部からのみしか受け付けない設定にします。
squid.confの設定変更です。
まずは、設定ファイルを保存しておきます。
cd /etc/squid cp squid.conf squid.conf.dist
デフォルトでは次のように設定されています。
#Recommended minimum configuration: acl all src all acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 # # Example rule allowing access from your local networks # Adapt to list your (internal) IP networks from where browsing # should be allowed acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
この設定はこのままで構わないでしょう。
次に、次のような設定箇所があります。
デフォルトで、この構造を理解せずに立てることを防ぐため、localnetからのアクセスを許しつつ、最後に全てをdenyしています。localnet、localhostからのアクセスがあればよいので、deny allをコメントアウトします。
# Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed http_access allow localhost http_access allow localnet # And finally deny all other access to this proxy #http_access deny all
ICPアクセスも同様の考え方。localnetを許しているが、デフォルトで理解せずに立ててはいけない。不要ならば、これは通過させない。
#Allow ICP queries from local networks only icp_access allow localnet icp_access deny all
LISTENするアドレスは重要です。デフォルトでは下記の通り、全てのアドレスにBINDしています。
# Squid normally listens to port 3128 http_port 3128
Forward Proxyであれば、グローバルアドレスのアドレスに対してListenする必要が無いことがほとんどです((むしろするならば、squidのaclで除去制御するよりも、ipfilterなど、別の方法でも行った方が確かでしょう))。
localnetと、localhostだけしか利用しない場合は、次のように設定しておくとよいでしょう。
#http_port 3128 http_port 127.0.0.1:10080 http_port ローカル側のアドレス:10080
必要ならば、cache_memなども増やしておきます。
cache_mem 16 MB
# parent-proxy #cache_peer localhost parent 10080 3130 #acl SSL method CONNECT #never_direct allow SSL
起動します。
svcadm enable squid
正常に起動していることを確認します。念のため、最初にログを見ておきます。
svcs -lp squid
fmri svc:/network/http:squid name Squid WebCache enabled true state online next_state none state_time Mon Nov 23 16:56:40 2009 logfile /var/svc/log/network-http:squid.log restarter svc:/system/svc/restarter:default contract_id 46445 dependency require_all/error svc:/milestone/network:default (online) dependency require_all/none svc:/system/filesystem/local:default (online) dependency optional_all/error svc:/system/filesystem/autofs:default (online) process 3552 /usr/squid/sbin/squid process 3554 (squid) process 3555 (unlinkd)
netstatでも確認しておきます
netstat -an | grep LISTEN
たとえば、こんな感じのイメージです。
*.22 *.* 0 0 49152 0 LISTEN 127.0.0.1.10080 *.* 0 0 49152 0 LISTEN 192.168.1.1.10080 *.* 0 0 49152 0 LISTEN
リソースの状況は次のように見ることもできます。数字はプロセスIDで、上のsvcs
pfiles 3554
次のようにして、チェックをします。
localhostのProxy接続がうまくいくかどうかのテストです。これは成功するはず。
http_proxy=http://127.0.0.1:10080/ wget http://www.justplayer.co.jp/
192.168.1.1をlocalnetのアドレスにしていた場合、次のようなテストもします。これもLISTENしているのならば、成功するはず。
http_proxy=http://192.168.1.1:10080/ wget http://www.justplayer.co.jp/
グローバルアドレスがついているマシンで、LISTENしていない場合、これは、接続ができないという旨のエラーがでなくてはなりません。
http_proxy=http://グローバルアドレス:10080/ wget http://www.justplayer.co.jp/
今回の設定では、外からの接続はLISTENもせず、squid自体のaclでも弾く方法をとりました。ACLのテストはしていないので、テストする場合、
ACLの接続試験をする場合、一時的に、
http_port グローバルアドレス:10080
等を追加し、実際にForbidden(403)がでることを確認した後に、行を再び削除して、squidをリスタートしておきましょう。
SSL付のページへのアクセスもチェックしておきます。これは、成功するはずです。
http_proxy=http://127.0.0.1:10080/ wget --no-check-certificate https://www.wikiplus.jp/