https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy 、セクションLinux、iptables
を介したローカルリダイレクトからのサンプルルールセットに基づくTor
ルールセットを使用して、Torを設定しました透過プロキシとして。
そのルールセットを理解したと思いましたが、単純に得られない点が1つあります。それは、TCPセグメントは、SYNフラグが設定されているときにTorがリッスンするポートにのみリダイレクトされるということです。
たとえば、http://www.example.com
にアクセスしたいと思います。私のブラウザはDNS要求を実行し、対応するIPアドレスを取得して、そのアドレスにTCPセグメントを送信し、SYNフラグが設定されます。
ルールセットによると、セグメントはTorポートにリダイレクトされるため、Torはプロキシとして機能し、IPパケットをhttp://www.example.com
にルーティングし、Webサイトサーバーからブラウザに応答を返します。私のブラウザは、送信元IPがサーバーからのものであり、ACKフラグがTCPペイロードに設定されている場合にパケットを返しますよね?
したがって、私のブラウザは、SYNフラグがwww.example.comのIPアドレスに設定されなくなった次のTCPセグメントを送信します。
ただし、SYNフラグが設定されていないため、NATテーブルには対応するルールがありません。したがって、後でリダイレクトされたり、出力テーブルで受け入れられたりすることはありません。
それにもかかわらず、すべてが正常に機能しています。何が欠けているのですか?
最初のACK
の後のパケットを処理するルールは次のとおりです。
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
これは基本的に、確立されたセッションの一部であるか、それに関連するすべてのパケットを通過させることを意味します。最初のSYN
に続くマシンからのすべてのパケット(それに有効な応答があった場合)は、確立されたセッションの一部であるため、通過します。
(RELATED
は、FTPなどのプロトコルに使用されます。モジュールが有効になっている場合、「通常の」セッションには複数のTCPセッションが含まれる可能性があります。)
TorへのDNSリダイレクトも設定し、 これは正しくありません。一部のサフィックスのみがそのローカル範囲にマップされます(デフォルトではAutomapHostsOnResolve
を使用しているため、ブラウザ(およびその他のソフトウェア)に表示されるIPアドレスは、www.example.comのIPアドレスではなく、指定した範囲の仮想アドレス(10.192.0.0/10
)。.exit
および.onion
)。
以下の抜粋は、2002年から 第5章、NATへの制御 の このNATガイド の最初から抜粋したものです。
_____ _____
/ \ / \
PREROUTING -->[Routing ]----------------->POSTROUTING----->
\D-NAT/ [Decision] \S-NAT/
| ^
| |
--------> Local Process ------
"上記の各ポイントで、パケットが通過すると、関連付けられている接続が検索されます。新しい接続の場合は、NATテーブルを使用して、それをどうするかを確認します。それが与える答えは、その接続上の将来のすべてのパケットに適用されます。 "