![Firejail が socks5 SSH トンネル上で動作しない](https://rvso.com/image/168783/Firejail%20%E3%81%8C%20socks5%20SSH%20%E3%83%88%E3%83%B3%E3%83%8D%E3%83%AB%E4%B8%8A%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%AA%E3%81%84.png)
Ubuntu 18.04 サーバーがあり、2 つの仮想インターフェース ペア (veth0a と veth0b) を作成し、1 つのインターフェース (veth0b) の端を新しいネットワーク名前空間 (netns0) に割り当てました。
ip netns add netns0
ip netns exec netns0 ip link set lo up
ip link add veth0a type veth peer name veth0b
ip link set veth0b netns netns0
/usr/bin/firejail
次に、firejail を使用して、このユーザーのデフォルト シェルとして設定し、ファイルに次の内容を追加することで、特定のユーザー (test-user) がデフォルトでこの新しい名前空間を使用するように強制し/etc/firejail/login.users
ました。
test-user: --netns=netns0
これが機能することを確認するために、次のテストを実行しました。
tshark -i veth0a -f "port 443"
ルートアカウントから実行する- テストユーザーとしてサーバーにSSH接続する
curl https://1.1.1.1
SSHユーザーとして実行
tshark の出力には、1.1.1.1 トラフィックの適切な veth0b 送信元 IP アドレスが表示されます。
私が遭遇している問題は、test-user アカウントを使用して SSH 経由で socks5 動的ポート転送を確立しようとするときに発生します。
ssh -D 10000 -q -C -N test-user@server_ip
このコマンドをラップトップまたはワークステーションから実行すると、ポート 1000 にローカル socks5 サーバーを確立し、SSH 接続を介してトンネルすることができます。これをローカル socks5 プロキシとして設定して実行すると、https://api.ipify.org
プロキシが動作しており、ラップトップがサーバーの IP アドレスを使用していることが示されます。
問題は、sock5 トラフィックが適切な名前空間を通過していないように見えることです。言い換えると、テストユーザーの ssh 接続を介して socks5 サーバーに接続しながらラップトップで Web を閲覧しているときに、トラフィックが tshark -i veth0a に表示されません。
ポート転送トンネルでも firejail が使用されるようにするには、追加の手順が必要ですか? /etc/passwd のシェルの設定は、対話型ログイン シェルにのみ影響しますか? ユーザーの非対話型シェルも に変更する必要がありますか/usr/bin/firejail
? もしそうなら、どのように変更すればよいですか?
ご協力いただければ幸いです。
答え1
あなたが試みていることはうまくいかないので、その理由を説明します。
SSH接続はリモートサーバーのsshdデーモンはネットワーク名前空間ではなくホスト上で実行されます。そこで接続用のインスタンスが作成されます。次に認証が行われ、トンネルがセットアップされます。それからユーザーセッションが設定されました。
以下は、ssh クライアント バージョン 7.9p1 を使用して実行した例の抜粋ですssh -v -4 -D 10000 remoteuser@server
。
debug1: Offering public key: /home/localuser/.ssh/id_ed25519 ED25519 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
debug1: Server accepts key: /home/localuser/.ssh/id_ed25519 ED25519 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
debug1: Authentication succeeded (publickey).
Authenticated to server ([192.0.2.2]:22).
debug1: Local connections to LOCALHOST:10000 forwarded to remote address socks:0
debug1: Local forwarding listening on 127.0.0.1 port 10000.
debug1: channel 0: new [port listener]
debug1: channel 1: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = C.UTF-8
ご覧のとおり、Local connections to LOCALHOST:10000 forwarded to remote address socks:0
... がchannel 0: new [port listener]
最初に発生します。それから Entering interactive session
起こる。これは通常消防署など、それは遅すぎます。それ以前に行われたことはすべて、ホスト ネットワークの名前空間で発生します。しかし、実際には、あなたの場合は、次を使用しているためです-N
。
-N
リモート コマンドを実行しません。これはポート転送のみに便利です。
シェルは実行されません。消防署は実行されず、代替ネットワーク名前空間は変更されません。これは、-N
上で説明したように、なくても問題にはなりません。
そのため、本当にそうしたい場合は、別のSOCKS5プロキシが必要になり、この-D
オプションはもう使用できなくなります。sshdまたは他のSOCKS5対応ツール(例:dante-server
)をネットワーク名前空間内に作成し、ポートリダイレクトを行う。iptable、nftables、または古典的な-L
オプションsshリダイレクトするベス0bのIPとこのSOCKS5プロキシのリスニングポートが必要ですが、おそらくそれだけでは十分ではありません。消防署通常のユーザーです。この時点で、セットアップ全体をシステム、または本格的なルクセンブルク(または翻訳またはドッカーなど)コンテナ。ip netns
機能だけでも十分な場合が多い(参照:ip netns (iproute2) による名前空間管理)。