Firejail이 양말5 SSH 터널을 통해 작동하지 않음

Firejail이 양말5 SSH 터널을 통해 작동하지 않음

두 개의 가상 인터페이스 쌍(veth0a 및 veth0b)을 생성하고 한 인터페이스(veth0b)의 끝을 새 네트워크 네임스페이스(netns0)에 할당한 Ubuntu 18.04 서버가 있습니다.

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에 다음을 추가하여 기본적으로 이 새 네임스페이스를 사용하도록 강제했습니다./etc/firejail/login.users

test-user: --netns=netns0

작동하는지 확인하기 위해 다음 테스트를 실행했습니다.

  1. tshark -i veth0a -f "port 443"루트 계정에서 실행
  2. 테스트 사용자로 SSH를 통해 서버에 연결
  3. curl https://1.1.1.1SSH 사용자로 실행

tshark 출력에는 1.1.1.1 트래픽에 대한 올바른 veth0b 소스 IP 주소가 표시됩니다.

내가 겪고 있는 문제는 테스트 사용자 계정을 사용하여 SSH를 통해 Socks 5 동적 포트 전달을 설정하려고 할 때입니다.

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

내 노트북이나 워크스테이션에서 이 명령을 실행하면 포트 1000에 로컬 ocks5 서버를 설정하고 SSH 연결을 통해 터널링할 수 있습니다. 내 로컬 양말5 프록시로 설정하고 https://api.ipify.org프록시가 작동하고 내 노트북이 서버의 IP 주소를 사용하고 있음을 시연합니다.

문제는 sock5 트래픽이 올바른 네임스페이스를 통과하지 않는 것 같다는 것입니다. 즉, 내 노트북에서 웹을 검색하고 테스트 사용자 SSH 연결을 통해 Socks 5 서버에 연결할 때 내 트래픽이 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) 네트워크 네임스페이스 내에서 포트 리디렉션을 사용하려면IP 테이블,nftables또는 클래식 -L옵션SSH리디렉션veth0b이 SOCKS5 프록시의 IP 및 수신 포트. 그러나 이를 위해서는 다음 이상이 필요할 수 있습니다.화재 감옥그리고 일반 사용자. 이 시점에서는 다음에서 전체 설정을 실행하는 것이 좋습니다.체계, 또는 성숙한LXC(또는LXD또는루스트어바웃등) 컨테이너. ip netns일반적으로 이 목적에는 기능만으로 충분합니다(참조:네임스페이스 관리를 위해 ip netns(iproute2) 사용).

관련 정보