Série RHCSA: Princípios básicos de firewall e controle de tráfego de rede usando FirewallD e Iptables - Parte 11
Em palavras simples, um firewall é um sistema de segurança que controla o tráfego de entrada e saída de uma rede com base em um conjunto de regras predefinidas (como destino/origem do pacote ou tipo de tráfego, por exemplo). .
Neste artigo revisaremos os fundamentos do firewalld, o daemon de firewall dinâmico padrão no Red Hat Enterprise Linux 7, e do serviço iptables, o legado serviço de firewall para Linux, com o qual a maioria dos administradores de sistemas e redes estão bem familiarizados, e que também está disponível no RHEL 7.
Uma comparação entre FirewallD e Iptables
Nos bastidores, tanto o serviço firewalld quanto o iptables se comunicam com a estrutura netfilter no kernel através da mesma interface, não surpreendentemente, o comando iptables . No entanto, ao contrário do serviço iptables, o firewalld pode alterar as configurações durante a operação normal do sistema sem que as conexões existentes sejam perdidas.
Firewalld deve ser instalado por padrão em seu sistema RHEL, embora possa não estar em execução. Você pode verificar com os seguintes comandos (firewall-config é a ferramenta de configuração da interface do usuário):
yum info firewalld firewall-config
e,
systemctl status -l firewalld.service
Por outro lado, o serviço iptables não está incluído por padrão, mas pode ser instalado através dele.
yum update && yum install iptables-services
Ambos os daemons podem ser iniciados e habilitados para inicialização com os comandos usuais do systemd:
systemctl start firewalld.service | iptables-service.service
systemctl enable firewalld.service | iptables-service.service
Leia também: Comandos úteis para gerenciar serviços Systemd
Quanto aos arquivos de configuração, o serviço iptables usa /etc/sysconfig/iptables
(que não existirá se o pacote não estiver instalado em seu sistema). Em uma caixa RHEL 7 usada como nó de cluster, este arquivo tem a seguinte aparência:
Enquanto o firewalld armazena sua configuração em dois diretórios, /usr/lib/firewalld
e /etc/firewalld
:
ls /usr/lib/firewalld /etc/firewalld
Examinaremos esses arquivos de configuração mais adiante neste artigo, depois de adicionarmos algumas regras aqui e ali. Por enquanto basta lembrar que você sempre pode encontrar mais informações sobre ambas as ferramentas.
man firewalld.conf
man firewall-cmd
man iptables
Fora isso, lembre-se de dar uma olhada em Reviewing Essential Commands & System Documentation – Part 1 da série atual, onde descrevi diversas fontes onde você pode obter informações sobre os pacotes instalados em seu sistema RHEL 7 .
Usando Iptables para controlar o tráfego de rede
Você pode consultar Configurar o Firewall Iptables – Parte 8 da série Linux Foundation Certified Engineer (LFCE) para refrescar sua memória sobre os componentes internos do iptables antes de prosseguir. Assim, poderemos pular direto para os exemplos.
Exemplo 1: Permitir tráfego de entrada e saída da web
As portas TCP 80 e 443 são as portas padrão usadas pelo servidor web Apache para lidar com normal (HTTP) e seguro (HTTPS<) tráfego da web. Você pode permitir o tráfego de entrada e saída da web através de ambas as portas na interface enp0s3 da seguinte forma:
iptables -A INPUT -i enp0s3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o enp0s3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i enp0s3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o enp0s3 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
Exemplo 2: bloquear todas (ou algumas) conexões de entrada de uma rede específica
Pode haver momentos em que você precise bloquear todo (ou algum) tipo de tráfego originado de uma rede específica, digamos 192.168.1.0/24 por exemplo:
iptables -I INPUT -s 192.168.1.0/24 -j DROP
descartará todos os pacotes provenientes da rede 192.168.1.0/24, enquanto,
iptables -A INPUT -s 192.168.1.0/24 --dport 22 -j ACCEPT
permitirá apenas tráfego de entrada pela porta 22.
Exemplo 3: Redirecionar o tráfego de entrada para outro destino
Se você usar sua caixa RHEL 7 não apenas como um firewall de software, mas também como um firewall real baseado em hardware, de modo que fique entre duas redes distintas, o encaminhamento de IP já deve estar habilitado em seu sistema . Caso contrário, você precisa editar /etc/sysctl.conf
e definir o valor de net.ipv4.ip_forward como 1, como segue:
net.ipv4.ip_forward = 1
em seguida, salve a alteração, feche seu editor de texto e finalmente execute o seguinte comando para aplicar a alteração:
sysctl -p /etc/sysctl.conf
Por exemplo, você pode ter uma impressora instalada em uma caixa interna com IP 192.168.0.10, com o serviço CUPS escutando na porta 631 (ambos no servidor de impressão e no seu firewall). Para encaminhar solicitações de impressão de clientes do outro lado do firewall, você deve adicionar a seguinte regra iptables:
iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 631 -j DNAT --to 192.168.0.10:631
Tenha em mente que o iptables lê suas regras sequencialmente, portanto certifique-se de que as políticas padrão ou regras posteriores não substituam aquelas descritas nos exemplos acima.
Introdução ao FirewallD
Uma das mudanças introduzidas com o firewalld são as zonas. Este conceito permite separar as redes em diferentes zonas do nível de confiança que o usuário decidiu depositar nos dispositivos e no tráfego dentro dessa rede.
Para listar as zonas ativas:
firewall-cmd --get-active-zones
No exemplo abaixo, a zona pública está ativa e a interface enp0s3 foi atribuída a ela automaticamente. Para visualizar todas as informações sobre uma zona específica:
firewall-cmd --zone=public --list-all
Como você pode ler mais sobre zonas no guia RHEL 7 Security, listaremos apenas alguns exemplos específicos aqui.
Exemplo 4: Permitindo serviços através do firewall
Para obter uma lista dos serviços suportados, use.
firewall-cmd --get-services
Para permitir o tráfego da web http e https através do firewall, com efeito imediato e nas inicializações subsequentes:
firewall-cmd --zone=MyZone --add-service=http
firewall-cmd --zone=MyZone --permanent --add-service=http
firewall-cmd --zone=MyZone --add-service=https
firewall-cmd --zone=MyZone --permanent --add-service=https
firewall-cmd --reload
Se–zone for omitido, a zona padrão (você pode verificar com firewall-cmd –get-default-zone) será usada.
Para remover a regra, substitua a palavra add por remove nos comandos acima.
Exemplo 5: encaminhamento de IP/porta
Primeiro, você precisa descobrir se o mascaramento está habilitado para a zona desejada:
firewall-cmd --zone=MyZone --query-masquerade
Na imagem abaixo podemos ver que o mascaramento está habilitado para a zona externa, mas não para o público:
Você pode ativar o mascaramento para público:
firewall-cmd --zone=public --add-masquerade
ou use mascaramento em externo. Aqui está o que faríamos para replicar o Exemplo 3 com firewalld:
firewall-cmd --zone=external --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10
E não se esqueça de recarregar o firewall.
Você pode encontrar mais exemplos na Parte 9 da série RHCSA, onde explicamos como permitir ou desabilitar as portas que normalmente são usadas por um servidor web e um servidor ftp, e como alterar a regra correspondente quando a porta padrão para esses serviços são alterados. Além disso, você pode consultar o wiki do firewalld para obter mais exemplos.
Leia também: Exemplos úteis de FirewallD para configurar firewall no RHEL 7
Conclusão
Neste artigo explicamos o que é um firewall, quais são os serviços disponíveis para implementá-lo no RHEL 7 e fornecemos alguns exemplos que podem ajudá-lo a começar com isso. tarefa. Se você tiver algum comentário, sugestão ou dúvida, sinta-se à vontade para nos informar através do formulário abaixo. Agradeço antecipadamente!