HOME / コンピュータTips / Solaris / Squidの設定(Forward Proxy)

Date: 2009/11/23 |  このエントリーをはてなブックマークに追加  |  Tags: OpenSolaris, squid, proxy, proxy server, forward proxy, プロキシー, プロクシ, 設定

Forward Proxy Server(フォワード・プロキシ・サーバ)、Squidのセットアップ

Squidは、Forward-ProxyにもReverse-Proxyにも、なることができます。

技術的には同じ基盤を使っているのですが、利用ニーズが異なります。

  • Forward Proxy
    • 主に、LAN内のマシン等を、外(大抵Internet)に繋ぐために使います。
  • Reverse Proxy
    • 主に、WEBサーバ(何台か)を、外(大抵Internet)に公開するために使います。

どちらも、

クライアント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 

Forward Proxyの設計

Proxy Serverを設定する上で、もっとも注意しなくてはならないのは、Open Proxyにしてしまうことです。Open Proxyは、中(信用できる)から外(信用できない)のForward Proxyとは違い、外(信用できない)から外(信用できない)への接続を許します。この結果、悪意のある第3者が、全く別の人間に対する攻撃のパスを用意してしまうことになり、自分が気がつかないうちに、別のサーバに対する加害者となってしまいます。

そこで、Forward Proxy設計のポイントは

  • どこ(localnet)から、外(Internet)へ繋ぐのか?
  • localnetが自分のものであることを担保する方法はなにか?
    • GlobalアドレスでListenしない。
    • FireWall(ipfilterなど)で落とす。
    • Squid自身がお断りする
  • 例えば、ssh portforwarder等で、このマシンにアクセスし、Internetに出て行く踏み台にするのならば、127.0.0.1も開ける。あるいは127.0.0.1だけあける。

などなど、組み合わせて使う必要があります。

ここでは、FireWallまでは立てないが、localhostとinnnernetのIPからのみLISTENし、もし設定に誤りがあっても、squid自身も内部からのみしか受け付けない設定にします。

squid.confの書き換え作業

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

  • lpで、(squid)がいる場所から判定しています。
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/

コンピュータTips/Solaris

Recent Updates

ディスクの不良を確認する(iostat -EnのError等)

ディスク関係のスタックをざっくり書くと次の様になっています 例、SAS Expanderを使う場合、 例、AHCIなどを使う場合、 これらのエラーは、次の様なコマンドで知ることができます。 出力結果例 このなかで、 たとえば、SATAディスクを利用している際に負荷が上がってしまい、ディスクの応答が間に合わないシチュエーションでは、Transport Errorが一気に …
»続きを読む

2017年、新年明けまして、おめでとうございます。

日記/2017年、新年明けまして、おめでとうございます。

新年明けまして、おめでとうございます。今年もよろしくお願いします。 昨年中は、皆様にお世話になりました。 昨年は、コツコツと3年程前から行ってきた改革がある程度完成された年で、この先5年、10年を見据えて、次のフェーズへと進む為の土台が完成した年でもありました。 それにキャッチアップする形で、個々の従業員一同が、役割を自覚し、明確に動けた年であったかと考えています。 …
»続きを読む

RSA鍵認証のみにし、Password認証を無効化する

意外に覚えきれなくて、いつも忘れるので、メモついでに残しておきます。 古いOpenSSHや、SunSSHの場合は、これも無効にします。 ユーザ目線でのザックリとした説明を。OpenSSHではなく別のSSH実装も含めて考えているので、OpenSSHのソースをじっくり読んだわけではないため、間違ってたらすみません。 まず、Password認証を無効にする場合、 PasswordAut …
»続きを読む

Nexus7 2013をMarshmallow(Android 6.0)化

OTAでない方法で。 だいたい ここに書いてある方法 なんだけど、adbなどが一式使えている状態で。 まずは自分の機種のものをダウンロードする。僕のは、 Android 6.0 Marshmallow for Nexus 7 2013 Wi-Fi 。tgzを展開し、zipも解いておく。 まずはboot loaderへ。 bootloader自体のアップデート。一式、updat …
»続きを読む

OS X 10.11 El Capitanで、phpのモジュールインストール

Yosemiteからのアップデートは割と簡単です。なぜならYosemite時に、すでにapache 2.4になり、php 5.5になっているから(笑 アップデート前に、まずはphp.iniとhttpd.confをバックアップしておきましょう きになるなら、hostsとかapache以下全てをバックアップしておいてもいいかも。 後はEl Capitanにアップデートする。 アッ …
»続きを読む

EasyAcc Powerbank PB4000CB

スマフォTips/モバイルバッテリー/モバイルバッテリー製品レビュー/EasyAcc Powerbank PB4000CB

薄型のモバイルバッテリーEasyAcc Powerbank PB4000CBです。 今や、モバイルバッテリーは大型のものが好まれるのか、隙間無く商品があります。20,000mAh越えで、「でけえ!」とか言ってますけど、大きいのを探せば、100Wh(27,000mAh)、200Wh当たり前、探せば500Wh(135,000mAh)とか、もっともっとあるのです。用途がどんどん異なっていくので …
»続きを読む

EC Technology Sports Headsets S10-JWH07B

デバイスTips/Bluetooth/EC Technology Sports Headsets S10-JWH07B

Bluetoothのスポーツヘッドセット、 S10-JWH07B について。 今までブログに記載することはなかったのですが、実は割とBluetoothと言うか無線型のヘッドフォンを沢山持っています。赤外線や独自物、Bluetoothなどいくつもストックを持っていたりします。普通の人からするとマニアです。でも、マニアからみるとそうでもないレベルです。 ただ「ヘッドフォンの音質」というの …
»続きを読む

静岡県内をVPNでつなぐ(割と特殊な例)

静岡というのはある意味特殊な土地で、ほとんどのインターネットプロバイダのPOIは静岡でつながれておらず、NTT西圏内のどこかで繋がっているので、大抵大阪折り返しになる。仮に静岡県内にPOIがあっても、だいたい静岡でルーティングしてないので、やっぱり東京折り返しになってたりする。例え 同じプロバイダを使っていたとしても 。 だから静岡←→静岡のVPNは、静岡←→東京や、静岡←→大阪よりも遅 …
»続きを読む

最新  |  << 前ページ  |  次ページ >>  |  最初