Segurança em Sistemas Linux: Implementação de SELinux, Firewalld e Iptables

SELinux (Security-Enhanced Linux)

O SELinux é um mecanismo de segurança de Controle de Acesso Mandatório (MAC) integrado ao kernel Linux. Diferente do controle de acesso tradicional (DAC), que se baseia em proprietários e permissões de arquivos, o SELinux impõe políticas baseadas em contextos de segurança para limitar o que um processo ou usuário pode realizar, seguindo o princípio do privilégio mínimo.

Modos de Operação

Modo Descrição
Enforcing A política de segurança é aplicada rigorosamente. Ações não autorizadas são bloqueadas e registradas.
Permissive O sistema apenas gera alertas e logs para violações de política, mas não bloqueia as ações (útil para debug).
Disabled O SELinux é completamente desativado. Alterar para este modo geralmente requer reinicialização.

Gerenciamento de Estado e Contexto

Para verificar o status atual do serviço:

# Verifica o modo atual
getenforce

# Exibe detalhes da política e status
sestatus

Alteração temporária de modo (não persiste após o reboot):

# Muda para modo permissivo
setenforce 0

# Retorna para modo enforcing
setenforce 1

Para tornar a alteração permanente, edite o arquivo /etc/selinux/config e ajuste a variável SELINUX=enforcing.

Contextos de Segurança (Labels)

Todos os recursos (processos, arquivos e portas) posuem um rótulo. Podemos visualizar esses rótulos usando a flag -Z:

# Listar arquivos com contexto de segurança
ls -Z /var/www/html

# Visualizar contexto de processos específicos (ex: Nginx)
ps -eZ | grep nginx

Firewalld: Gerenciamento Baseado em Zonas

O firewalld é uma solução de firewall dinâmica que utiliza o conceito de "Zonas" para definir o nível de confiança das conexões de rede.

Estrutura de Zonas

As zonas permitem segmantar o tráfego de forma intuitiva. Algumas zonas comuns incluem:

  • public: Para redes públicas onde não se confia nos outros computadores.
  • drop: Conexões de entrada são descartadas sem resposta.
  • dmz: Para computadores em uma zona desmilitarizada com acesso limitado.
  • trusted: Todas as conexões de rede são aceitas.

Iptables: O Firewall de Baixo Nível

O iptables interage diretamente com o framework Netfilter no kernel. Ele organiza regras em Tabelas, que contêm Cadeias (Chains), que por sua vez contêm Regras.

Tabelas e Cadeias

As tabelas principais são:

  • Filter: Tabela padrão para filtragem de pacotes. Contém as cadeias INPUT, FORWARD e OUTPUT.
  • NAT: Usada para tradução de endereços de rede. Contém PREROUTING, POSTROUTING e OUTPUT.
  • Mangle: Utilizada para alterações especializadas em pacotes (QoS, TTL).
  • Raw: Usada para configurar isenções de rastreamento de conexão.

Sintaxe e Comandos Comuns

A estrutura básica de um comando iptables é: iptables [-t tabela] comando [cadeia] [condição] [-j alvo].

Exemplos de Administração

# Adicionar regra no final da cadeia INPUT para bloquear tráfego de um IP
iptables -t filter -A INPUT -s 10.0.0.50 -j DROP

# Inserir regra na primeira posição para permitir SSH (porta 22)
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

# Listar regras com numeração de linha
iptables -L -n -v --line-numbers

# Remover uma regra específica pela numeração
iptables -D INPUT 2

Tipos de Controle (Targets)

  • ACCEPT: Permite a passagem do pacote.
  • DROP: Descarta o pacote silenciosamente.
  • REJECT: Recusa o pacote enviando um erro ICMP ao remetente.
  • LOG: Registra o pacote no syslog.

Filtragem Avançada e Estados

O iptables pode rastrear o estado das conexões para criar firewalls "stateful":

# Permitir pacotes de conexões já estabelecidas ou relacionadas
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Permitir apenas o primeiro pacote de uma nova conexão web (porta 80)
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

Confgiuração de NAT (Network Address Translation)

SNAT (Source NAT)

Utilizado para permitir que máquinas de uma rede privada acessem a internet através de um único IP público.

# Mascaramento dinâmico (útil para IPs de saída variáveis)
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

# SNAT com IP estático
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT --to-source 203.0.113.10

DNAT (Destination NAT)

Utilizado para redirecionar tráfego externo para um servidor interno (Port Forwarding).

# Redirecionar tráfego da porta 80 externa para o servidor interno 192.168.10.5
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.5:80

Tags: linux-security SELinux iptables firewalld netfilter

Publicado em 8-10 04:34