![如何创建适合 Firejail 的仅 Tor 网络接口?](https://linux22.com/image/1490999/%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E9%80%82%E5%90%88%20Firejail%20%E7%9A%84%E4%BB%85%20Tor%20%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3%EF%BC%9F.png)
众所周知,但不安全方法是使用torify
。这是不安全的,因为我们问允许应用程序使用 Tor,而不是强迫它使用。如果应用程序出现故障或被错误破坏,它仍然允许与外界建立非 Tor 连接。
另一方面,Firejail 是一款安全工具,可让你沙箱 应用程序,为它们提供一个独立的内核命名空间、seccomp 过滤器,以及最重要的自定义网络堆栈。
所以,如何创建可以馈送到 Firejail 的 Tor 专用网络接口根据 Firejail 文档,它接受任何桥接网络接口:
Firejail 可以将新的 TCP/IP 网络堆栈附加到沙箱。新堆栈带有自己的路由表、防火墙和一组接口。它完全独立于主机网络堆栈。
- 创建新接口 – Linux 内核 macvlan 和桥接设备在沙箱中自动创建并移动。
- 移动现有接口 – 现有接口可在沙箱内移动。接口配置将保留。
答案1
Firejail 与 Tor 的使用方法 https://www.void.gr/kargig/blog/2016/12/12/firejail-with-tor-howto/
我无法验证 tor 是否能按照上述文章中概述的方式工作,但是使用相同方法(即 socks5 端口)的 ssh 转发可以正常工作。
答案2
我们已经实现了另一个解决方案作为 firejail 支持--netns 标志。为了将 firejail 绑定在只能通过 tor 访问互联网的网络命名空间内,步骤如下:
# 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
简单用法,请看一下:
https://torjail.github.io
https://github.com/torjail/torjail