Firejail não funciona no túnel SSH Socks5

Firejail não funciona no túnel SSH Socks5

Eu tenho um servidor Ubuntu 18.04 no qual criei dois pares de interfaces virtuais (veth0a e veth0b) e atribuí o final de uma interface (veth0b) a um novo namespace de rede (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

Em seguida, usei o firejail para forçar um usuário específico (usuário de teste) a usar esse novo namespace por padrão, definindo /usr/bin/firejailcomo o shell padrão para esse usuário e adicionando o seguinte ao /etc/firejail/login.usersarquivo:

test-user: --netns=netns0

Executei o seguinte teste para ter certeza de que funciona:

  1. Execute tshark -i veth0a -f "port 443"a partir da conta root
  2. SSH no servidor como usuário de teste
  3. Execute curl https://1.1.1.1como usuário SSH

A saída tshark mostra o endereço IP de origem veth0b adequado para o tráfego 1.1.1.1.

O problema que estou enfrentando é ao tentar usar a conta de usuário de teste para estabelecer o encaminhamento de porta dinâmico Socks5 por SSH:

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

Executar este comando em meu laptop ou estação de trabalho me permite estabelecer um servidor Socks5 local na porta 1000 e tunelá-lo pela conexão SSH. Definir isso como meu proxy Socks5 local e demonstrar https://api.ipify.orgque o proxy está funcionando e que meu laptop está usando o endereço IP do servidor.

O problema é que o tráfego sock5 não parece estar passando pelo namespace adequado. Em outras palavras, enquanto navego na web em meu laptop enquanto estou conectado ao servidor Socks5 pela conexão SSH do usuário de teste, meu tráfego não aparece em tshark -i veth0a.

É necessária uma etapa adicional para garantir que o túnel de encaminhamento de porta também use firejail? A configuração do shell em /etc/passwd afeta apenas um shell de login interativo? Preciso também alterar o shell não interativo do usuário para /usr/bin/firejail? Se sim, como eu faria isso?

Qualquer ajuda seria muito apreciada.

Responder1

O que você está tentando não funciona e estou explicando o porquê.

Sua conexão ssh se conecta ao servidor remotosshddaemon, que está sendo executado no host, não no namespace da rede. Lá é criada uma instância para sua conexão. Então você está autenticado, os túneis são configurados,entãosua sessão de usuário está configurada.

Aqui está um trecho de um exemplo executado com um cliente ssh versão 7.9p1 usando 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

Como você pode ver, Local connections to LOCALHOST:10000 forwarded to remote address socks:0... channel 0: new [port listener]acontece primeiro.Então Entering interactive sessionacontece. Isso normalmente chamariaprisão de fogoetc., e seria tarde demais: tudo o que for feito antes acontece no namespace da rede host. Mas, na verdade, no seu caso, já que você está usando -N:

-NNão execute um comando remoto. Isso é útil apenas para encaminhar portas.

nenhum shell é executado,prisão de fogonão é executado e nenhum namespace de rede alternativo é tocado. De qualquer forma, isso não importaria, mesmo sem -No explicado acima.

Então, se você realmente quiser fazer isso, precisará de um proxy SOCKS5 separado e não poderá -Dmais usar a opção. Você pode executar uma instância desshdou qualquer outra ferramenta compatível com SOCKS5 (por exemplo:dante-server) dentro do namespace da rede e faça redirecionamentos de porta, usandotabela de ip,nftáveis, ou a -Lopção clássica desshredirecionar paraveth0b's IP e a porta de escuta deste proxy SOCKS5, mas isso provavelmente exigirá mais do que apenasprisão de fogoe um usuário normal. Neste ponto é melhor você executar toda a configuração desdesistema, ou com um completoLXC(ouLXDouDockeretc.) recipiente. ip netnsrecursos são muitas vezes suficientes para isso (veja:Gerenciamento de namespace com ip netns (iproute2)).

informação relacionada