Estou trabalhando com um produto no CentOS que ocasionalmente precisa adicionar e remover regras automaticamente da configuração do iptables. Por exemplo, durante uma atualização, queremos recusar explicitamente o tráfego de serviço de entrada até que a atualização seja concluída. Atualmente, a abordagem usada no código de atualização é usar sed
outros utilitários de manipulação de texto para comentar as linhas relevantes no arquivo de configuração, reiniciar o iptables
serviço com o novo arquivo de configuração e, em seguida, reverter o processo no final da atualização. e reinicie o serviço mais uma vez.
Parece-me que uma abordagem melhor seria usar o iptables -D table rule-specification
comando no início do processo e depois iptables -A table rule-specification
no final da atualização.
O maior problema que vejo na manipulação automática do arquivo de configuração é a fragilidade: existem ferramentas de sistema que reescrevem o arquivo de configuração, podendo reordenar parâmetros etc, possivelmente quebrando a análise do texto ( service iptables save
é um exemplo).
Qual é a abordagem recomendada para fazer alterações na configuração do sistema como essa a partir do código e por quê?
Responder1
A maioria das pessoas nesta situação lida com isso com alguma abstração.
Por exemplo. Em vez de ter um único arquivo com seu conjunto de regras, por que não criar um conjunto de arquivos com suas regras e concatená-los.
Por exemplo, você pode adicionar regras individuais em arquivos com nomes como este.
/etc/iptables-rules/00_flush_drop
/etc/iptables-rules/20_permitotherstuff
/etc/iptables-rules/10_permitssh
/etc/iptables-rules/99_drop
Em seguida, basta executar o conjunto de regras com run-parts /etc/iptables-rules
. Se você precisar adicionar outro conjunto de regras, basta inserir temporariamente um arquivo. e remova conforme necessário.
Você também deve considerar configurar e usar CHAINS em sua configuração. As cadeias são como sub-rotinas. Você poderia, por exemplo, adicionar uma regra no topo do seu firewall para entrar em uma cadeia. As cadeias têm uma política padrão de RETORNO. Então, quando você precisar adicionar uma regra temporária, basta inseri-la naquela CADEIA. Quando você precisar mais, basta liberar essa corrente específica.