我如何使用iptables来限制在Tor中的.onion地址的访问?

我想限制传出networking访问(除了到本地主机的连接)到TCP和UDP通过Tor,并阻止其他所有东西(除了Tor应用程序和本地主机连接)。 目标是将用户限制为localhost*.onion地址,为此Tor创build一个虚拟地址networking10.192.0.0/10(使用torrc文件中的VirtualAddrNetwork选项)。

这里是我目前的iptables-save:

 *mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT *nat :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A OUTPUT -d 10.192.0.0/10 -p tcp -j REDIRECT --to-ports 9040 -A OUTPUT ! -o lo -p tcp -m tcp -m owner ! --uid-owner debian-tor -j REDIRECT --to-ports 9040 -A OUTPUT ! -o lo -p udp -m udp --dport 53 -m owner ! --uid-owner debian-tor -j REDIRECT --to-ports 53 COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A OUTPUT -m owner --uid-owner debian-tor -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 9040 -j ACCEPT -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT ! -o lo -j DROP -A OUTPUT -p icmp -j REJECT --reject-with icmp-port-unreachable COMMIT 

我试着在*filter的开头添加这个,在其余的规则之前,但是所有的连接都失败了:

 -A OUTPUT -o lo -j ACCEPT -A OUTPUT ! -d 10.192.0.0/10 -m owner ! --uid-owner debian-tor -j REJECT 

为什么上面的代码中的第二行阻止所有的stream量? 什么是适当的规则如下:

  • 允许所有传入
  • 允许所有传出到本地主机
  • 允许由debian-tor用户发起的所有传出
  • 将所有由debian-tor启动的外出UDP 53redirect到本地主机53
  • 将所有不是由debian-tor启动的传出TCP和UDPredirect到本地主机9040
  • 阻止其他一切