我怎样才能阻止所有的stream量*除了Tor?

在Linux系统上,除非通过Tornetworking,否则有阻止所有进出stream量的方法。 这包括任何forms的IP通信,而不仅仅是TCP连接。 例如,我想让UDP完全被阻塞,因为它不能通过Tor。 我想这个系统的互联网使用是完全匿名的,我不希望任何应用程序泄漏。

我意识到这可能是复杂的,因为Tor本身需要以某种方式与中继节点通信。

用iptables足够简单。 它可以有与特定用户相匹配的规则,并且您应该已经设置了tor在自己的用户ID下运行; deb和rpm包,主要的Linux发行版和Tor项目已经为Torbuild立了一个用户。

完整的示例,可用的iptables和Torconfiguration如下。 这个防火墙可以用iptables-restore命令加载。 此configuration的最终结果将透明地将源自主机或通过主机转发的所有stream量路由到Tor,而无需configuration代理。 这个configuration应该是防漏的; 尽pipe你当然应该彻底地testing它。

请注意,tor用户的uid(这里是998 )由iptables以数字forms存储。 在这里出现的每个地方replace你的tor用户的正确的uid。

还需要注意的是,主机的IP地址需要在第一条规则中给出,以支持直接连接到主机的传入的clearnet和LANstream量(这里显示为198.51.100.212 )。 如果您有多个IP地址,请为每个地址重复规则。

 *nat :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A PREROUTING -d 198.51.100.212/32 -j RETURN -A PREROUTING -p udp -m udp --dport 53 -j REDIRECT --to-ports 53 -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 49151 -A OUTPUT -o lo -j RETURN -A OUTPUT -m owner --uid-owner 998 -j RETURN -A OUTPUT -p udp -m udp --dport 53 -j REDIRECT --to-ports 53 -A OUTPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 49151 COMMIT *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp -d 127.0.0.1 --dport 22 -j ACCEPT -A INPUT -j LOG --log-prefix "IPv4 REJECT INPUT: " -A FORWARD -j LOG --log-prefix "IPv4 REJECT FORWARD: " -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A OUTPUT -d 127.0.0.1/32 -p udp -m udp --dport 53 -j ACCEPT -A OUTPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 49151 -j ACCEPT -A OUTPUT -m owner --uid-owner 998 -m conntrack --ctstate NEW -j ACCEPT -A OUTPUT -j LOG --log-prefix "IPv4 REJECT OUTPUT: " COMMIT 

ssh INPUT规则只允许通过本地主机到达的连接,即Tor隐藏服务。 如果您还希望允许通过clearnet传入ssh连接,请删除-d 127.0.0.1

相应的torrc文件是:

 User toranon SOCKSPort 9050 DNSPort 53 TransPort 49151 AutomapHostsOnResolve 1 

这种configuration要求主机有一个静态的IP地址。 对于预期的用例,您可能已经计划使用静态IP地址。

最后,输出!

 [root@unknown ~]# curl ifconfig.me 31.31.73.71 [root@unknown ~]# host 31.31.73.71 71.73.31.31.in-addr.arpa domain name pointer cronix.sk. [root@unknown ~]# curl ifconfig.me 178.20.55.16 [root@unknown ~]# host 178.20.55.16 16.55.20.178.in-addr.arpa domain name pointer marcuse-1.nos-oignons.net.