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 連線連接到ocks5伺服器時,我的流量不會出現在 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) 進行命名空間管理)。

相關內容