ポートに転送されたすべてのトラフィックにrot13(または他の暗号化)を適用します。

ポートに転送されたすべてのトラフィックにrot13(または他の暗号化)を適用します。

ばかげて聞こえますが、私の言葉を聞いてください(おそらくそれでもそうです)。

私はCS学生です。私が学んだ大学は、セキュリティという名前ですべての侵入的なSSHトラフィックとVPNトラフィックをブロックするという賢いアイデアを持っていました。その後、誰もが古い、悪用可能なOpenVPNサーバーを介してファイアウォールの背後に入るように求められます。これは私の人生を難しくします。自宅でラップサーバーにアクセスしたいです。しかし、古いOpenVPNサーバーではそうではありません。

---------------       ---------------            -----------------
| My home PC  | --->  | Firewall    |   -X--->   | Lab server    |
---------------       ---------------            -----------------

すべてが私にとっては愚かなように聞こえます。 (誰かがデフォルトのパスワードを使用する方が大きな問題だと思います。とにかく)。私はファイアウォールがどれほど強いかを調べることにしました。それから私は見つけました。暗号化私の交通手段は通過するロット13ファイアウォールをだますのに十分です。

---------------                   ---------------                         -----------------
| My home PC  |->| rot13 | --->  | Firewall     |   ----->  | rot13 | ->  | Lab server    |
---------------                   ---------------                         -----------------

私の概念の証明は次のとおりです。

# Client side:
nc -l -p 2222 | rot13 | nc my_server_ip 2222
# server side:
nc -l -p 2222 -s my_server_ip | rot13 | nc localhost 22

。に接続すると、localhost 2222これは一方向リンクであるため、ハンドシェイクは完了しません。 (これをハンドシェイクなしで到着しないハンドシェイクパケットと比較してくださいrot13。)

問題は、これが暗号化された一方向リンクであることです。どのように双方向にすることができますか?これまで、パイプを介してiptables間でデータ転送を試みましたrot13。しかし、私はできません。

ノート

  1. obfsproxy私は簡単になるので、このようにプロキシを台無しにすることは考慮しません。重い武器を使いたくありません。
  2. ROT13はファイアウォールを迂回するためだけに使用されます。弱いことを知っています。
  3. 「まあ…私はこれを行うことができますか?」という質問です。 「これは必ずしなければならないのですか?」ではありません。

答え1

socatすべきこと。

これsocatこのツールは、すべてのコンテンツをどこからでも(双方向)ストリーミングする必要があるすべての要件を満たします。一対のパラメーターのみを使用し、各パラメーターは一緒にリンクする1つの項目を指定します。この場合、最も興味深いオプションはTCP:host:portおよびTCP-LISTEN:portまたはFD:ですOPEN:。各引数は、別々の引数のペアで構成することもできます。!!ここで、最初の要素を読み取り、別の要素を書き込みます。

したがって、ベースの例の最小拡張はnc次のようになります。

サービス端末:

mkfifo in in_rot out out_rot
rot13 < in > in_rot &
rot13 < out > out_rot &
socat TCP:localhost:22 OPEN:in_rot!!OPEN:out &
socat TCP-LISTEN:2222 OPEN:out_rot!!OPEN:in &

名前付きFIFOを削除してFD:Bashに設定されているパイプを参照するために使用することで、これを簡素化できます。

作成したとおり、これは単一の使用にのみ適しています(socat接続が閉じられると終了します)。無限ループでそれを実行したり、システム.socketデバイスまたはxinetdユーザーの話を聞いたり、接続時にこのスクリプトを生成したりするのと同じように設定できます。

クライアントは非常に似た方法で実行できます(一部のローカルポートでリッスンし、2222でサーバーに接続します)。あるいは、TCP-LISTEN部分を省略し、代わりにジョブ全体をfrom ProxyCommand(from)として実行することもできますssh.ssh/configトンネルがないかのようにsshを使用しています)。

単純なSSH接続以上のトンネルを作成したい場合は、実際のVPNに簡単に切り替えるための完全なトンネルインターフェイスを提供するオプションもあることsocatに注意してください。TUN:

関連情報