Por redirecionamento de porta UDP executável possível?

0

Eu tenho um programa caixa preta que ouve em uma porta UDP particular. Eu gostaria que ele ouvisse uma porta UDP de minha escolha.

Existe uma maneira de enganar o executável para ouvir em uma porta diferente. Eu posso imaginar que existe uma biblioteca que pode ser injetada com o LD_PRELOAD que pode restringir as chamadas do sistema e facilitar isso.

Uma máquina virtual, claro, é a opção pesada.

Catskul
fonte

Respostas:

2

Você pode usar o iptables para encaminhar uma porta para outra. Isso funcionará apenas para conexões externas, porque as tabelas nat que a seguinte solução usa não são consultadas quando o tráfego é local (ou seja, de 127.0.0.1 para 127.0.0.1 e assim por diante).

Isso também requer que você habilite o encaminhamento em seu kernel, o que pode ou não ser um problema de segurança que você não deseja enfrentar.

Comece ativando o encaminhamento, se já não estiver com um sysctl net.ipv4.ip_forward=1ou outro echo 1 > /proc/sys/net/ipv4/ip_forward. Neste caso você provavelmente também deve fazer todas as políticas do iptables serem DROP ao invés do padrão ACCEPT (isso depende da distribuição GNU / Linux que você usa, no entanto) e permitir apenas o tráfego que você deseja passar ao invés de deixar tudo fluir livremente .

Então você pode adicionar uma regra para a tabela PREROUTING nat para redirecionar o tráfego destinado à porta X a Y. porta Por exemplo, para redirecionar o tráfego de entrada na porta TCP 2222 para o seu porta do servidor SSH, TCP 22, use o seguinte: iptables -t nat -A PREROUTING -p tcp --dport 2222 -j REDIRECT --to-port 22.

Mais informações sobre o redirecionamento de portas e pontos mais específicos estão disponíveis em vários mecanismos de pesquisa e, por exemplo, aqui .

Sami Laine
fonte
0

Uma solução melhor é usar o netcat. Ele também funciona com conexões com o localhost, e não há necessidade de alterar o sysctl.

O truque todo é criar um named pipe,

 mkfifo mypipe

e usá-lo assim:

nc -k -l 2222 0<mypipe | nc localhost mySSHport 1>mypipe

Este exemplo foi criado para permitir que você teste este comando com o ssh. Ele redireciona as conexões ssh da porta 2222 para a porta mySSHport, seja ela qual for (22?).

Agora, se você tentar ssh na porta 2222,

 ssh me@localhost -p 2222

você estará logado.

A bandeira -kinstrui o netcat a continuar ouvindo mesmo após a conclusão da primeira conexão. Você pode melhorar sua resiliência inserindo-o em um loop while infinito:

while true; do
# echo "Listening..."
nc -k -l 2222 0<mypipe | nc localhost mySSHport 1>mypipe
done

E, claro, voltando ao OP, para as portas UDP é preciso adicionar o sinalizador -u.

Editar:

Eu acabei de perceber que em sistemas rodando a versão GNU do nc (netcat) como o Arch Linux, o comando deveria ser

 nc -l -p 2222 0<mypipe | nc localhost mySSHport 1>mypipe

Pedimos desculpas pelo inconveniente.

MariusMatutiae
fonte