![Firejail 無法透過socks5 SSH 隧道工作](https://rvso.com/image/168783/Firejail%20%E7%84%A1%E6%B3%95%E9%80%8F%E9%81%8Esocks5%20SSH%20%E9%9A%A7%E9%81%93%E5%B7%A5%E4%BD%9C.png)
我有一台 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
我運行了以下測試以確保其有效:
tshark -i veth0a -f "port 443"
從 root 帳戶運行- 以測試用戶身份透過 SSH 連接到伺服器
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) 進行命名空間管理)。