web-dev-qa-db-ja.com

iptablesへの変更が有効にならないのはなぜですか?

LiberteでTorをプロキシとして使用するようにOpenVPNをセットアップしようとしています。 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

通常のユーザー(anon)として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
John

これが私の考えです:

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

ルート所有のパケットは、最終的なACCEPTルールの前に表示されるため、LOGREJECTルールでトリップされています。 3行目の前に4行目を発行する必要があります。

1
LawrenceC