iptables --uid-owner para acessar vários sevidores ssh.

1. iptables --uid-owner para acessar vários sevidores ssh.

ImCylon
ImCylon

(usa Slackware)

Enviado em 28/07/2013 - 02:10h

Olá todos,
a questão é: quero acessar mais de um servidor ssh, por exemplo:
server_ssh01 -> ssh -f -C2qTnN -D 127.0.0.1:1080 user@xxx.xxx.xxx.xxx
server_ssh02 -> ssh -f -C2qTnN -D 127.0.0.1:1081 user@xxx.xxx.xxx.xxx
dai então o programa X acessaria server01 e programa Y acessaria server 02.
É claro que a solução trivial seria socks4-5, contudo os programas que eu tive acesso- tsocks, torsocks, proxyschains - todos apresentaram problemas de conexão. Pelo que li suspeito que o problema seja com "statically linked executables" ou "asynchronous".
Segue a analise resumida dos pacotes com wireshark:
Sem uso de socks e sem ssh:
SOURCE_________________DESTINATION____________PROTOCOL________INFO
192.168.1.4______________XXX.XXX.XX.X______________TCP_____________PORT_A > PORT_B [SYN]...
XXX.XXX.XX.X_____________192.168.1.4_______________TCP_____________PORT_B > PORT_A [SYN,ACK]...
192.168.1.4______________XXX.XXX.XX.X______________TCP_____________PORT_A > PORT_B [ACK]...
192.168.1.4______________XXX.XXX.XX.X______________TCP_____________PORT_A > PORT_B [PSH,ACK]...
XXX.XXX.XX.X_____________192.168.1.4_______________TCP_____________PORT_B > PORT_A [PSH,ACK]...
192.168.1.4______________XXX.XXX.XX.X______________TCP_____________PORT_A > PORT_B [ACK]...
192.168.1.4______________192.168.1.101_____________TCP_____________PORT_A > PORT_C [SYN]...
192.168.1.101____________192.168.1.4_______________TCP_____________PORT_C > PORT_C [SYN,ACK]...
E assim segue até se conectar definitivamente com o XXX.XXX.XX.X

Com o uso de socks+ssh fica a assim (server_ssh01=YYY.YYY.YYY.YYY):
SOURCE_________________DESTINATION____________PROTOCOL__________INFO
192.168.1.4______________YYY.YYY.YYY.YYY___________SSH_____________Encrypted request packet
YYY.YYY.YYY.YYY__________192.168.1.4_______________TCP_____________ssh > PORT_D [ACK]
YYY.YYY.YYY.YYY__________192.168.1.4_______________SSH_____________Encrypted response
192.168.1.4______________YYY.YYY.YYY.YYY___________SSH_____________Encrypted request packet
YYY.YYY.YYY.YYY__________192.168.1.4_______________TCP_____________ssh > 48384 [ACK]
YYY.YYY.YYY.YYY__________192.168.1.4_______________SSH_____________Encrypted response packet
192.168.1.4______________YYY.YYY.YYY.YYY___________SSH_____________Encrypted request packet
YYY.YYY.YYY.YYY__________192.168.1.4_______________TCP_____________ssh > 48384 [ACK]
Aqui a conexão fica aberta sem respostas pois a máquina 192.168.1.4 não se conecta à 192.168.1.101 que funciona como servidor via lan - OS windows XP.
Em resumo, quando executo o programa em perl ele pergunta ao servidor XXX.XXX.XXX.XXX se pode se conectar, dai o outro responde e assim vai. Nesse vai e vem de pacotes chega uma hora que a resposta requerida pelo servidor XXX.XXX.XXX.XXX está na máquina 192.168.1.101. Contudo, quando uso socks 192.168.1.4 não se conecta ao servidor via lan(192.168.1.101), bem esse é o meu problema com os socks.
Agora vamos à solução que imaginei com utilizando iptables --uid-owner.
Estava pensando em criar vários usuários e executar o perl, por exemplo, userPERL01, dai neste usuário daria para colocar um regra com: iptables --uid-owner userPERL01, mas não entendo nada de iptables. Fiz várias tentativas sem sucesso, mas acredito que a mais próxima foi:

#iptables -t nat -A OUTPUT -p tcp -mowner --uid-owner userPERL01 -j REDIRECT --dport 1080

Obrigado.


  


2. Re: iptables --uid-owner para acessar vários sevidores ssh.

Pedro
px

(usa Debian)

Enviado em 07/08/2013 - 10:12h

Interessante, você possui acesso aos servidores ssh, se sim poderia tentar habilitar o Forward entre eles, o seu pacote deve estar perdido no firewall...






---
Atenciosamente, Pedro.

Já leu meu último artigo?
LINK:
http://www.vivaolinux.com.br/artigos/userview.php?login=px

Dúvidas?! pergunte pra caixinha... ali em cima ---------------------------------------------------------------------------------------------------------------------------------------^

E seja feliz!


3. PX

ImCylon
ImCylon

(usa Slackware)

Enviado em 08/08/2013 - 02:43h

PX: não tenho acesso para mudar as configuração do servidor ssh.
Eu tentei,
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner user01 -m tcp --syn -j REDIRECT --to-ports 9040
iptables -t filter -A OUTPUT -p tcp -m owner --uid-owner user01 -m tcp --dport 9040 -j ACCEPT

Mas o tráfego ssh não é redirecionado, na verdade não há saída alguma. sinto que estou fazendo algo muito estúpido o.O





4. Re: iptables --uid-owner para acessar vários sevidores ssh.

Buckminster
Buckminster

(usa Debian)

Enviado em 08/08/2013 - 06:56h

SaritaAmidamaru escreveu:

PX: não tenho acesso para mudar as configuração do servidor ssh.
Eu tentei,
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner user01 -m tcp --syn -j REDIRECT --to-ports 9040
iptables -t filter -A OUTPUT -p tcp -m owner --uid-owner user01 -m tcp --dport 9040 -j ACCEPT

Mas o tráfego ssh não é redirecionado, na verdade não há saída alguma. sinto que estou fazendo algo muito estúpido o.O




owner :: Este módulo tenta combinar várias características do criador do pacote, para pacotes gerados localmente. É válido apenas nas chains OUTPUT e POSTROUTING.

Pacotes enviados não têm qualquer socket associado a eles. Pacotes de threads do kernel têm um soquete, mas geralmente não proprietário: [!] --uid-owner username
[!] --uid-owner userid[-userid] :: Combina se a estrutura do socket de pacotes de arquivos (se tiver uma) é de propriedade do usuário fornecido. Você também pode especificar um uid numérico ou um intervalo uid.
[!] --gid-owner groupname
[!] --gid-owner groupid[-groupid] :: Combina se a estrutura do socket para um pacote de arquivos é de propriedade de um grupo determinado. Você também pode especificar um gid numérico ou um intervalo gid.
[!] --socket-exists :: Combina se o pacote é associado com um soquete.

Nota do tradutor: O módulo "owner" só examina pacotes que possuem detalhes suficientes no cabeçalho, pacotes que não possuem detalhes suficientes de cabeçalho nunca serão conferidos!

iptables -A OUTPUT -m owner --gid-owner 1 -p udp -j DROP :: Esta regra rejeita conexões indo para portas UDP de pacotes criados pelos usuários pertencentes ao grupo 1.

E não esqueça de levantar o módulo para garantir:
modprobe ipt_owner

Veja o manual traduzido do Iptables:
http://www.vivaolinux.com.br/artigo/Manual-do-IPtables-Comentarios-e-sugestoes-de-regras/?pagina=1

Você poderia fazer assim, são somente sugestões.
Nas duas regras abaixo estou direcionando e liberando a porta 22 (do SSH) na conexão com a internet (eth0) para o micro 192.168.1.2 da rede local. Se o servidor SSH fica na rede interna também é só adaptar os IPs e omitir a placa de rede. No lugar do IP você pode colocar o endereço da rede (192.168.1.0/24) para direcionar para todos. Você não precisa colocar a interface de rede na regra se não quiser.
Você pode criar essas duas regras para cada IP que você quiser liberar. Se forem muitas máquinas com IPs intercalados dará um pouco de trabalho.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 192.168.1.2
iptables -A FORWARD -p tcp -i eth0 --dport 22 -d 192.168.1.2 -j ACCEPT

Você pode especificar também um range de IPs:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 192.168.1.2-192.168.1.50
iptables -A FORWARD -p tcp -i eth0 --dport 22 -d 192.168.1.2-192.168.1.50 -j ACCEPT


Ou você pode fazer assim também para cada servidor SSH com cada IP que você quer:
iptables -t nat -A PREROUNTING -p tcp --dport 22 -s ip_do_SSH -j DNAT --to-dest ip_cliente:porta



5. Re: iptables --uid-owner para acessar vários sevidores ssh.

ImCylon
ImCylon

(usa Slackware)

Enviado em 09/08/2013 - 16:07h

Buckminster, você foi muito esclarecedor, mas o problema é o seguinte.
Imagine que eu me conecte a dois servidores que vou chamar de: server_ssh1 e server_ssh2. Agora eu quero executar perl, programa.pl, no server_ssh1 e o mesmo perl, programa.pl, no server_ssh2, lembrando que não posso usar socks para direcionar os perl, pois neste programa tem links estáticos que não são executados pelos socks. O programa se comunica perfeitamente via ssh com o server_ssh1(servidor externo) até o momento que aparece o link estático. Este link estático deveria acessar uma maquina na rede local, mas isso não acontece, pois existe um bug(descrição do bug no final do post). Então, na verdade eu queria usar o iptables com uma espécie de socks que definisse a porta a ser utilizado com base no dono do processo --uid-owner. Exemplo:
perl via server_ssh1
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner user01 -m tcp --syn -j REDIRECT --to-ports 9040
iptables -t filter -A OUTPUT -p tcp -m owner --uid-owner user01 -m tcp --dport 9040 -j ACCEPT
perl via ssh server_ssh2
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner user02 -m tcp --syn -j REDIRECT --to-ports 9040
iptables -t filter -A OUTPUT -p tcp -m owner --uid-owner user02 -m tcp --dport 9041 -j ACCEPT
Mas já entendi que ssh por esse método não é possível, então a pergunta é: haveria outro método?


BUG: Tsocks uses ELF dynamic loader features to intercept dynamic function calls from programs in which it is embedded. As a result, it cannot trace the actions of statically linked executables, non-ELF executables, or executables that make system calls directly with the system call trap or through the syscall() routine.

PS.: Este bug não ocorre somente no tsocks, eu tentei: torsocks, dante, tsocks, proxychains. Todos apresentam o mesmo problema.

Obrigado pela atenção.


6. Re: iptables --uid-owner para acessar vários sevidores ssh.

ImCylon
ImCylon

(usa Slackware)

Enviado em 10/08/2013 - 03:36h

Perdão pelo flood, mas me ocorreu que uma abordagem mais simples do problema talvez seja melhor que toda essa informação que estou passando.
Resumindo, quero que todo o tráfego de um usuário seja direcionado para um servidor via ssh (externo) com exceção do tráfego da rede local.

Obrigado e perdão pelo flood.


7. Re: iptables --uid-owner para acessar vários sevidores ssh.

Buckminster
Buckminster

(usa Debian)

Enviado em 10/08/2013 - 04:52h

iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner user01 -m tcp --syn -j REDIRECT --to-ports 9040 << aqui não tem o 's' em --to-ports, o certo é --to-port 9040.
iptables -t filter -A OUTPUT -p tcp -m owner --uid-owner user01 -m tcp --dport 9040 -j ACCEPT perl via ssh server_ssh2
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner user02 -m tcp --syn -j REDIRECT --to-ports 9040
iptables -t filter -A OUTPUT -p tcp -m owner --uid-owner user02 -m tcp --dport 9041 -j ACCEPT

E deixa eu ver se eu entendi: você quer executar somente aqueles programas nos server1 e 2 que são servidores externos (estão fora da tua rede), mas ao mesmo tempo quer que o usuário continue acessando a rede interna também... é isso?


8. Re: iptables --uid-owner para acessar vários sevidores ssh.

ImCylon
ImCylon

(usa Slackware)

Enviado em 10/08/2013 - 05:51h

Buckminster, exatamente isso.
o servidor de destino (não o servidor de ssh) tem limite de ip, então o uso o ssh para tunelamento e mudar meu ip real, por esse motivo não posso usar um único servidor ssh. Você pode imaginar com se eu quisesse tunelar 2 firefox para obter ips diferentes. O problema que o programa é em perl e contém vários escutáveis estáticos(não conecta por socks). Como se não bastasse o servidor destino precisa que uma autentificação que só é gerada no windows, por esse motivo o user01 precisa de acesso direto a rede interna onde está meu windows.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts