2017年2月5日日曜日

FreeBSDでユーザー認証付き、アクセス先をホワイトリストで制限した、Torプロキシサーバーを立てる方法。Squid+Privoxy+Tor

自己責任で実行すること。

方法
squidとprivoxyとTorを組み合わせる。
squidでユーザー認証、ホワイトリスト制限をし、privoxyに転送して、
privoxyからtorにポートフォワードし、
Torでアクセスという多段串の構造になる。
下記設定ではsquidの待受ポートを任意のものに、privoxyの待受はローカルホストのみに対して8118ポートで、torの待受はローカルホストのみに対して9050で受け付けているという条件で行っている。

squidの設定
プロキシサーバーsquidのインストール
pkg search squid
squid-3.5.23                   HTTP Caching Proxy
自動起動するには
squid_enable="YES"
を/etc/rc.confに追加。
# echo 'squid_enable="yes"'>> /etc/rc.conf

ホワイトリスト制限をする場合は、まずホワイトリストを作成する。
vi /usr/local/etc/squid/whitelist
でホワイトリストファイルを作成し、ドメイン指定をする。先頭に.を入れるとサブドメインを含めたものにも適応できる。
.hogehoge.com
.hoge2.hogehoge.jp

また、BASIC認証を行う場合は、htpasswdコマンドで、ユーザー名とパスワードの定義ファイルを作っておく。
htpasswd -b -c .htpasswd user passwd
(htpasswdを初めて作る場合。すでにファイルが有ってユーザーを追加するだけなら-cオプションを外す)

ここまでの準備をして、squidの設定ファイルを編集する。
設定ファイルがない場合は一度起動するとsquidの設定ファイルができるので、終了させてからそれを編集。
vi /usr/local/etc/squid/squid.conf
http_port XXXX
待受ポートを任意のものに変える。
squidの設定ファイルは
前半部がacl [ルール名] [ルール]の構文でルールを幾つか定義し、
後半部でhttp_access allow/deny [ルール名]を羅列し、どのルール名のものを許可あるいは拒否するかということを書いている。ルールは上から順に適応される。

まず、前半部において
#ルールホワイトリストの定義whitelistを設定。
acl whitelist dstdomain "/usr/local/etc/squid/whitelist"
#BASIC認証の設定
auth_param basic program /usr/local/libexec/squid/basic_ncsa_auth /usr/local/etc/squid/.htpasswd
auth_param basic children 5 startup=5 idle=1
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
#BASIC認証通過の定義pauthを設定。
acl pauth proxy_auth REQUIRED
を追加。

後半部で
定義pauthとwhitelistの両方を満たす設定のみ通信可能にしている(AND条件)。このように書かないと、ホワイトリストが機能しない。↓
http_access allow pauth whitelist
#http_access allow localnetはローカルネットワークからのアクセスを認証無しで許可してしまうため#をつけて無効化。(もしくはlocalhetをwhitelistとともにAND条件に組み込む。)
上記ルールまでに許可されなかったものはすべて拒否↓
http_access deny all

あとは、
cache_peer 127.0.0.1 parent 8118 0 no-query
never_direct allow all
を追加し、provixyに転送。当然ながら、外部公開するとリスクが高いので、最低限ポート番号は変更しておく。
プロキシであることを隠したい場合は、以下の項目も追加。ただし悪用された場合、言い訳ができなくなり相当危険。
#hidden proxy info
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all
reply_header_access X-Forwarded-For deny all
reply_header_access Via deny all
reply_header_access Cache-Control deny all

privoxyの設定
provixyのインストール
pkg search privoxy
privoxy-3.0.26                 Privoxy is a web proxy with advanced filtering capabilities
pkg install privoxy
自動起動するには
privoxy_enable="YES"
を/etc/rc.confに追加。
# echo 'privoxy_enable="yes"'>> /etc/rc.conf
設定ファイルがない場合は一度起動するとprivoxyの設定ファイルができるので、終了させてからそれを編集。

vi /usr/local/etc/privoxy/config
Torと組み合わせて使われることも多いため、設定ファイルにすでに書かれている下記の行を編集。
#        forward-socks5t   /               127.0.0.1:9050 .
行頭の#を外し、設定を有効化する。socks5tは、DNSリークを防止する拡張仕様。

torの設定
デフォルトのままで起動する。
torのインストール
pkg search tor
tor-0.2.9.8                    Anonymizing overlay network for TCP
pkg install tor-0.2.9.8

インストール後、自動起動させるには、
tor_enable="YES"
を追加。
# echo 'tor_enable="yes"'>> /etc/rc.conf

あとは、それぞれのサービスを起動させる。
つながらない場合は、
それぞれのサービスの待受IP:ポートに間違いがないか確認。
Provixyを外部公開している場合、
listen-address  192.168.XX.XX:YYYY
などに変更しているため、squidからフォワードする際は
cache_peer 192.168.XX.XX parent YYYY 0 no-query
にする必要がある。Torを外部公開している場合もprivoxyの設定で同様。


参考
プロキシサーバーの構築に関するメモ
http://www.satlab-gineiden.com/pc-soft/proxy_server.html
proxyサーバ squidでアクセス時に認証を要求する設定(Ubuntu14.04の設定) 
http://vogel.at.webry.info/201504/article_13.html
squid.confでwhitelistに書いたドメインだけのアクセスを許可したい
https://teratail.com/questions/48053
プロキシサーバの設定
http://tech.ckme.co.jp/proxy.shtml
Privoxy
https://wiki.archlinuxjp.org/index.php/Privoxy
Squid example config file for working with default provixy
https://gist.github.com/ourway/6dd800ca619120e35076

0 件のコメント:

コメントを投稿