![为什么对 iptables 的更改没有生效?](https://linux22.com/image/1408498/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AF%B9%20iptables%20%E7%9A%84%E6%9B%B4%E6%94%B9%E6%B2%A1%E6%9C%89%E7%94%9F%E6%95%88%EF%BC%9F.png)
我正在尝试设置 OpenVPN 以在 Liberte 中使用 Tor 作为代理。当我以 root 身份运行 openvpn 时,我收到以下响应:
Tue May 13 15:15:18 2014 Attempting to establish TCP connection with 127.0.0.1:9050 [nonblock]
Tue May 13 15:15:20 2014 TCP: connecto to 127.0.0.1:9050 failed, will try again in 5 seconds: No route to host
我认为这是由于以下设置造成的:
# Tor access via SOCKS only for main user and Privoxy
iptables -A OUTPUT -o lo -p tcp -m owner --uid-owner ${luser} --syn -d 127.0.0.1 --dport 9050 -j ACCEPT
iptables -A OUTPUT -o lo -p tcp -m owner --uid-owner privoxy --syn -d 127.0.0.1 --dport 9050 -j ACCEPT
iptables -A OUTPUT -p tcp --syn -d 127.0.0.1 --dport 9050 -j LOGREJECT
因为当我尝试以普通用户(匿名)身份运行 openvpn 时,它连接没有任何问题。相反,它在稍后的执行中遇到了一些其他权限冲突。
因此我尝试运行以下命令:
iptables -A OUTPUT -o lo -p tcp -m owner --uid-owner root --syn -d 127.0.0.1 --dport 9050 -j ACCEPT
/etc/init.d/iptables save
/etc/init.d/iptables restart
当我执行 iptables -L 时,果然出现了变化。
但当我尝试运行 openvpn 时,仍然出现相同的错误。那么为什么更改不会生效?
答案1
以下是我的想法:
当您使用 添加新规则时iptables
,它会将该规则附加到链的末尾。
因此,发出该命令后,您的链条可能看起来像这样:
# Tor access via SOCKS only for main user and Privoxy
iptables -A OUTPUT -o lo -p tcp -m owner --uid-owner ${luser} --syn -d 127.0.0.1 --dport 9050 -j ACCEPT
iptables -A OUTPUT -o lo -p tcp -m owner --uid-owner privoxy --syn -d 127.0.0.1 --dport 9050 -j ACCEPT
iptables -A OUTPUT -p tcp --syn -d 127.0.0.1 --dport 9050 -j LOGREJECT
iptables -A OUTPUT -o lo -p tcp -m owner --uid-owner root --syn -d 127.0.0.1 --dport 9050 -j ACCEPT
由于 root 拥有的数据包出现在最后的 ACCEPT 规则之前,因此它在 LOGREJECT 规则中被绊倒。您需要在第 3 行之前发出第 4 行。