Como migrar do FirewallD para o Iptables no CentOS 7
Introdução
Como a maioria das outras distribuições do Linux, o CentOS 7 usa a estrutura netfilter
dentro do kernel do Linux para acessar os pacotes que fluem pela pilha de rede. Isso fornece a interface necessária para inspecionar e manipular pacotes para implementar um sistema de firewall.
A maioria das distribuições usa o firewall iptables
, que usa os ganchos netfilter
para impor regras de firewall. O CentOS 7 vem com um serviço alternativo chamado firewalld
que atende a esse mesmo propósito.
Embora o firewalld
seja uma solução de firewall muito capaz com ótimos recursos, pode ser mais fácil para alguns usuários manter o iptables
se eles estiverem confortáveis com sua sintaxe e satisfeitos com seu comportamento e desempenho. O iptables
comando é realmente usado pelo próprio firewalld
, mas o iptables
serviço é não instalado no CentOS 7 por padrão. Neste guia, vamos demonstrar como instalar o serviço iptables
no CentOS 7 e migrar seu firewall de firewalld
para iptables
(confira isso guia se você gostaria de aprender como usar o FirewallD).
Salve suas regras de firewall atuais (opcional)
Antes de mudar para iptables
como a solução de firewall do seu servidor, é uma boa ideia salvar as regras atuais que o firewalld
está impondo. Mencionamos acima que o daemon firewalld
realmente aproveita o comando iptables
para falar com os hooks do kernel netfilter
. Por causa disso, podemos despejar as regras atuais usando o comando iptables
.
Despeje o conjunto atual de regras na saída padrão e em um arquivo em seu diretório pessoal chamado firewalld_iptables_rules
digitando:
- sudo iptables -S | tee ~/firewalld_iptables_rules
Faça o mesmo com ip6tables
:
- sudo ip6tables -S | tee ~/firewalld_ip6tables_rules
Dependendo das zonas firewalld
que estavam ativas, dos serviços que foram ativados e das regras que foram passadas de firewall-cmd
diretamente para iptables
, o conjunto de regras despejado pode ser bastante extenso.
O serviço firewalld
implementa suas políticas de firewall usando regras normais de iptables
. Ele faz isso construindo uma estrutura de gerenciamento usando cadeias iptables
. A maioria das regras que você provavelmente verá será usada para criar essas cadeias de gerenciamento e direcionar o fluxo de tráfego para dentro e para fora dessas estruturas.
As regras de firewall que você acabou movendo para o serviço iptables
não precisarão recriar a estrutura de gerenciamento da qual o firewalld
depende. Por causa disso, o conjunto de regras que você acaba implementando provavelmente será muito mais simples. Estamos salvando todo o conjunto aqui para manter o máximo possível de dados brutos intactos.
Você pode ver algumas das linhas mais essenciais para ter uma ideia da política que terá que recriar digitando algo assim:
- grep 'ACCEPT\|DROP\|QUEUE\|RETURN\|REJECT\|LOG' ~/firewalld_iptables_rules
Isso exibirá principalmente as regras que resultam em uma decisão final. As regras que apenas saltam para cadeias criadas pelo usuário não serão mostradas.
Baixe e instale o serviço Iptables
Para iniciar a transição do seu servidor, você precisa baixar e instalar o pacote iptables-service
dos repositórios do CentOS.
Baixe e instale os arquivos de serviço digitando:
- sudo yum install iptables-services
Isso fará o download e instalará os scripts systemd
usados para gerenciar o serviço iptables
. Ele também gravará alguns arquivos de configuração iptables
e ip6tables
padrão no diretório /etc/sysconfig
.
Construa suas regras de firewall Iptables
Em seguida, você precisa construir suas regras de firewall iptables
modificando os arquivos /etc/sysconfig/iptables
e /etc/sysconfig/ip6tables
. Esses arquivos contêm as regras que serão lidas e aplicadas quando iniciarmos o serviço iptables
.
A forma como você constrói suas regras de firewall depende se o processo system-config-firewall
está instalado e sendo usado para gerenciar esses arquivos. Verifique a parte superior do arquivo /etc/sysconfig/iptables
para ver se ele é recomendado contra a edição manual ou não:
- sudo head -2 /etc/sysconfig/iptables
Se a saída for semelhante a esta, fique à vontade para editar manualmente os arquivos /etc/sysconfig/iptables
e /etc/sysconfig/ip6tables
para implementar as políticas para seu iptables
firewall:
output# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
Abra e edite os arquivos com privilégios sudo
para adicionar suas regras:
- sudo nano /etc/sysconfig/iptables
- sudo nano /etc/sysconfig/ip6tables
Depois de criar suas regras, você pode testar suas regras IPv4 e IPv6 usando estes comandos:
- sudo sh -c 'iptables-restore -t < /etc/sysconfig/iptables'
- sudo sh -c 'ip6tables-restore -t < /etc/sysconfig/ip6tables'
Se, por outro lado, a saída do exame do arquivo /etc/sysconfig/iptables
for semelhante a esta, você não deve editar manualmente o arquivo:
output# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
Isso significa que a ferramenta de gerenciamento system-config-firewall
está instalada e sendo usada para gerenciar esse arquivo. Quaisquer alterações manuais serão substituídas pela ferramenta. Se você vir isso, faça alterações em seu firewall usando uma das ferramentas associadas. Para a IU de texto, digite:
- sudo system-config-firewall-tui
Se você tiver a IU gráfica instalada, poderá iniciá-la digitando:
- sudo system-config-firewall
Se você precisar de ajuda para aprender sobre as regras e a sintaxe do iptables
, os seguintes guias podem ser úteis, embora sejam voltados principalmente para sistemas Ubuntu:
- Como configurar um firewall usando Iptables no Ubuntu 14.04
- Iptables Essentials: regras e comandos comuns de firewall
- Como implementar um modelo básico de firewall com Iptables no Ubuntu 14.04
Pare o serviço FirewallD e inicie o serviço Iptables
Em seguida, precisamos interromper o firewall firewalld
atual e ativar nossos serviços iptables
. Usaremos a construção &&
para iniciar os novos serviços de firewall assim que o serviço firewalld
for encerrado com sucesso:
- sudo systemctl stop firewalld && sudo systemctl start iptables; sudo systemctl start ip6tables
Você pode verificar se o firewalld
não está em execução digitando:
- sudo firewall-cmd --state
Você também pode ver que as regras configuradas no diretório /etc/sysconfig
foram carregadas e aplicadas digitando:
- sudo iptables -S
- sudo ip6tables -S
Neste ponto, os serviços iptables
e ip6tables
estão ativos para a sessão atual. No entanto, atualmente, o serviço firewalld
ainda é aquele que será iniciado automaticamente quando o servidor for reinicializado.
Este é o melhor momento para testar suas políticas de firewall para garantir que você tenha o nível de acesso necessário, porque você pode reiniciar o servidor para reverter para o firewall antigo se houver algum problema.
Desative o serviço FirewallD e ative os serviços Iptables
Depois de testar suas regras de firewall para garantir que sua política está sendo aplicada corretamente, você pode prosseguir e desativar o serviço firewalld
digitando:
- sudo systemctl disable firewalld
Isso impedirá que o serviço seja iniciado automaticamente na inicialização. Como o serviço firewalld
não deve ser iniciado manualmente enquanto os serviços iptables
estiverem em execução, você pode dar um passo extra mascarando o serviço. Isso também impedirá que o serviço firewalld
seja iniciado manualmente:
- sudo systemctl mask firewalld
Agora, você pode ativar seus serviços iptables
e ip6tables
para que eles sejam iniciados automaticamente na inicialização:
- sudo systemctl enable iptables
- sudo systemctl enable ip6tables
Isso deve concluir a transição do firewall.
Conclusão
A implementação de um firewall é uma etapa essencial para manter seus servidores seguros. Embora o firewalld
seja uma ótima solução de firewall, às vezes faz mais sentido usar a ferramenta mais conhecida ou os mesmos sistemas em uma infraestrutura mais diversificada.