Introdução
Firewalld é uma solução de gerenciamento de firewall disponível para muitas distribuições Linux. Ele serve como uma interface para o sistema de filtragem de pacotes iptables fornecido pelo kernel do Linux. Neste guia, você aprenderá como configurar um firewall para o seu servidor. Também mostraremos o básico sobre como gerenciar o firewall com a ferramenta de administração firewall-cmd.
Fundamentos do Firewalld
O FirewallD usa os conceitos de zonas e serviços, em vez das cadeias e regras do iptables. Dependendo das zonas e serviços configurados, você pode controlar qual tráfego é permitido ou não de e para o sistema. O FirewallD pode ser configurado e gerenciado usando o utilitário de linha de comando firewall-cmd.
Instalar e Ativar o seu Firewall para Iniciar no Boot
Na maioria das distribuições Linux, o firewallD já está instalado. No entanto, se você precisar instalá-lo manualmente, digite a sintaxe abaixo:
|
1 |
sudo yum install firewalld |
Você pode ativar o serviço e reiniciar o servidor assim que o firewalld estiver instalado:
|
1 2 |
sudo systemctl enable firewalld sudo reboot |
Em seguida, reinicie o servidor. O seu firewall será ativado quando você tiver reiniciado o servidor com sucesso. Depois disso, use o comando abaixo para verificar se o serviço foi ativado:
|
1 |
sudo firewall-cmd --state |

A saída mostra que a configuração padrão do firewall está funcionando.
Verificando os Padrões
Você pode verificar a zona selecionada pelo servidor usando este comando:
|
1 |
firewall-cmd --get-default-zone |

Verifique a zona ativa digitando:
|
1 |
firewall-cmd --get-active-zones |

Exiba a configuração da zona padrão para conhecer as regras associadas à área pública usando esta sintaxe:
|
1 |
sudo firewall-cmd --list-all |

A saída indica que esta zona é tanto a zona padrão quanto a ativa. Ela também mostra que as interfaces eth0 e eth1 estão atribuídas a esta zona.
Verificando Zonas Alternativas
Além das zonas padrão e ativa, existem outras zonas que você pode explorar. Insira este comando para ver todas as zonas disponíveis:
|
1 |
firewall-cmd --get-zones |

Verifique a configuração específica atribuída a uma zona adicionando o parâmetro –zone= no comando –list-all:
|
1 |
sudo firewall-cmd --zone=home --list-all |

Alterando a Zona da Interface
Você pode alterar facilmente a zona da interface usando a opção –change-interface combinada com a opção –change-interface. O comando a seguir atribuirá a interface eth1 ao workspace:
|
1 |
sudo firewall-cmd --zone=work --change-interface=eth1 |
Você pode verificar as alterações digitando:
|
1 |
sudo firewall-cmd --get-active-zones |
Alterando a Zona Padrão
Para alterar a zona padrão, use o –set-default-zone seguido pelo nome da zona que você deseja definir como padrão. Por exemplo, para alterar a zona padrão para iniciar, você deve executar o seguinte comando:
|
1 |
sudo firewall-cmd --set-default-zone=home |
Em seguida, você pode verificar as alterações com:
|
1 |
sudo firewall-cmd --get-default-zone |
Definindo Regras para as suas Aplicações
Vamos repassar os conceitos básicos necessários para definir exceções de firewall para os serviços:
Adicionando um Serviço às suas Zonas
A maneira mais direta é adicionando as portas ou serviços que você precisa às zonas que está usando. Da mesma forma, você pode usar a opção –get-services para ver todos os serviços disponíveis:
|
1 |
firewall-cmd --get-services |

Você pode ativar o serviço para uma zona com o parâmetro –add-service =. A ação tem como alvo a zona padrão ou qualquer zona definida pelo parâmetro –zone =. Por padrão, apenas a sessão atual do firewall é configurada. Você pode definir uma configuração de firewall permanente ativando a flag –permanent. Por exemplo, se você estiver executando um servidor web que fornece tráfego HTTP regular, você pode permitir esse tráfego para interfaces em nossa zona “public” para esta sessão inserindo:
|
1 |
sudo firewall-cmd --zone=public --add-service=http |
Você pode omitir –zone = se quiser alterar a zona padrão. Você pode verificar o sucesso da operação com as operações –list-all ou –list-services:
|
1 |
sudo firewall-cmd --zone=public --list-services |

Depois de verificar que tudo está funcionando como esperado, você provavelmente desejará alterar as regras permanentes do firewall para que seu serviço continue disponível após uma reinicialização. Podemos fazer a alteração em nossa zona “public” permanentemente inserindo a sintaxe:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --add-service=http saída: sucesso |
Você pode verificar se isso foi bem-sucedido adicionando a flag –permanent à operação –list-services. Você deve usar sudo para –todas as operações permanentes:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --list-services saída: dhcpv6-client http ssh |
Sua zona “public” agora permite tráfego HTTP na porta 80. Você pode adicionar isso à sessão atual e ao conjunto de regras persistentes usando o comando abaixo:
|
1 2 3 |
sudo firewall-cmd --zone=public --add-service=https sudo firewall-cmd --zone=public --permanent --add-service=https |
Se não houver serviços que atendam aos seus requisitos, você tem duas excelentes opções para lidar com essa situação:
- Abrindo uma porta para suas zonas
A maneira mais direta de adicionar suporte para sua aplicação específica é abrir as portas usadas em cada zona. É tão simples quanto designar uma porta ou intervalo de portas e o protocolo correspondente para as portas que você precisa abrir. Por exemplo, se sua aplicação roda na porta 5000 e usa TCP, você pode adicioná-la à zona “public” para esta sessão com o parâmetro –add-port =. Os protocolos podem ser TCP ou UDP:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --add-port=5000/tcp saída: sucesso |
Para verificar se a operação foi bem-sucedida, use a operação –list-ports:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --list-ports Saída: 5000/tcp |
Você também pode especificar um intervalo para a interface serial separando as portas inicial e final no intervalo com um hífen. Por exemplo, se sua aplicação usa as portas UDP 4990 a 4999, você pode abri-las em “public” escrevendo:
|
1 |
sudo firewall-cmd --zone=public --add-port=4990-4999/udp |
Após o teste, provavelmente desejaremos adicioná-las ao firewall permanente. Você pode fazer isso digitando o seguinte:
|
1 2 3 |
sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp sudo firewall-cmd --zone=public --permanent --list-ports |

- Definindo um serviço
Um serviço é uma coleção de portas com um nome e descrição associados. Os serviços são mais fáceis de gerenciar do que as portas, mas isso requer um pouco de trabalho inicial. A maneira mais direta de começar é copiar um script existente (em / usr / lib / firewalld / services) para o diretório /etc/firewalld/services. Por exemplo, você pode copiar a definição do serviço SSH para usar na definição do serviço “example” da seguinte forma. O nome do arquivo menos o sufixo XML determina o nome do serviço na lista de serviços de firewall:
|
1 |
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml |
Neste ponto, você pode ajustar a definição no arquivo copiado:
|
1 |
sudo vi /etc/firewalld/services/example.xml |
Primeiro, o arquivo contém a definição de SSH que você copiou:
|
1 2 3 4 5 6 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>SSH</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description> <port protocol="tcp" port="22"/> </service> |
A maior parte desta definição consiste em metadados. Você deve alterar o nome curto do serviço nas tags <short>. Este é um nome de serviço legível. Imagine que para o nosso serviço “example”, temos que abrir a porta 7777 para TCP e 8888 para UDP. Você pode alterar a definição existente entrando no modo INSERT pressionando i:
|
1 2 3 4 5 6 7 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>Exemplo de Service</short> <description>Este is apenas um exemplo de serviço. Ele provavelmente não' deve ser usado em um real sistema.</description> <port protocol="tcp" port="7777"/> <port protocol="udp" port="8888"/> </service> |
Em seguida, pressione ESC e digite: x para salvar e fechar o arquivo. Depois, digite o comando abaixo para reiniciar o firewall a fim de ter acesso ao seu novo serviço;
|
1 |
sudo firewall-cmd --reload |
Depois disso, use o comando abaixo para listar os serviços disponíveis:
|
1 |
firewall-cmd --get-services |

Este serviço agora está disponível na sua zona.
Criando Suas Zonas
Embora as zonas predefinidas provavelmente sejam suficientes para a maioria dos usuários, pode ser útil definir suas próprias zonas que descrevam sua função de forma mais completa.
Ao adicionar uma zona, adicione-a às suas configurações permanentes do firewall. Depois, você pode recarregar para trazer as configurações para a sua sessão. Por exemplo, você pode criar as duas zonas discutidas anteriormente digitando:
|
1 2 |
sudo firewall-cmd --permanent --new-zone=publicweb sudo firewall-cmd --permanent --new-zone=privateDNS |
Você pode confirmar que elas estão presentes na sua configuração permanente usando este comando:
|
1 |
sudo firewall-cmd --permanent --get-zones |

Recarregue o firewall para trazer essas novas zonas para a configuração ativa:
|
1 2 3 4 5 |
sudo firewall-cmd --reload firewall-cmd --get-zones saída: block dmz drop external home internal privateDNS public publicweb trusted work |
Agora, você pode atribuir os serviços e portas apropriados às suas zonas. Por exemplo, para a zona “publicweb”, você pode querer adicionar os serviços SSH, HTTP e HTTPS:
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --add-service=ssh sudo firewall-cmd --zone=publicweb --add-service=http sudo firewall-cmd --zone=publicweb --add-service=https |

Além disso, você pode adicionar o serviço DNS à sua zona “privateDNS” usando este comando:
|
1 2 |
sudo firewall-cmd --zone=privateDNS --add-service=dns sudo firewall-cmd --zone=privateDNS --list-all |

Em seguida, você pode alterar suas interfaces para essas novas zonas para testá-las:
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --change-interface=eth0 sudo firewall-cmd --zone=privateDNS --change-interface=eth1 |
Teste a configuração para ver se funciona. Se esses valores funcionarem para você, você deve adicionar as mesmas regras à configuração permanente. Você pode fazer isso reaplicando as regras com o indicador —permanent:
|
1 2 3 4 5 6 7 |
sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh sudo firewall-cmd --zone=publicweb --permanent --add-service=http sudo firewall-cmd --zone=publicweb --permanent --add-service=https sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns |
Depois de aplicar essas regras permanentemente, você pode reiniciar sua rede e recarregar o serviço de firewall:
|
1 2 3 |
sudo systemctl restart network sudo systemctl reload firewalld |
Verifique se as zonas foram atribuídas corretamente:
|
1 |
firewall-cmd --get-active-zones |

Além disso, certifique-se de que ambas as zonas tenham o serviço correto:
|
1 2 3 4 |
sudo firewall-cmd --zone=publicweb --list-services saída: http https ssh |
|
1 2 3 4 5 |
sudo firewall-cmd --zone=privateDNS --list-services saída: dns |
Se você quiser definir uma de suas zonas como a padrão para outras interfaces, você deve configurar esse comportamento com o parâmetro –set-default-zone= usando este comando:
|
1 |
sudo firewall-cmd --set-default-zone=publicweb |
Conclusão
Neste ponto, você criou suas próprias zonas com sucesso. Você deve ter uma compreensão básica da administração do serviço firewalld no seu sistema CentOS para o uso diário. Ter um bom entendimento do serviço firewalld permite que você aproveite ao máximo seu poder e flexibilidade.
Boa computação!


Comentários
Nenhum comentário ainda. Seja o primeiro.