Configure iptables por SSH sem ser bloqueado?

1

Eu preciso provisionar servidores via SSH e, no processo, configurar iptables . Mais precisamente, quero executar os seguintes comandos nesta ordem:

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
iptables -t nat -A PREROUTING -p tcp --dport 25 -j REDIRECT --to-port 5000
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000
iptables -A INPUT -j DROP
iptables-save

Como faço isso sem ficar bloqueado? Posso aplicar em lote?

    
por Erik Aigner 10.02.2013 / 17:59

3 respostas

2

Suponho que o motivo pelo qual você acha que será bloqueado é colocar a regra DROP padrão antes de configurar as regras de ACEITAR.

Execute os comandos através de um único comando da shell como:

bash -c 'iptables -F; iptables -P INPUT DROP; ...'

A string inteira será enviada e lida antes de ser processada e, em seguida, as regras serão aplicadas. Como os comandos não exigem entrada, todos eles serão processados e, quando você terminar, ainda terá acesso.

    
por 10.02.2013 / 18:05
2

Eu costumo fazer isso:

1) Eu faço backup do arquivo de configuração antigo do iptables:

cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak

2) Antes de tentar as novas configurações, eu executo este comando para me certificar de que posso me conectar novamente se algo nas novas configurações me bloquear (basicamente eu substituo as regras antigas após 10/15 minutos) :

echo "mv /etc/sysconfig/iptables.bak /etc/sysconfig/iptables && service iptables restart" | at now + 15min

3) Agora posso modificar com segurança as regras do iptables. Se algo der errado, posso me conectar em 15 minutos.

    
por 21.02.2014 / 12:09
1

Se você quiser evitar a situação de estar bloqueado por um momento (e evitar o risco de falha na configuração do firewall devido a erros), uma alternativa técnica é evitar a limpeza da tabela para INPUT. Substitua iptables -F ou iptables -F INPUT por

iptables -I INPUT 1 -p tcp -m tcp --dport 22 -j ACCEPT
while iptables -D 2 INPUT; do
  :
done
for chain in $(iptables -L -n | awk '/^Chain/ && $2 != "INPUT" { print $2 }'); do
  iptables -F "$chain"
done

Em seguida, defina as regras como de costume (apenas -A para INPUT, não, -I INPUT 1 , por favor) e, no final, remova a regra de segurança de conexão: iptables -D INPUT 1

    
por 10.02.2013 / 22:57