Firewalld (daemon de firewall) é uma alternativa ao iptables serviço, para gerenciar dinamicamente o firewall de um sistema com suporte para zonas de rede (ou firewall) e fornece uma interface D-Bus para gerenciar configurações. É fácil de usar e configurar, e agora é a ferramenta de gerenciamento de firewall padrão no RHEL / CentOS, Fedora e várias outras distribuições Linux.
Neste artigo, discutiremos como configurar o firewall do sistema com Firewalld e implementar filtragem básica de pacotes em CentOS / RHEL 7 e Ubuntu.
Firewalld é composto por três camadas, que são:
Ele gerencia as regras de firewall implementando zonas de rede / firewall que definem o nível de confiança das conexões ou interfaces de rede. Outros recursos de firewall suportados incluem serviços, configuração direta (usada para passar diretamente a sintaxe bruta de iptables), IPSets, bem como tipos de ICMP.
Dois tipos de ambientes de configuração são suportados pelo firewalld:
O ferramenta de linha de comando firewall-cmd é usado para gerenciar o tempo de execução e a configuração permanente. Alternativamente, você pode usar a ferramenta de configuração da interface gráfica do usuário (GUI) firewall-config para interagir com o daemon.
Além disso, Firewalld oferece uma interface bem definida para outros serviços ou aplicativos locais para solicitar mudanças nas regras de firewall diretamente, se estiverem executando com privilégios de root.
O arquivo de configuração global para firewalld está localizado em /etc/firewalld/firewalld.conf e os recursos do firewall são configurados no formato XML.
O recurso central do firewalld são zonas de rede / firewall. Todos os outros recursos são limitados a uma zona. Uma zona de firewall descreve o nível de confiança para uma conexão, interface ou ligação de endereço de origem.
A configuração padrão vem com uma série de zonas predefinidas classificadas de acordo com a confiança padrão nível das zonas de não confiável para confiável: drop, block, public, external, dmz, work, home, internal e confiável. Eles são definidos em arquivos armazenados no /usr/lib/firewalld/zones diretório.
Você pode configurar ou adicionar suas zonas personalizadas usando o cliente CLI ou simplesmente criar ou copiar um arquivo de zona em /etc/firewalld/zones a partir de arquivos existentes e edite-os.
Outro conceito importante no firewalld são os serviços. Um serviço é definido usando portas e protocolos; essas definições representam um determinado serviço de rede, como um servidor web ou serviço de acesso remoto. Os serviços são definidos em arquivos armazenados no /usr/lib/firewalld/services/ ou /etc/firewalld/services/ diretório.
Se você conhece os conceitos básicos de iptables / ip6tables / ebtables, também pode usar a interface direta (ou configuração) para obter acesso direto ao firewall. Mas, para aqueles sem nenhum conhecimento de iptables, você pode empregar a linguagem rica para criar regras de firewall mais complexas para IPv4 e IPv6.
Em CentOS 7, a Firewalld pacote vem pré-instalado e você pode verificar usando o seguinte comando.
$ rpm -qa firewalld.
Em Ubuntu 16.04 e 18.04, você pode instalá-lo usando o gerenciador de pacotes padrão, conforme mostrado.
$ sudo apt install firewalld.
Firewalld é um serviço regular do systemd que pode ser gerenciado por meio do comando systemctl.
$ sudo systemctl start firewalld # iniciar o serviço por enquanto. $ sudo systemctl enable firewalld #enable o serviço para iniciar automaticamente no momento da inicialização. $ sudo systemctl status firewalld #view service status.
Depois de começar Firewalld serviço, você também pode verificar se o daemon está em execução ou não, usando o firewall-cmd ferramenta (caso não esteja ativa, este comando exibirá "não está funcionando").
$ sudo firewall-cmd --state.
Se acontecer de você salvar qualquer alteração permanentemente, você pode recarregar o firewalld. Isso recarregará as regras de firewall e manterá as informações de estado. A configuração permanente atual se tornará uma nova configuração de tempo de execução.
$ sudo firewall-cmd --reload.
Para obter uma lista de todas as zonas e serviços de firewall disponíveis, execute estes comandos.
$ sudo firewall-cmd --get-zones. $ sudo firewall-cmd --get-services.
A zona padrão é a zona usada para cada recurso de firewall que não está explicitamente limitado a outra zona. Você pode obter a zona padrão definida para conexões de rede e interfaces executando.
$ sudo firewall-cmd --get-default-zone.
Para definir a zona padrão, por exemplo, externa, use o seguinte comando. Observe que adicionar a opção --permanente
define a configuração permanentemente (ou permite a consulta de informações do ambiente de configuração permanente).
$ sudo firewall-cmd --set-default-zone = external. OU. $ sudo firewall-cmd --set-default-zone = external --permanent. $ sudo firewall-cmd --reload
A seguir, vamos ver como adicionar uma interface a uma zona. Este exemplo mostra como adicionar seu adaptador de rede sem fio (wlp1s0) para a zona residencial, que é usada em áreas residenciais.
$ sudo firewall-cmd --zone = home --add-interface = wlp1s0.
Uma interface só pode ser adicionada a uma única zona. Para movê-lo para outra zona, use o --change-interface
mude como mostrado ou remova-o da zona anterior usando o –Remove-interface switch e, em seguida, adicione-o à nova zona.
Supondo que você deseja se conectar a uma rede WI-FI pública, você deve mover sua interface sem fio de volta para a zona pública, assim:
$ sudo firewall-cmd --zone = public --add-interface = wlp1s0. $ sudo firewall-cmd --zone = public --change-interface = wlp1s0.
Você pode usar várias zonas ao mesmo tempo. Para obter uma lista de todas as zonas ativas com os recursos habilitados, como interfaces, serviços, portas, protocolos, execute:
$ sudo firewall-cmd --get-active-zones.
Em relação ao ponto anterior, se você deseja encontrar mais informações sobre uma zona específica, ou seja, tudo adicionado ou ativado nela, use um destes comandos:
$ sudo firewall-cmd --zone = home --list-all. OU. $ sudo firewall-cmd --info-zone public.
Outra opção útil é --get-target
, que mostra o destino de uma zona permanente. Um destino é um dos seguintes: padrão, ACCEPT, DROP, REJECT. Você pode verificar o destino de várias zonas:
$ sudo firewall-cmd --permanent --zone = public --get-target $ sudo firewall-cmd --permanent --zone = block --get-target $ sudo firewall-cmd --permanent --zone = dmz --get-target $ sudo firewall-cmd --permanent --zone = external --get-target. $ sudo firewall-cmd --permanent --zone = drop --get-target.
Para abrir uma porta (ou combinação de porta / protocolo) no firewall, basta adicioná-la a uma zona com o --add-port
opção. Se você não especificar explicitamente a zona, ela será habilitada na zona padrão.
O exemplo a seguir mostra como adicionar porta 80 e 443 para permitir o tráfego da web de entrada por meio do HTTP e HTTPS protocolos, respectivamente:
$ sudo firewall-cmd --zone = public --permanent --add-port = 80 / tcp --add-port = 443 / tcp.
Em seguida, recarregue o firewalld e verifique os recursos habilitados na zona pública mais uma vez, você deve ser capaz de ver as portas recém-adicionadas.
$ sudo firewall-cmd --reload. $ sudo firewall-cmd --info-zone public.
Bloquear ou fechar uma porta no firewall é igualmente fácil, basta removê-la de uma zona com o --remove-port
opção. Por exemplo, para fechar portas 80 e 443 na zona pública.
$ sudo firewall-cmd --zone = public --permanent --remove-port = 80 / tcp --remove-port = 443 / tcp.
Em vez de usar a combinação de porta ou porta / protocolo, você pode usar o nome do serviço ao qual uma porta foi atribuída, conforme explicado na próxima seção.
Para abrir um serviço no firewall, habilite-o usando o --add-service
opção. Se a zona for omitida, a zona padrão será usada.
O comando a seguir habilitará permanentemente o serviço http na zona pública.
$ sudo firewall-cmd --zone = public --permanent --add-service = http $ sudo firewall-cmd --reload
O --remove-service
opção pode ser usada para desativar um serviço.
$ sudo firewall-cmd --zone = public --permanent --remove-service = http $ sudo firewall-cmd --reload
Mascaramento de IP (também conhecido como IPMASQ ou MASQ) é um NAT (Tradução do Endereço da Rede) mecanismo em rede Linux que permite que seus hosts em uma rede, com endereços IP privados se comuniquem com a Internet usando o endereço IP público atribuído ao seu servidor Linux (gateway IPMASQ).
É um mapeamento um para muitos. O tráfego de seus hosts invisíveis aparecerá para outros computadores na Internet como se viesse de seu servidor Linux.
Você pode habilitar o mascaramento de IP em uma zona desejada, por exemplo, a zona pública. Mas antes de fazer isso, primeiro verifique se o mascaramento está ativo ou não (um "não" significa que está desativado e um "sim" significa o contrário).
$ sudo firewall-cmd --zone = public --query-masquerade. $ sudo firewall-cmd --zone = public --add-masquerade.
Um caso de uso típico para mascaramento é executar o encaminhamento de porta. Supondo que você deseja SSH de uma máquina remota para um host em sua rede interna com o IP 10.20.1.3, no qual o daemon sshd está escutando na porta 5000.
Você pode encaminhar todas as conexões para a porta 22 em seu servidor Linux para a porta pretendida em seu host de destino, emitindo:
$ sudo firewall-cmd --zone = public --add-forward-port = port = 22 = proto = tcp: toport = 5000: toaddr = 10.20.1.3.
Para desativar o mascaramento em uma zona, use o --remove-masquerade
interruptor.
$ sudo firewall-cmd --zone = public --remove-masquerade.
ICMP (Internet Control Message Protocol) mensagens são solicitações de informações ou respostas a solicitações de informações ou em condições de erro.
Você pode habilitar ou desabilitar mensagens ICMP no firewall, mas antes disso, liste todos os tipos de icmp suportados.
$ sudo firewall-cmd --get-icmptypes.
Para adicionar ou remover um tipo de bloco que você deseja.
$ sudo firewall-cmd --zone = home --add-icmp-block = echo-reply. OU. $ sudo firewall-cmd --zone = home --remove-icmp-block = echo-reply.
Você pode ver todos os tipos de icmp adicionados em uma zona usando o --list-icmp-blocks
interruptor.
$ sudo firewall-cmd --zone = home --list-icmp-blocks.
O firewall-cmd também oferece opções diretas (--direto
) para obter acesso mais direto ao firewall. Isso é útil para aqueles com conhecimento básico de iptables.
Importante: Você só deve usar as opções diretas como último recurso quando não for possível usar as opções regulares firewall-cmd opções explicadas acima.
Aqui está um exemplo de como passar a regra de iptables bruta, usando o --add-rules
interruptor. Você pode remover facilmente essas regras, substituindo --add-rule
com --remove-rule
:
$ sudo firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 80 -j ACEITAR.
Para mais informações sobre iptables, veja este guia: Como configurar um firewall Iptables para permitir acesso remoto a serviços no Linux.
Se você não está familiarizado com a sintaxe do iptables, pode optar pelo “linguagem rica”Para criar regras de firewall mais complexas de uma maneira fácil de entender, conforme explicado a seguir.
O linguagem rica (também conhecido como regras ricas) é usado para adicionar regras de firewall mais complexas para IPv4 e IPv6 sem o conhecimento da sintaxe do iptables.
Ele estende os recursos da zona (serviço, porta, bloco icmp, masquerade e porta de encaminhamento) que cobrimos. Ele suporta endereços de origem e destino, registro, ações e limites para registros e ações.
O --add-rich-rule
é usado para adicionar regras ricas. Este exemplo mostra como permitir novos IPv4 e IPv6 conexões para serviço http e log 1 por minuto usando auditoria:
$ sudo firewall-cmd --add-rich-rule = 'nome do serviço de regra = "http" valor limite de auditoria = "1 / m" aceitar'
Para remover a regra adicionada, substitua o --add-rich-rule
opção com --remove-rich-rule
.
$ sudo firewall-cmd --remove-rich-rule = 'regra serviço nome = "http" valor limite de auditoria = "1 / m" aceitar'
Esse recurso também permite bloquear ou permitir o tráfego de um endereço IP específico. O exemplo a seguir mostra como rejeitar conexões do IP 10.20.1.20.
$ sudo firewall-cmd --zone = public --add-rich-rule = 'rule family = "ipv4" endereço de origem = "192.168.0.254" rejeitar'
Modo de pânico é um modo especial no firewalld onde todos os pacotes de entrada e saída são descartados e as conexões ativas expiram quando ativadas.
Você pode ativar esse modo em situações de emergência em que existe uma ameaça ao seu ambiente de rede.
Para consultar o modo de pânico, use o --query-panic
opção.
$ sudo firewall-cmd --query-panic.
Para ativar o modo de pânico, use o --pânico
opção. Você pode testar se está funcionando usando o comando ping como mostrado. Como o pacote é descartado, o nome www.google.com não pode ser resolvido, daí o erro exibido.
$ sudo firewall-cmd --panic-on. $ ping -c 2 www.google.com.
Para desativar o modo de pânico, use o --pânico
opção.
$ sudo firewall-cmd --panic-off.
Lembre-se de que mencionamos noções básicas sobre o firewalld que os aplicativos ou serviços locais podem alterar a configuração do firewall se estiverem sendo executados com privilégios de root. Você pode controlar quais aplicativos podem solicitar alterações no firewall, especificando-os em uma lista de permissões de bloqueio.
Este recurso está desativado por padrão, você pode ativá-lo ou desativá-lo com o --lockdown-on
ou --confinamento
mude receptivamente.
$ sudo firewall-cmd --lockdown-on. OU. $ sudo firewall-cmd --lockdown-off.
Observe que é recomendado habilitar ou desabilitar este recurso editando o arquivo de configuração principal, porque o firewall-cmd pode não existir na lista de permissões de bloqueio quando você ativa o bloqueio.
$ sudo vim /etc/firewalld/firewalld.conf.
Encontre o parâmetro Confinamento e mudar seu valor de não
(significa desligado) para sim
(significa ligado).
Bloqueio = sim.
Para tornar esta configuração permanente, recarregue o firewalld.
$ sudo firewall-cmd --reload.
Firewalld é um substituto fácil de usar para o serviço iptables, que usa iptables como backend. Neste artigo, mostramos como instalar o pacote firewalld, explicamos os recursos importantes do firewalld e discutimos como configurá-los nos ambientes de tempo de execução e de configuração permanente.
Se você tiver perguntas ou comentários, sinta-se à vontade para nos contatar através do formulário de comentários abaixo. Você pode consultar a página de manual do firewalld (man firewalld) ou o documentação firewalld no site do projeto, para mais informações.