Archive for the ‘iptables’ tag
usando ssh para criar um tunel reverso
Semana passada estavamos (eu e meus amigos de irc) tentando ajudar um colega que estava com um determinado problema. Como ele estava utilizando uma máquina atrás de um firewall e ele não tinha acesso para fazer qualquer redirecionamento para esta máquina, falamos para ele criar um tunel reverso com ssh para conectarmos na máquina que ele estava e poder ajudá-lo com o problema que ele enfrentava.
Baseado no relato acima, vamos supor que tenho um servidor remoto cujo ip é 187.10.223.67, que a porta do ssh é a 22 (padrão) e que meu usuário remoto é but3k4, iremos utilizar as seguintes opções do ssh:
C - usa compactação de todos os dados que serão trafegados, muito útil para economizar banda. N - não executa comandos no servidor remoto, portanto o usuário não precisa ter shell. f - logo após conectar, coloca a conexão em background. R - especifica qual porta irei ouvir no servidor remoto, em qual ip ela será listada e para qual porta do servidor local ela será redirecionada.
Agora, sabendo tudo que irei utilizar, peço para meu amigo digitar:
ssh -C -N -f -R 4444:localhost:22 but3k4@187.10.223.67
Com o comando acima, a porta 22 da máquina local, será listada automaticamente no loopback (127.0.0.1), na porta 4444 do ip 187.10.223.67.
Com isso, eu poderei conectar na máquina dele digitando:
ssh -p 4444 localhost -l root
Simples né? Túneis ssh são muito úteis e seu funcionamento como você mesmo viu é bem simples. Então, bom proveito.
Port knocking utilizando iptables
Port Knocking é uma técnica que consiste em enviar uma sequência pré-determinada de pacotes em portas específicas para abrir conexão com algum host.
Não vou me aprofundar sobre o assunto, caso queira fazer isto, o google é seu amigo =). O que irei fazer é demonstrar como utilizar o iptables para realizar esta tarefa.
Supondo que a sua política padrão é DROP e que a porta do ssh é 22 (porta padrão), vamos criar uma regra para liberar o ssh por 20 segundos quando chegar uma conexão tcp na porta 65535:
iptables -A INPUT -i eth0 -p tcp -m state --state NEW --dport 22 -m recent --rcheck --seconds 20 --name SSH --rsource -j ACCEPT iptables -A INPUT -i eth0 -p tcp -m state --state NEW --dport 65535 -m recent --set --name SSH --rsource -j DROP
Supondo que o ip do servidor onde você acabou de implementar as regras acima seja 187.10.223.67, digite:
telnet 187.10.223.67 65535
Logo em seguida, pressione CTRL + C e tente conectar no ssh, você terá somente 20 segundos após ter utilizado o telnet.
Simples né? com estas duas regras acima, você criou um port knocking em iptables :).
Tunel com ssh
Digamos que você tem um servidorzinho na sua casa rodando um proxy e no seu trabalho o acesso a internet é restrito, ou seja, você não tem acesso ao msn e gtalk, nem acessa determinados sites, qual seria a solução? criar um túnel.
Primeiramente vamos descrever as opções do ssh que iremos utilizar:
C - usa compactação de todos os dados que serão trafegados, muito útil para economizar banda. N - Não executa comandos no servidor remoto, portanto o usuário não precisa ter shell. f - Logo após conectar, coloca a conexão em background. L - Define qual porta, ip e porta do host remoto você vai listar.
Agora que sabemos quais opções serão utilizadas, vamos por isto em prática. Digamos o servidor remoto tem o ip 187.10.223.67 e neste servidor roda um proxy (squid) e eu quero conectar neste proxy só que não quero deixar a porta do proxy aberta e nem quero utilizar vpn, então utilizo o seguinte comando:
ssh -C -N -f -L 3128:127.0.0.1:3128 but3k4@187.10.223.67
Com o comando acima, a porta 3128 do ip 187.10.223.67 é listada automaticamente no nosso loopback (127.0.0.1). E para conectar, basta apontar seu msn ou gtalk para usar proxy e configurar o ip para o loopback.