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,FORWARDeOUTPUT. - NAT: Usada para tradução de endereços de rede. Contém
PREROUTING,POSTROUTINGeOUTPUT. - 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