Firejail 无法通过socks5 SSH 隧道工作

Firejail 无法通过socks5 SSH 隧道工作

我有一台 Ubuntu 18.04 服务器,在其中创建了两个虚拟接口对 (veth0a 和 veth0b),并将一个接口 (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

然后,我使用 firejail 强制特定用户(测试用户)默认使用这个新的命名空间,方法是设置/usr/bin/firejail为该用户的默认 shell 并将以下内容添加到/etc/firejail/login.users文件中:

test-user: --netns=netns0

我运行了以下测试以确保其有效:

  1. tshark -i veth0a -f "port 443"从 root 帐户运行
  2. 以测试用户身份通过​​ SSH 连接到服务器
  3. curl https://1.1.1.1以 SSH 用户身份运行

tshark 输出显示 1.1.1.1 流量的正确 veth0b 源 IP 地址。

我遇到的问题是当尝试使用测试用户帐户通过 SSH 建立袜子5动态端口转发时:

ssh -D 10000 -q -C -N test-user@server_ip

从我的笔记本电脑或工作站运行此命令可以让我在端口 1000 上建立本地ocks5 服务器并通过 SSH 连接建立隧道。将其设置为我的本地socks5代理并演示https://api.ipify.org代理正在工作并且我的笔记本电脑正在使用服务器的IP地址。

问题是 sock5 流量似乎没有通过正确的命名空间。换句话说,当我的笔记本电脑上浏览网页并通过测试用户 ssh 连接连接到袜子5服务器时,我的流量不会出现在 tshark -i veth0a 中。

是否需要执行额外的步骤来确保端口转发隧道也使用 firejail?在 /etc/passwd 中设置 shell 是否仅影响交互式登录 shell?我是否还需要将用户的非交互式 shell 更改为/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不要执行远程命令。这对于转发端口很有用。

没有 shell 运行过,消防监狱不运行,也没有触及任何备用网络命名空间。即使没有上面的解释,这也没关系-N

因此,如果您确实想这样做,您将需要一个单独的 SOCKS5 代理,并且您不能再使用该-D选项。您可以运行一个实例sshd或任何其他支持 SOCKS5 的工具(例如:dante-server)在网络命名空间内并进行端口重定向,使用ip表,nftables,或者经典-L选项SSH重定向到veth0b的 IP 和该 SOCKS5 代理的侦听端口,但这可能需要的不仅仅是消防监狱和普通用户。此时您最好从以下位置运行整个设置系统,或与一个成熟的LXC(或者LXD或者码头工人等)容器。ip netns功能通常足以满足此目的(请参阅:使用 ip netns (iproute2) 进行命名空间管理)。

相关内容