Introdução ao comando firewalld e firewall-cmd no Linux

Introdução ao comando firewalld e firewall-cmd no Linux

Objetivo

Aprenda os conceitos básicos por trás do firewalld e como interagir com ele usando o utilitário firewall-cmd

Requisitos

  • Permissões de raiz

Dificuldade

FÁCIL

Convenções

  • # - requer que os comandos Linux sejam executados com privilégios de raiz também
    diretamente como usuário root ou por uso de sudo comando
  • $ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Introdução

Desde a versão 7 de Rhel e Centos e a versão 18 do Fedora, o firewalld é o sistema de firewall padrão. Uma de suas características mais distintas é sua modularidade: funciona sobre o conceito de conexão zonas. Neste tutorial, aprenderemos mais sobre isso e como interagir com ele usando o Firewall-CMD Utilitário.

Um firewall baseado em zonas

O Firewalld é um firewall baseado em zona: cada zona pode ser configurada para aceitar ou negar alguns serviços ou portos e, portanto, com um nível diferente de segurança. As zonas podem ser associadas a uma ou mais interfaces de rede. Geralmente o firewalld vem com um conjunto de zonas pré -configuradas: para listar essas zonas e, de maneira mais geral, interagir com o firewall, usaremos o Firewall-CMD Utilitário. Estou executando um sistema Fedora 27, vamos verificar quais são as zonas disponíveis:

$ firewall-cmd-get-zones fedoraserver fedoraworkstation bloco dmz soltar casa externa interna trabalho confiável trabalho 


Como você pode ver, o comando acima retorna uma lista de todas as interfaces disponíveis no meu sistema. O nome deles é bastante indicativo de seu propósito, mas precisamos saber quais serviços e portos estão disponíveis por eles: a regra padrão geral é que todo serviço ou porto é negado. Cada interface é então configurada com algumas exceções, dependendo dos serviços que devem ser permitidos. Se quisermos ter uma lista de todos os serviços associados a uma zona, podemos executar Firewall-CMD com o --Get-Services opção. Se uma zona não for passada explicitamente para o comando, a zona padrão será consultada:

# Firewall-CMD-List-All Public (ativo) Alvo: ICMP-Inversão ICMP: Sem interfaces: ENS5F5 Fontes: Serviços: SSH MDNS DHCPV6-CLIENT PORTS: Protocols: Mascarerade: Sem portos: Fonte-portos: Fonte: Fonte: Fonte: Fonte: Fonte: Fonte: Fonte: Fonte: Fonte: Fonte: Fonte: ICMP-Blocks: Rich Regras: 

O comando retornou um resumo do estado da zona (neste caso o padrão, "público"). Entre as outras coisas, você pode ver claramente quais interfaces de rede estão associadas a essa zona (ENS5F5 neste caso) e quais serviços são permitidos (SSH, MDNS, DHCPV6-Client). Se quisermos recuperar informações sobre uma zona específica e sem defesa, devemos passar o nome da zona como um argumento para o --zona opção. Por exemplo, para recuperar informações sobre o externo Zona, nós correríamos:

# firewall-cmd-zone = externo--list-alvo externo: padrão ICMP-Block-Inversão: Sem interfaces: Fontes: Serviços: SSH Portas: Protocols: Masquerade: Sim Portações Avançadoras: Fonte-PORTS: ICMP-Blocks : Regras ricas: 


Manipulação de zonas

Como dito antes, ao usar o Firewall-CMD ferramenta, se nenhuma zona for especificada, a padrão será referenciada. Podemos querer mudar qual é a zona padrão. Diga, por exemplo, queremos definir a zona externa como o padrão:

# firewall-cmd--defesa-default = externo

Preaty fácil, não é?. Agora vamos ver como podemos adicionar ou remover serviços ou portas a uma zona específica. Em primeiro lugar Serviços são um conjunto pré -configurado de portas associadas a um protocolo específico. Por exemplo: o ssh Serviço incluirá o Porta TCP 22, enquanto o samba Serviço compreenderá o conjunto de portas 139 e 445 TCP e 137 e 138 UDP. Usando serviços, podemos evitar ter que lembrar de portas específicas a cada vez. Digamos que queremos adicionar o samba Serviço para a zona externa, tudo o que fomos é:

# Firwall-CMD-Zone = Externo --add-Service = Samba Sucesso 

O Firewalld Daemon respondeu com sucesso, Isso significa que a execução foi bem -sucedida. Para verificar, vamos verificar os serviços da zona:

$ sudo firewall-cmd-zone = externo-list-services ssh samba 

Como você pode ver, usamos o --Serviços de lista opção para o propósito. O resultado do comando significa claramente que o samba O serviço foi adicionado à zona. No entanto, as modificações feitas dessa maneira são temporárias e não sobreviverão a uma reinicialização do Firewalld Daemon. Vamos verificar isso. Primeiro, recarregamos o serviço:

 # Firewall-CMD--Reload

Então verificamos novamente os serviços permitidos no externo zona:

# firewall-cmd-zone = externo-list-services ssh 

Como você pode ver, o único serviço permitido no externo zona é ssh. Para fazer uma modificação persistente em uma zona, devemos usar o --permanente opção:

 # firewall-cmd --permanent-zone = externo --add-service = samba

Modificações permanentes precisarão de uma recarga do firewall para se tornarem eficazes.

Se quisermos fazer a operação reversa e, assim, remover um serviço de uma zona, executaríamos:

 # firewall-cmd --permanent-zone = externo--remove-sesert = samba

A sintaxe é muito intuitiva e não precisa de mais explicações. Mas e se quisermos adicionar uma porta específica em vez de serviço? A sintaxe mudaria ligeiramente:

 # firewall-cmd --permanent-zone = externo --add-port = 139/tcp

Para verificar se a porta foi adicionada à zona:

# firewall-cmd-zone = externo-list-ports 139/tcp 

A operação foi bem -sucedida. Da mesma maneira, para remover uma porta que faríamos:

# firewall-cmd --permanente-zone = externo--remove-port = 139/tcp


Criando uma zona personalizada

Até agora, só vimos como modificar as zonas existentes. Também é possível criar alguns novos, e é tão fácil. Vamos supor que queremos criar uma zona personalizada chamada LinuxConfig:

# firewall-cmd --permanent-new-zone = linuxconfig

Uma nova zona vazia foi criada: por padrão, nenhum serviço ou portas é permitido nela. Também é possível criar uma zona carregando um arquivo de configuração:

# firewall-cmd --permanent--new-zone-from-file = arquivo--name = linuxconfig

Onde arquivo é o caminho para o arquivo que contém a definição de zona. Observe que ao criar ou excluir uma zona, o --permanente a opção é obrigatória: um erro será levantado se não for fornecido.

Associar uma zona a uma interface

Criar uma zona é apenas o primeiro passo: agora devemos associá -la a uma interface de rede. Digamos que queremos usar nossa nova zona criada, associando -a à interface ENS5F5 Ethernet: aqui está o comando que vamos realizar a tarefa:

# firewall-cmd --permanent-zone = linuxconfig --add-interface = Ens5f5

Se consultarmos a zona das interfaces atribuídas a ela, devemos ver:

# firewall-cmd-zone = linuxconfig-list-interfaces Ens5f5 

Remover a interface da zona é tão fácil quanto:

# firewall-cmd--remove-interface = Ens5f5 --Zone = LinuxConfig


Regras ricas

Em determinadas situações, podemos precisar criar uma regra mais complexa, e não apenas permitir algumas portas ou serviços em uma zona. Por exemplo, podemos querer criar uma regra para bloquear algum tipo de tráfego de uma máquina específica. Isso é o que regras ricas são para. Uma regra consiste basicamente em duas partes: no primeiro, especificamos as condições que devem ser atendidas para que a regra seja aplicada e, no segundo, a ação a ser executada: aceitar, derrubar, ou rejeitar.

Digamos que queremos bloquear o tráfego da máquina com IP 192.168.0.37 Na rede local: aqui está como comporíamos nossa regra:

# firewall-cmd-zone = linuxconfig --add-rich-rule = "regra \ família =" ipv4 "\ endereço de origem = 192.168.0.37 \ nome de serviço = ssh \ rejeit \ 

Para adicionar uma regra rica, usamos o --add-rico-regra opção, descrevendo a regra como seu argumento. A regra começa com regra palavra -chave. Com família especificamos que a regra é aplicada apenas a IPv4 pacotes: se essa palavra -chave não for fornecida, a regra é aplicada a IPv4 e IPv6. Em seguida, fornecemos o endereço de origem que os pacotes devem ter para que a regra seja acionada Endereço de Origem. Com serviço Especificamos o tipo de serviço para a regra, neste caso ssh. Por fim, fornecemos a ação a ser executada se um pacote corresponder à regra, neste caso rejeitar. Se agora tentarmos estabelecer uma conexão SSH da máquina com o 192.168.0.37 IP, recebemos:

SSH 192.168.0.35 SSH: Conecte -se ao Host 192.168.0.35 Porta 22: conexão recusada 

O acima é realmente simples, mas uma regra pode se tornar realmente complexa. Você deve verificar a documentação do firewalld para ver toda a gama de configurações e opções disponíveis.

O modo de pânico

O modo de pânico é um modo que deve ser usado apenas em situações em que existem problemas realmente sérios com o ambiente de rede. Quando esse modo está ativo, todas as conexões existentes são descartadas e todos os pacotes de entrada e saída são descartados. Pode ser ativado em execução:

# Firewall-CMD-Panic-On

Para sair do modo de pânico, o comando é:

# Firewall-CMD-Panic-off

É até possível consultar o modo de pânico status, em execução:

# firewall-cmd-QQUERY-PANIC

Essas opções são válidas apenas em tempo de execução e não pode ser usado com --permanente.

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Como definir uma zona de firewalld personalizada
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Download do Linux
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Mastering Bash Script Loops
  • Ubuntu 20.04 truques e coisas que você pode não saber
  • Comandos Linux: os 20 comandos mais importantes que você precisa para…
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes