よく知られているが安全でないメソッドはtorify
を使用することです。アプリケーションにTorを強制するのではなく、使用するようにaskするため、安全ではありません。アプリケーションが誤動作したり、バグによって説明されたりした場合でも、Tor以外の接続を外部に行うことができます。
一方、Firejailは、分離されたカーネル名前空間、seccompフィルター、および重要なことを提供することにより、アプリケーションをサンドボックスできるセキュリティツールです。カスタムネットワークスタック。
だからFirejailに供給することができるTorのみのネットワークインターフェースを作成するにはどうすればよいですか? Firejailのドキュメントによると、ブリッジネットワークインターフェイスを受け入れます。
Firejailは、新しいTCP/IPネットワークスタックをサンドボックスに接続できます。新しいスタックには、独自のルーティングテーブル、ファイアウォール、および一連のインターフェイスが付属しています。これは、ホストネットワークスタックから完全に独立しています。
- 新しいインターフェイスの作成– Linuxカーネルのmacvlanおよびブリッジデバイスが作成され、サンドボックスに自動的に移動されます。
- 既存のインターフェイスを移動する–既存のインターフェイスをサンドボックス内に移動できます。インターフェイス設定は保持されます。
Tor HOWTOを使用したFirejail https://www.void.gr/kargig/blog/2016/12/12/firejail-with-tor-howto/
上記の記事で概説したようにtorが機能することを確認できませんが、同じアプローチ(つまり、socks5ポート)を使用したssh転送は正常に機能します。
firejailサポート--netnsフラグとして別のソリューションを実装しました。 Torのみを介してインターネットに到達できるネットワーク名前空間内にfirejailをバインドするための手順は、次のとおりです。
# configure tor with this configuration
AutomapHostsOnResolve 1
TransPort 9040
TransListenAddress 10.0.0.1
DNSPort 5354
DNSListenAddress 10.0.0.1
SOCKSPort 0
その後..
# create a new network namespace named torjail
ip netns add torjail
# create two virtual ethernet interface
ip link add out-torjail type veth peer name in-torjail
# bind one interface to torjail network namespace
ip link set in-torjail netns torjail
# set interfaces ip and default routing
ip addr add 10.0.0.1/24 dev out-torjail
ip link set out-torjail up
ip netns exec torjail ip addr add 10.0.0.2/24 dev in-torjail
ip netns exec torjail ip link set in-torjail up
ip netns exec torjail ip route add default via 10.0.0.1
# forward all dns traffic to tor DNSPort
iptables -t nat -A PREROUTING -i out-torjail -p udp -d 10.0.0.1 --dport 53 -j DNAT --to-destination 10.0.0.1:5354
# forward all traffic to tor TransPort
iptables -t nat -A PREROUTING -i out-torjail -p tcp --syn -j DNAT --to-destination 10.0.0.1:9040
# accept established connection
iptables -A OUTPUT -m state -o out-torjail --state ESTABLISHED,RELATED -j ACCEPT
# accept only forwarded traffic
iptables -A INPUT -i out-torjail -p udp --destination 10.0.0.1 --dport 5354 -j ACCEPT
iptables -A INPUT -i out-torjail -p tcp --destination 10.0.0.1 --dport 9040 -j ACCEPT
iptables -A INPUT -i out-torjail -p udp --destination 10.0.0.1 --dport 9040 -j ACCEPT
iptables -A INPUT -i out-torjail -j DROP
# finally run firejail within torjail namespace
firejail --dns=10.0.0.1 --netns=torjail $YOUR_ANONYMOUS_COMMAND_HERE
このメソッドをtorjail
に実装して、簡単に使用できるようにしました。以下をご覧ください。