Torで透過プロキシを立てました。
はじめに
「Torを透過プロキシとして使えないかなー。」と思ってググったら、Torプロジェクトのページがヒットして設定方法も記載されていたので構築してみます。
透過プロキシとは
クライアント側で明示的に設定しなくても使用できるプロキシです。
基本的にはネットワークの送信元と宛先の間に置いて使います。
メリット、デメリットは以下の通りです。
- メリット
- クライアント側でプロキシ設定をしなくてもプロキシ経由で通信できる
- OSのプロキシ設定に従わないアプリケーションもプロキシ経由で通信できる
- デメリット
- 物理構成、ネットワーク構成、プロキシサーバーの設定など面倒な点が多い
Torを使用した透過プロキシ
以下の特徴や制限があります。
構成
クライアントからプロキシサーバーのネットワークIF「eth1」に到着したTCPとDNSの通信をiptablesでTorに転送することで動作します。
クライアントが送信元となる通信のみTor経由とし、透過プロキシサーバーが送信元となる通信はTorの対象外とします(iptablesの設定で対象とすることも可能です)。
- 透過プロキシサーバー
- OSはCentOS7.9(要件を満たせば何でも良い)
- ネットワークIFを2つ持つ
- クライアント
- 制限なし
Torプロキシの構築
OS設定
ネットワーク設定
IPアドレス設定を確認する
# ip a ... 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 inet 10.0.0.4/24 brd 10.0.0.255 scope global noprefixroute eth0 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 inet 10.0.1.4/24 brd 10.0.1.255 scope global noprefixroute eth1 ...
Torのインストールと設定
インストール
EPELからインストールする
# yum -y install epel-release # yum -y install tor
バージョン確認
ソフトウェア要件を満たしているか確認する
※Tor >= 0.2.0.1-alpha
# rpm -qa tor tor-0.3.5.12-1.el7.x86_64
設定
設定を4行追記する
上2行は.onionドメイン宛ての通信に関する設定、下2行はネットワーク通信とDNSでTorが使用するポートの設定
# vi /etc/tor/torc ... VirtualAddrNetworkIPv4 10.192.0.0/10 AutomapHostsOnResolve 1 TransPort 10.0.1.4:9040 DNSPort 10.0.1.4:5353
起動
# systemctl enable tor # systemctl start tor # ss -anp | grep -e 5353 -e 9040 udp UNCONN 0 0 10.0.1.4:5353 *:* users:(("tor",pid=1168,fd=7)) tcp LISTEN 0 128 10.0.1.4:9040 *:* users:(("tor",pid=1168,fd=8))
iptablesのインストールと設定
インストール
# yum -y install iptables-services
バージョン確認
ソフトウェア要件を満たしているか確認する
※iptables >= 1.3.5
# rpm -qa iptables* iptables-services-1.4.21-35.el7.x86_64 iptables-1.4.21-35.el7.x86_64
起動
firewalldを停止して、iptablesを起動する
# systemctl disable firewalld # systemctl stop firewalld # systemctl enable iptables # systemctl start iptables
設定
設定を全部消して、TCPとDNSの通信をeth1からTorに転送する設定を入れる
# _trans_port="9040" # _inc_if="eth1" # iptables -F # iptables -F -t nat # iptables -t nat -A PREROUTING -i $_inc_if -p udp --dport 53 -j REDIRECT --to-ports 5353 # iptables -t nat -A PREROUTING -i $_inc_if -p udp --dport 5353 -j REDIRECT --to-ports 5353 # iptables -t nat -A PREROUTING -i $_inc_if -p tcp --syn -j REDIRECT --to-ports $_trans_port
設定を確認し保存する
# iptables-save ... *nat ... -A PREROUTING -i eth1 -p udp -m udp --dport 53 -j REDIRECT --to-ports 5353 -A PREROUTING -i eth1 -p udp -m udp --dport 5353 -j REDIRECT --to-ports 5353 -A PREROUTING -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040 COMMIT ... # iptables-save > /etc/sysconfig/iptables