Trabalhando com servidor protegido por firewall através de ssh (IP dinâmico)

0

Eu preciso trabalhar em um servidor Debian 6 através do SSH. O servidor é protegido por firewall e as conexões SSH são filtradas com base no IP do usuário.

Infelizmente, eu tenho um provedor de ISP com IP dinâmico - ele está mudando a cada dia.

Eu consegui escrever um script simples que lê um IP armazenado em um arquivo e o adiciona à lista de exceções do firewall. Mas agora, toda vez que eu conectar ao servidor, eu preciso:

  • envia meu IP para o servidor
  • faça login no console da web
  • reiniciar o firewall

Existe alguma maneira mais simples / automatizada de gerenciar conexões SSH protegidas por firewall quando tenho IP dinâmico?

    
por Gacek 06.07.2015 / 15:00

2 respostas

3

Atualmente, posso pensar em três maneiras:

O primeiro é usar knockd - meu favorito - ( link ) e configurar uma seqüência de portas somente você lembre-se e deixe knockd abrir o SSH para o endereço IP do qual você está se referindo. knockd está disponível em um pacote debian e uma configuração de amostra ( /etc/knockd.conf ) pode ser:

[options]
logfile = /var/log/knockd.log

[opencloseSSH]
sequence      = 2221,2222,2223
seq_timeout   = 5
tcpflags      = syn
start_command = /usr/sbin/iptables -I INPUT -i enp0s8 -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout   = 15
stop_command  = /usr/sbin/iptables -D INPUT -i enp0s8 -s %IP% -p tcp --dport 22 -j ACCEPT

Dessa forma, knockd escutará uma sequência nas portas especificadas (elas podem até ser as mesmas) e abrirá a porta se a sequência for atingida dentro de 5 segundos. Após 15 segundos, a regra é removida novamente para que um login bem-sucedido seja iniciado dentro desses 15 segundos.

O segundo é baseado em DNS dinâmico combinado com a atualização de uma cadeia de iptables regularmente:

iptables -N SSH
iptables -A INPUT -p tcp -m tcp --dport 22 -j SSH

Programe um cronjob para executar o seguinte script, por exemplo, a cada minuto:

#!/bin/bash

iptables -F SSH 
iptables -A SSH -s ddns-entry.com -j ACCEPT

Dessa forma, a cadeia SSH é liberada e recarregada a cada intervalo que você escolheu.

Alternativamente, você pode criar uma página web (protegida por senha) em seu host Debian 6, que permitirá que você digite um endereço IP que é salvo em /tmp/currip , por exemplo. Agende um cron job para ser executado a cada minuto - ou, melhor ainda, use inotify / incron - e verifique o arquivo /tmp/currip e altere a regra iptables para usar o endereço listado no arquivo. Como isso depende muito do tipo de pilha da web que você está usando, eu não listo uma amostra aqui.

    
por 06.07.2015 / 15:44
0

Resposta mais simples: use o DNS dinâmico

Existem algumas opções gratuitas (para uso privado), como noip.com , ou dyndns.org

EDITAR: Você tem que criar um script (por exemplo) que atualize as regras iptables constantemente, eu esqueci de mencionar isso anteriormente. (Graças a @Lambert)

EDIT2: Eu não uso uma solução bonita como essa, mas você poderia experimentar este script python puro.

    
por 06.07.2015 / 15:07