Maneira segura de implementar o iptables usando ansible

2

Eu gostaria de implantar as regras do iptables de uma maneira "segura" usando ansible onde por segurança eu penso em algo como o comando shorewall safe-restart .

Estou procurando um fluxo de trabalho assim:

  1. instale as novas regras;
  2. aguarde 30 segundos por uma confirmação do usuário (ou, no nosso caso, da máquina que está executando o manual);
  3. se o usuário confirmar e torná-lo permanente, caso contrário, restaure as regras antigas.

Meu objetivo é evitar perder o controle de minhas máquinas devido a uma configuração incorreta do firewall (que pode, por exemplo, bloquear o SSH).

    
por Enrico Polesel 13.06.2018 / 23:36

3 respostas

2

Como o ansible é sem agente, significa que ele precisaria abrir uma nova conexão (ou reutilizar existente se configurado corretamente ) para hospedar a fim de restaurar o estado.

Se no passo atual as alterações no firewall não permitirem que a próxima conexão seja bem-sucedida, não há como recuperar obviamente.

Assim, você precisa colocar a tarefa de recuperação de teste no próprio host, que tentaria aplicar novas regras e, em seguida, aguardar para ver se a próxima etapa do manual foi bem-sucedida pelo menos o SSH acessível, portanto testar a etapa do playbook poderia estar matando esse script antes de restaurar o conjunto de regras anterior). Ele também pode fazer alguns testes de origem própria.

Resumo: crie um script que não apenas aplique as regras, mas também as retire caso essas regras causem regressão de conectividade.

Abordagem direta usando iptables-apply :

  1. Executar desanexado (com tela ou tmux ou qualquer outro) com novo conjunto de regras
  2. Mate-o na seguinte etapa de reprodução antes de reverter o firewall para o conjunto de regras anterior
por 16.06.2018 / 14:40
2

Isso é o que o iptables-apply faz. De sua página man no meu Debian:

iptables-apply will try to apply a new rulesfile (as output by iptables-save, read by iptables-restore) or run a command to configure iptables and then prompt the user whether the changes are okay. If the new iptables rules cut the existing connection, the user will not be able to answer affirmatively. In this case, the script rolls back to the previous working iptables rules after the timeout expires.

    
por 14.06.2018 / 00:28
1

Encontre um caminho fora da banda para reiniciar o host. Use um firewall no qual o estado de salvamento é opcional, como o módulo firewalld Ansible. A primeira vez que testar a jogada, execute-a com permanent: False . Se necessário, use o console ou reinicie o host para recuperá-lo. Uma vez comprovado que funciona, mude para permanent: True .

Uma alternativa é agendar temporariamente uma reversão de regras de firewall no futuro, como com at . Que também tem um módulo Ansible. Eu não gosto muito dessa implementação, porque o comando planejado é apenas um script de shell, e não um módulo que verifica diretamente a configuração.

    
por 16.06.2018 / 13:19