Salvar e Restaurar Regras do iptables

LinuxBeginner
Pratique Agora

Introdução

As regras adicionadas com o comando iptables alteram o firewall do kernel em execução, mas uma alteração aplicada apenas ao ambiente ativo não constitui uma configuração persistente. Os administradores normalmente serializam as regras IPv4 com iptables-save e recarregam esse formato com iptables-restore. Em sistemas Debian e Ubuntu, /etc/iptables/rules.v4 é um arquivo convencional de persistência quando há um carregador apropriado habilitado durante a inicialização.

Pense nesse fluxo como três camadas distintas. O conjunto de regras ativo corresponde ao que o kernel aplica no momento. Um arquivo de regras salvo é apenas texto armazenado em disco até que alguma ferramenta ou serviço o restaure. Um backup de referência representa um ponto inicial conhecido, mantido para permitir uma reversão. Alterar uma camada não atualiza silenciosamente as outras duas; por isso, os administradores precisam salvar, restaurar e verificar cada transição de forma deliberada.

Neste laboratório, você preservará o firewall original como ponto de reversão, adicionará e salvará uma regra específica para um serviço, validará o arquivo salvo antes de aplicá-lo, simulará a recarga do conjunto de regras e, por fim, restaurará o estado original. Esse fluxo separa três estados importantes: as regras ativas, o arquivo de regras salvo e a cópia usada para reversão.

Fazer backup do firewall IPv4 ativo

Nesta etapa, você registrará o estado inicial do firewall antes de fazer qualquer alteração. Um arquivo de reversão fornece um estado conhecido e válido caso os comandos posteriores não se comportem como esperado.

Acesse o diretório do projeto.

cd /home/labex/project

Confirme se o serviço de teste está disponível antes de alterar as regras.

curl --noproxy '*' --fail --silent http://127.0.0.1:18087/status

Este é um teste de controle. 127.0.0.1 usa a interface de loopback, --noproxy '*' mantém a solicitação local mesmo que variáveis de proxy estejam configuradas, e --fail --silent produz uma resposta limpa com um status de saída confiável. Estabelecer uma referência funcional facilita a interpretação do comportamento do firewall posteriormente.

Use iptables-save para exibir o conjunto completo de regras IPv4. O pipe envia essa saída para tee, que grava baseline.v4 e, ao mesmo tempo, permite executar o comando com a conta normal do laboratório.

sudo iptables-save | tee baseline.v4 >/dev/null

A separação de privilégios é intencional: sudo iptables-save lê o conjunto de regras protegido do kernel, enquanto o tee sem privilégios grava no diretório do projeto. O redirecionamento final envia para /dev/null a saída duplicada que o tee exibiria na tela; ele não esvazia o arquivo. O backup resultante contém todas as tabelas e cadeias IPv4 serializadas informadas por este host, e não apenas a regra que será adicionada mais tarde.

Inspecione o início do arquivo salvo.

head -n 12 baseline.v4

Os contadores exatos podem variar, mas o arquivo usa o formato de iptables-restore, organizado em seções de tabelas. Uma seção filter mínima se parece com:

*filter
:INPUT ACCEPT ...
...
COMMIT

Cada seção começa com um nome de tabela, como *filter, declara suas cadeias e políticas, lista as regras e termina com COMMIT. O iptables-restore aplica uma seção de tabela somente quando alcança esse marcador. Não trate o arquivo como uma lista arbitrária de comandos shell independentes.

Confirme que o arquivo contém um marcador de tabela filter e um marcador de confirmação.

grep -E '^\*filter$|^COMMIT$' baseline.v4

Adicionar e salvar a regra do serviço

Nesta etapa, você adicionará uma regra explícita de permissão ao firewall ativo e salvará o conjunto de regras resultante no caminho convencional de persistência IPv4.

Insira, no início de INPUT, uma regra que aceite tráfego TCP de loopback destinado à porta 18087. As restrições de interface e porta mantêm a regra específica para este exercício.

sudo iptables -I INPUT 1 -i lo -p tcp --dport 18087 -j ACCEPT

INPUT abrange o tráfego destinado ao próprio host. -I INPUT 1 coloca a regra em primeiro lugar, -i lo restringe o tráfego à interface de loopback, -p tcp --dport 18087 seleciona o serviço de teste e -j ACCEPT permite o tráfego correspondente. Uma regra explícita e restrita é mais fácil de auditar e remover do que uma regra ampla que aceite vários serviços.

Verifique a regra ativa. Um status de saída igual a zero significa que a correspondência e o destino exatos existem; a implementação baseada em nftables deste host também exibe uma forma normalizada da regra correspondente.

sudo iptables -C INPUT -i lo -p tcp --dport 18087 -j ACCEPT

Salve o conjunto completo de regras IPv4 ativo. O uso de sudo tee é necessário porque /etc/iptables exige acesso administrativo para gravação.

sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null

Esse comando cria uma nova cópia do estado depois que a regra foi adicionada. sudo é necessário nos dois lados do pipe por motivos diferentes: o lado esquerdo lê o estado do firewall, enquanto o lado direito abre um arquivo de destino pertencente ao root. Criar rules.v4 não o ativa nem agenda sua aplicação; apenas prepara um arquivo que poderá ser consumido por um comando de restauração ou por um serviço executado durante a inicialização.

Procure a porta do serviço no arquivo salvo. O -- depois de grep encerra o processamento de opções, o que é útil quando o padrão de busca pode começar com um hífen.

sudo grep -- '--dport 18087' /etc/iptables/rules.v4

A saída deve incluir uma regra INPUT terminada em -j ACCEPT. Neste momento, tanto o conjunto de regras ativo quanto o arquivo salvo contêm a regra pretendida.

Evite comparar o novo arquivo byte a byte com o backup de referência. Os contadores de pacotes e as regras mantidas por outros softwares podem mudar legitimamente. Para este exercício, a evidência importante é que a regra pretendida existe tanto no estado ativo quanto no artefato salvo.

Validar e restaurar o conjunto de regras salvo

Nesta etapa, você removerá a regra ativa, validará o arquivo salvo sem aplicá-lo e, em seguida, fará sua recarga. Isso simula a parte essencial de uma restauração durante a inicialização, permanecendo dentro de uma única sessão do laboratório.

Exclua a regra da cadeia INPUT ativa.

sudo iptables -D INPUT -i lo -p tcp --dport 18087 -j ACCEPT

Essa exclusão altera apenas o conjunto de regras atual do kernel. Ela não modifica /etc/iptables/rules.v4, por isso a regra salva poderá ser restaurada em um comando posterior. Essa diferença intencional demonstra a distinção entre o estado ativo e o estado salvo.

Confirme que a regra está ausente. A verificação deve falhar; por isso, || exibe uma mensagem e permite que o fluxo continue.

sudo iptables -C INPUT -i lo -p tcp --dport 18087 -j ACCEPT 2>/dev/null || echo "Live rule is absent"

Antes de aplicar um firewall salvo, use iptables-restore --test. Esse comando analisa o arquivo completo e informa erros de sintaxe sem substituir o conjunto de regras ativo.

sudo iptables-restore --test < /etc/iptables/rules.v4

O operador < faz com que o shell forneça o arquivo como entrada padrão para iptables-restore. Uma saída silenciosa significa que a sintaxe foi aceita; não significa que o arquivo já tenha sido aplicado. A validação é uma verificação de segurança importante, pois um conjunto de regras malformado ou incompleto pode interromper a conectividade quando for restaurado.

Uma validação bem-sucedida termina sem saída. Agora restaure as regras salvas no firewall ativo.

sudo iptables-restore < /etc/iptables/rules.v4

Ao contrário da adição de uma única regra com iptables, iptables-restore processa todas as seções de tabelas presentes no arquivo. Trate-o como uma operação administrativa de alto impacto: valide primeiro, mantenha uma cópia para reversão e verifique imediatamente os acessos essenciais depois da restauração. Neste laboratório controlado, o arquivo salvo foi obtido do mesmo host poucos instantes antes.

Verifique se a regra do serviço voltou.

sudo iptables -C INPUT -i lo -p tcp --dport 18087 -j ACCEPT

Confirme que a aplicação continua acessível após a restauração.

curl --noproxy '*' --fail --silent http://127.0.0.1:18087/status

Reverter para o estado original

Nesta etapa, você usará o backup da Etapa 1 para remover a alteração do laboratório do firewall ativo, mantendo o conjunto de regras de destino salvo disponível para inspeção.

Valide o estado de referência antes de aplicá-lo.

sudo iptables-restore --test < baseline.v4

Aqui, baseline.v4 e /etc/iptables/rules.v4 têm propósitos intencionalmente diferentes. O arquivo de referência representa o estado ativo original, enquanto rules.v4 representa o estado de destino que contém a regra do serviço. Restaurar um arquivo não modifica o outro.

Restaure o conjunto de regras ativo original.

sudo iptables-restore < baseline.v4

Confirme que a regra do laboratório não está mais ativa.

sudo iptables -C INPUT -i lo -p tcp --dport 18087 -j ACCEPT 2>/dev/null || echo "Original firewall baseline restored"

O arquivo de destino salvo é um artefato separado e ainda contém a regra usada no exercício.

sudo grep -- '--dport 18087' /etc/iptables/rules.v4

Essa verificação comprova claramente a separação entre os estados: o firewall ativo foi revertido, mas o artefato de persistência ainda registra a regra de destino. Um administrador poderia restaurá-la novamente mais tarde ou configurar um serviço de persistência para carregá-la durante a inicialização.

Por fim, verifique se o retorno ao estado de referência original, que permite o tráfego, mantém o serviço local acessível.

curl --noproxy '*' --fail --silent http://127.0.0.1:18087/status

Em produção, confirme qual serviço carrega o arquivo de persistência da distribuição durante a inicialização. Por exemplo, sistemas baseados em Debian frequentemente usam um pacote como iptables-persistent juntamente com netfilter-persistent, mas a disponibilidade e as políticas variam de acordo com o host. Salvar um arquivo rules.v4 correto prepara o conjunto de regras; a existência e a habilitação de um carregador determinam se ele será restaurado automaticamente.

Resumo

Você fez backup do firewall IPv4 ativo, adicionou e salvou uma regra específica para o serviço, validou o conjunto de regras serializado com iptables-restore --test, recarregou-o no kernel e reverteu para o estado de referência original. Você também distinguiu o firewall ativo de seus arquivos salvos de persistência e de reversão — um hábito essencial antes de alterar ou restaurar o estado de filtragem de pacotes.