Shell

Firejail 無法通過 socks5 SSH 隧道工作

  • March 7, 2020

我有一個 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 強制特定使用者(test-user)預設使用這個新命名空間,方法是設置/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 地址。

我遇到的問題是嘗試使用 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 伺服器時,我的流量不會出現在 tshark -i veth0a 中。

是否需要額外的步驟來確保埠轉發隧道也使用火獄?在 /etc/passwd 中設置 shell 是否只影響互動式登錄 shell?我是否還需要將使用者的非互動式外殼更改為/usr/bin/firejail?如果是這樣,我會怎麼做?

任何幫助將不勝感激。

您嘗試的方法行不通,我正在解釋原因。

您的 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 no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = C.UTF-8

如您所見,Local connections to LOCALHOST:10000 forwarded to remote address socks:0channel 0: new [port listener]首先發生。然後 Entering interactive session發生。這通常會呼叫firejail等,但為時已晚:之前所做的任何事情都發生在主機網路命名空間上。但實際上在您的情況下,因為您使用的是-N

-N不要執行遠端命令。這對於僅轉發埠很有用。

從來沒有執行過 shell,沒有執行firejail,也沒有接觸過備用網路命名空間。-N即使沒有如上所述,這也無關緊要。

因此,如果您真的想這樣做,您將需要一個單獨的 SOCKS5 代理,並且您不能再使用該-D選項。您可以在網路命名空間內執行sshd實例或任何其他支持 SOCKS5 的工具(例如:)並使用iptablenftables或**ssh的經典選項重定向到veth0b的 IP 和此 SOCKS5 代理的偵聽進行埠重定向埠,但這可能需要的不僅僅是火獄和普通使用者。此時,您最好從systemd執行整個設置,或者使用成熟的LXC(或LXDDockerdante-server-L等)容器。ip netns功能甚至通常就足夠了(請參閱:使用 ip netns (iproute2) 進行命名空間管理)。

引用自:https://unix.stackexchange.com/questions/571607