um firewall é um método para monitorar e filtrar o tráfego de entrada e saída de rede. Funciona através da definição de um conjunto de regras de segurança que determinam se permitem ou bloqueiam um tráfego específico. Um firewall devidamente configurado é um dos aspectos mais importantes da segurança global do sistema.
CentOS 8 Navios com um servidor de firewall chamado firewalld. É uma solução completa com uma interface D-Bus que lhe permite gerenciar dinamicamente a firewall do sistema.
neste tutorial, vamos falar sobre como configurar e gerenciar o firewall em CentOS 8. Também explicaremos os conceitos básicos do FirewallD.
- pré-requisitos #
- conceitos básicos de Firewalld #
- zonas Firewalld #
- Firewall services #
- firewalld Runtime and Permanent Settings #
- Permitindo FirewallD #
- zonas Firewalld #
- mudar o alvo da zona #
- atribuir uma interface a uma zona diferente #
- alterando a zona por omissão #
- a Criação de novas Zonas #
- Firewalld Serviços #
- Criando um novo serviço FirewallD #
- abrir portas e IPs-fonte #
- abrir um IP de origem #
- abrindo um porto-fonte #
- portos de encaminhamento #
- Reencaminhar o tráfego de uma porta para outra no endereço IP #
- Encaminhar o tráfego para outro endereço IP #
- Encaminhar o tráfego para outro servidor em uma porta diferente #
- conclusão #
pré-requisitos #
para configurar o serviço de firewall, você deve estar logado como root ou usuário com privilégios de sudo.
conceitos básicos de Firewalld #
firewallld usa os conceitos de zonas e serviços. Com base nas zonas e serviços que irá configurar, poderá controlar o tráfego permitido ou Bloqueado de e para o sistema.
Firewalld pode ser configurado e gerenciado usando o utilitário firewall-cmd
linha de comando.
em CentOS 8, iptables é substituído por nftables como a infra-estrutura de firewall padrão para o servidor firewalld.
zonas Firewalld #
as zonas são conjuntos predefinidos de regras que especificam o nível de confiança das redes a que o seu computador está ligado. Você pode atribuir interfaces de rede e fontes a uma zona.
abaixo estão as zonas fornecidas pelo FirewallD ordenadas de acordo com o nível de confiança da zona de confiança não confiável para Confiável:
- largar: Todas as ligações recebidas são retiradas sem qualquer notificação. Só são permitidas ligações de saída.Bloco
- : todas as ligações recebidas são rejeitadas com uma mensagem
icmp-host-prohibited
paraIPv4
eicmp6-adm-prohibited
para IPv6n. apenas as ligações enviadas são permitidas. - público: para utilização em áreas públicas não fidedignas. Você não confia em outros computadores na rede, mas você pode permitir conexões de entrada selecionadas.
- external: For use on external networks with NAT masquerading enabled when your system acts as a gateway or router. Só são permitidas as ligações de entrada seleccionadas.
- interno: para utilização em redes internas quando o seu sistema actua como gateway ou router. Outros sistemas na rede são geralmente confiáveis. Só são permitidas as ligações de entrada seleccionadas.
- dmz: usado para computadores localizados na sua zona desmilitarizada que têm acesso limitado ao resto da sua rede. Só são permitidas as ligações de entrada seleccionadas.
- trabalho: utilizado em máquinas de trabalho. Outros computadores na rede são geralmente confiáveis. Só são permitidas as ligações de entrada seleccionadas.
- home: Usado para máquinas domésticas. Outros computadores na rede são geralmente confiáveis. Só são permitidas as ligações de entrada seleccionadas.
- confiável: todas as conexões de rede são aceitas. Confie em todos os computadores da rede.
Firewall services #
Firewalld services are predefined rules that apply within a zone and define the necessary settings to allow incoming traffic for a specific service. Os serviços permitem-lhe executar facilmente várias tarefas em um único passo.
por exemplo, o serviço pode conter definições sobre portas de abertura, tráfego de Encaminhamento, e muito mais.
firewalld Runtime and Permanent Settings #
Firewallld uses two separated configuration sets, runtime, and permanent configuration.
a configuração de tempo de execução é a configuração real de execução e não persiste no reboot. Quando o servidor firewalld começa, ele carrega a configuração permanente, que se torna a configuração de tempo de execução.
por padrão, ao fazer alterações na configuração do Firewalld usando o utilitário firewall-cmd
, as alterações são aplicadas à configuração do tempo de execução. Para tornar as alterações permanentes adicione a opção --permanent
ao comando.
Para aplicar as alterações em ambos os conjuntos de configuração, você pode usar um dos dois métodos a seguir:
-
Alterar a configuração de tempo de execução e torná-la permanente:
sudo firewall-cmd <options>
sudo firewall-cmd --runtime-to-permanent
-
a Mudança permanente de configuração e recarregar o firewalld daemon:
sudo firewall-cmd --permanent <options>
sudo firewall-cmd --reload
Permitindo FirewallD #
No CentOS 8, firewalld é instalado e habilitado por padrão. Se, por alguma razão, não estiver instalado no seu sistema, poderá instalar e iniciar o servidor escrevendo:
sudo dnf install firewalld
sudo systemctl enable firewalld --now
você pode verificar o estado do serviço de firewall com:
sudo firewall-cmd --state
se a firewall estiver activa, o comando deverá imprimir running
. Caso contrário, você verá not running
.
zonas Firewalld #
se não o tiver alterado, a zona por omissão está definida para public
, e todas as interfaces de rede são atribuídas a esta zona.
a zona padrão é aquela que é usada para tudo o que não é explicitamente atribuído a outra zona.
pode ver a zona predefinida escrevendo:
sudo firewall-cmd --get-default-zone
public
para obter uma lista de todas as zonas disponíveis, escreva:
sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
Para ver as zonas ativas e as interfaces de rede atribuídos a eles:
sudo firewall-cmd --get-active-zones
A saída abaixo mostra que as interfaces eth0
e eth1
são atribuídos a public
zona:
public interfaces: eth0 eth1
Você pode imprimir as definições de configuração de zona com:
sudo firewall-cmd --zone=public --list-all
public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
a Partir do resultado acima, podemos ver que a zona de público é ativo e utiliza o padrão de destino, que é o REJECT
. A saída também mostra que a zona é usada pelas interfaces eth0
e eth1
e permite o tráfego cliente DHCP e SSH.
se quiser verificar as configurações de todos os tipos de zonas disponíveis:
sudo firewall-cmd --list-all-zones
o comando imprime uma lista enorme com as configurações de toda a zona disponível.
mudar o alvo da zona #
o alvo define o comportamento padrão da zona para o tráfego de entrada que não é especificado. Ele pode ser configurado para uma das seguintes opções: default
, ACCEPT
, REJECT
, e DROP
.
para definir o alvo da zona, especifique a zona com a opção --zone
e o alvo com a opção --set-target
.
por exemplo, para mudar o alvo da zona public
para DROP
:
sudo firewall-cmd --zone=public --set-target=DROP
atribuir uma interface a uma zona diferente #
pode criar conjuntos específicos de regras para diferentes zonas e atribuir-lhes interfaces diferentes. Isto é especialmente útil quando você várias interfaces em sua máquina.
para atribuir uma interface a uma zona diferente, indique a zona com a opção --zone
e a interface com a opção --change-interface
.Por exemplo, o seguinte comando atribui a interface eth1
à zona work
:
sudo firewall-cmd --zone=work --change-interface=eth1
verifique as alterações dactilografando:
sudo firewall-cmd --get-active-zones
work interfaces: eth1public interfaces: eth0
alterando a zona por omissão #
para alterar a zona por Omissão, use a opção --set-default-zone
seguida do nome da zona que deseja tornar por omissão.
Por exemplo, para alterar a zona padrão para home
, você deve executar o seguinte comando:
sudo firewall-cmd --set-default-zone=home
Verificar as alterações com:
sudo firewall-cmd --get-default-zone
home
a Criação de novas Zonas #
Firewalld também permite que você crie seus próprios horários. Isto é útil quando você quer criar regras por aplicação.
No exemplo a seguir vamos criar uma nova zona de chamado memcached
, abra a porta 11211
e permitir o acesso apenas a partir do 192.168.100.30
endereço IP:
-
Criar a zona:
sudo firewall-cmd --new-zone=memcached --permanent
-
Adicionar as regras para a zona:
sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanent
sudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanent
sudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
-
Recarregar o firewalld daemon para ativar as alterações:
sudo firewall-cmd --reload
Firewalld Serviços #
Com firewalld você pode permitir o tráfego para portas específicas e/ou fontes com base em regras predefinidas chamados de serviços.
para obter uma lista de todos os tipos de serviços disponíveis por omissão:
sudo firewall-cmd --get-services
você pode encontrar mais informações sobre cada serviço, abrindo o associado .ficheiro xml dentro da pasta /usr/lib/firewalld/services
. Por exemplo, o serviço HTTP é definido assim:
<?xml version="1.0" encoding="utf-8"?><service> <short>WWW (HTTP)</short> <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description> <port protocol="tcp" port="80"/></service>
para permitir o tráfego HTTP de entrada (porto 80) para interfaces na zona pública, apenas para o tipo de sessão actual (configuração do tempo de execução) :
sudo firewall-cmd --zone=public --add-service=http
--zone
.Para verificar se o serviço foi adicionado com êxito o uso de --list-services
opção:
sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
Para manter a porta 80 aberta após uma reinicialização, execute o mesmo comando mais uma vez com o --permanent
opção, ou de execução:
sudo firewall-cmd --runtime-to-permanent
Use o --list-services
juntamente com a --permanent
opção para verificar as alterações:
sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http
A sintaxe para remover o serviço é o mesmo como quando adicionar um. Basta usar --remove-service
em vez da bandeira --add-service
:
sudo firewall-cmd --zone=public --remove-service=http --permanent
o comando acima remove o serviço http
da configuração permanente da zona pública.
Criando um novo serviço FirewallD #
como já mencionamos, os Serviços padrão são armazenados no diretório /usr/lib/firewalld/services
. A maneira mais fácil de criar um novo serviço é copiar um arquivo de serviço existente para o diretório /etc/firewalld/services
, que é o local para serviços criados pelo Usuário e modificar a configuração do arquivo.Por exemplo, para criar uma definição de Serviço para o servidor de mídia Plex, você pode usar o arquivo de serviço SSH:
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml
abra o novo arquivo plexmediaserver.xml
e altere o nome curto e descrição para o serviço dentro das tags <short>
e <description>
. A marca mais importante que precisa de alterar é a marca port
, que define o número de porto e o protocolo que deseja abrir.
No exemplo a seguir, estamos abrindo portas 1900
UDP e 32400
TCP.
<?xml version="1.0" encoding="utf-8"?><service version="1.0"><short>plexmediaserver</short><description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description><port protocol="udp" port="1900"/><port protocol="tcp" port="32400"/></service>
gravar o ficheiro e recarregar o serviço FirewallD:
sudo firewall-cmd --reload
você pode agora usar o serviço plexmediaserver
em suas zonas, como qualquer outro serviço.
abrir portas e IPs-fonte #
Firewallld também permite que você permita rapidamente todo o tráfego a partir de um endereço IP confiável ou em um porto específico, sem criar uma definição de serviço.
abrir um IP de origem #
para permitir todo o tráfego de entrada a partir de um endereço IP específico (ou Gama), especifique a zona com a opção --zone
e o IP de origem com a opção --add-source
.
por exemplo, para permitir que todo o tráfego de entrada a partir de 192.168.1.10 na zona public
, executar:
sudo firewall-cmd --zone=public --add-source=192.168.1.10
tornar a nova regra persistente:
sudo firewall-cmd --runtime-to-permanent
verifique as alterações usando o seguinte comando:
sudo firewall-cmd --zone=public --list-sources
192.168.1.10
a sintaxe para remover um IP de origem é a mesma que ao adicionar um. Basta usar --remove-source
em vez da opção --add-source
:
sudo firewall-cmd --zone=public --remove-source=192.168.1.10
abrindo um porto-fonte #
para permitir todo o tráfego de entrada num dado Porto, indique a zona com a opção --zone
e o porto e o protocolo com a opção --add-port
.
Por exemplo, para abrir a porta 8080
, na zona de público para a sessão actual você executar ferida:
sudo firewall-cmd --zone=public --add-port=8080/tcp
O protocolo pode ser tcp
, udp
, sctp
, ou dccp
.
Verificar as alterações:
sudo firewall-cmd --zone=public --list-ports
8080
Para manter a porta aberta depois de reiniciar o computador, adicione a regra para as definições permanentes executando o mesmo comando, usando o --permanent
bandeira ou pela execução de:
sudo firewall-cmd --runtime-to-permanent
A sintaxe para a remoção de uma porta é o mesmo como quando adicionar uma porta. Basta usar --remove-port
em vez da opção --add-port
.
sudo firewall-cmd --zone=public --remove-port=8080/tcp
portos de encaminhamento #
para encaminhar o tráfego de um porto para outro porto, primeiro permitir mascarar-se para a zona desejada usando a opção --add-masquerade
. Por exemplo, para permitir mascarar para a zona external
, tipo:
sudo firewall-cmd --zone=external --add-masquerade
Reencaminhar o tráfego de uma porta para outra no endereço IP #
No exemplo a seguir estamos encaminhando o tráfego da porta 80
à porta 8080
no mesmo servidor:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080
Encaminhar o tráfego para outro endereço IP #
No exemplo a seguir estamos encaminhando o tráfego da porta 80
à porta 80
em um servidor com o IP 10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2
Encaminhar o tráfego para outro servidor em uma porta diferente #
No exemplo a seguir estamos encaminhando o tráfego da porta 80
à porta 8080
em um servidor com IP 10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2
para tornar a regra da frente persistente, use:
sudo firewall-cmd --runtime-to-permanent
conclusão #
aprendeu a configurar e gerir o serviço de firewalld no seu sistema CentOS 8.
certifique-se de permitir todas as conexões de entrada que são necessárias para o bom funcionamento do seu sistema, limitando ao mesmo tempo todas as conexões desnecessárias.