Como adiciono um alias dyndns aos meus Iptables?

1

Primeiro de tudo: estou ciente desta velha pergunta: iptables permitem o nome do domínio e as regras de atualização automática Mas de alguma forma isso não me ajuda.

O problema

O Iptables no meu PC de trabalho está configurado para eliminar todas as solicitações da Internet , exceto por alguns endereços ip escolhidos. Isso ocorre porque enfrentamos cerca de 10.000 ataques por dia. Formulário de vez em quando eu gostaria de ssh no meu trabalho de pc em casa. Em casa, no entanto, eu não tenho um ip estático .

Minha solução (semi-trabalhando)

Então, decidi me registrar com dyndns e adicionar uma regra a /etc/iptables para essa dynalias myUser.dynalias.net :

# in /etc/iptables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT

-A RH-Firewall-1-INPUT -i lo -j ACCEPT
# namesevers
-A RH-Firewall-1-INPUT -p 50 -d some.local.ip -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -d the.same.local.ip -j ACCEPT
    # ...and so on...
# all connections already established (started outgoing from my machine)
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# allow local connections
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source some.local.ip/255.255.0.0 -j ACCEPT
# allow my dns
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source myuser.dynalias.net -j ACCEPT
# block all others (without answering - thus nobody is able to scan the network)
-A INPUT -p icmp --icmp-type echo-request -j DROP
-A RH-Firewall-1-INPUT -j DROP
COMMIT

O que não está funcionando com essa solução

Isso funciona até que o ip da minha casa seja redefinido todos os dias à meia-noite. Então nos finais de semana eu estou basicamente ferrada e não consigo logar . Meu palpite é que eu tenho que atualizar a regra regularmente (por exemplo, usando o cron). Minha pergunta é: Como atualizo a regra regularmente? Por algum motivo, quando atualizo a tabela em um sistema em execução usando:

Os comandos de atualização (não funcionando):

sudo iptables -D RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source ip.that's.listed.by.-L.option -j ACCEP
sudo iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source myUser.dynalias.net -j ACCEP

Eu não posso ssh no meu trabalho pc depois dessa atualização. A única coisa que ajuda é chamar alguém para reiniciar o meu trabalho pc. De alguma forma, as alterações não terão efeito sem a reinicialização, apesar de a regra estar listada corretamente:

username@server:~/bin$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
RH-Firewall-1-INPUT  all  --  anywhere             anywhere            
DROP       icmp --  anywhere             anywhere            icmp echo-request 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
RH-Firewall-1-INPUT  all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

Chain RH-Firewall-1-INPUT (2 references)
# some stuff (e.g. nameserver)
# ....
DROP       all  --  anywhere             anywhere    
ACCEPT     tcp  --  123-123-12-123.host.name.foo.bar.at  anywhere            state NEW tcp dpt:ssh 

Nesta listagem, não há nenhuma diferença antes e depois da atualização - ela simplesmente não funciona para o ssh no PC de trabalho.

    
por con-f-use 22.08.2011 / 21:25

1 resposta

1

Algumas vezes atrás, eu estava enfrentando o mesmo problema, e minha solução foi criar um arquivo de regras template iptables, para modificar com base no IP atual recuperado pelo dyndns, então configurar o tabelas com iptable-restore . A rotina testou o IP periodicamente e atualizou o firewall quando necessário.

Eu abandonei essa abordagem quando um colega pediu para usar o mesmo servidor ssh, e configurar o sistema para dois IPs, embora não seja particularmente difícil, faz com que eu mude de idéia.

Eu sugeriria outra maneira de abordar o problema.

Uma abordagem comumente usada é usar software para detectar e bloquear ataques. Por exemplo, fail2ban pode analisar logs ssh em tempo de execução e banir / desanexar hosts suspeitos usando regras de firewall.

Por outro lado, denyhosts adiciona hosts suspeitos a /etc/hosts.deny , atingindo a mesma meta de fail2ban .

Outra opção é usar um servidor ssh público de terceiros (veja shellium, blinkensheel, etc.) como uma ponte para acessar seu servidor ssh pessoal, no qual você deve confiar no servidor público e não em outros, e como I.P. estático.

Tenho certeza de que os especialistas por aí podem sugerir outra solução melhor do que eu sugiro.

    
por enzotib 23.08.2011 / 00:17