Guia Completo de Hardening em Servidores Linux: Segurança em Camadas
Introdução
A segurança de servidores Linux em produção é essencial para garantir a integridade, a disponibilidade e a confidencialidade dos dados e serviços. Este guia de Hardening de Servidores Linux apresenta uma abordagem abrangente para fortalecer a segurança de servidores, cobrindo desde configurações básicas de sistema até práticas avançadas para reduzir a superfície de ataque e proteger serviços críticos.
A segurança de servidores Linux requer não apenas uma configuração inicial cuidadosa, mas também a implementação de práticas contínuas de manutenção e monitoramento. Ao adotar as práticas descritas, administradores de sistemas e profissionais de TI podem estabelecer um ambiente seguro e resiliente contra ataques externos e internos, garantindo que as operações de produção sejam executadas de forma segura e sem interrupções.
Este guia está estruturado para ser aplicado por etapas, com cada seção abordando aspectos essenciais do hardening, como controle de acesso, firewall, proteção de rede, auditoria de integridade, segurança web, backup e monitoramento de vulnerabilidades. Ao final, um checklist de práticas recomendadas e uma seção extra para envio de notificações por e-mail com Postfix completam o documento, oferecendo uma base sólida para hardening em ambientes de produção.
Tabela de Conteúdos
- Introdução ao Hardening de Servidores Linux
- Atualização do Sistema e Gerenciamento de Pacotes
- Configuração de Usuários e Controle de Acesso
- Proteção de Acesso SSH
- Configuração de Firewall com UFW, iptables e FirewallD
- Hardening com Controle de Acesso Baseado em IP e Redes
- Implementação de Port Knocking e VPNs
- Controle de Permissões de Arquivos e Diretórios
- Implementação de Sistemas de Arquivos Criptografados
- Monitoramento de Logs e Auditoria com Rsyslog e Logwatch
- Configuração de Ferramentas de IDS/IPS
- Auditoria de Integridade de Arquivos e Detecção de Modificações
- Proteção de Serviços Web e Aplicações
- Configuração de SELinux e AppArmor para Controle de Acesso
- Configuração de Backups e Recuperação de Dados
- Monitoramento de Vulnerabilidades e Atualizações de Segurança
- Práticas Recomendadas para Hardening e Segurança em Produção
- Configuração do Postfix para Envio de Notificações por E-mail
1. Introdução ao Hardening de Servidores Linux
Objetivo:
Compreender o conceito de hardening e sua importância para garantir a segurança em ambientes Linux. Este processo é vital para proteger o sistema contra ameaças e ataques, além de reduzir a superfície de exposição do servidor.
Conteúdo:
- O que é Hardening?
- Definição: Hardening é o conjunto de práticas e configurações que tornam o servidor mais resistente a ataques e intrusões. Esse processo remove vulnerabilidades e reduz a probabilidade de acesso não autorizado.
- Função: Proteger serviços, dados e funcionalidades do sistema, aumentando a resiliência contra ameaças.
- Importância do Hardening em Ambientes de Produção
- Redução da Superfície de Ataque: Cada serviço ativo e porta aberta representa um possível ponto de entrada para ataques. Ao desabilitar serviços não necessários, restringir portas e aplicar permissões adequadas, limitamos as oportunidades para possíveis invasores.
- Proteção de Dados e Continuidade do Negócio: Ambientes de produção geralmente contêm dados sensíveis. Com o hardening, reduz-se a probabilidade de vazamento ou perda de dados, garantindo que a integridade e a continuidade dos serviços sejam mantidas.
- Principais Áreas de Atuação no Hardening
- Autenticação e Controle de Acesso: Garantir que apenas usuários autorizados tenham acesso ao sistema e que esses acessos sejam restritos ao mínimo necessário.
- Firewall e Regras de Rede: Configurar o firewall para filtrar o tráfego de entrada e saída, permitindo apenas comunicações essenciais.
- Monitoramento e Auditoria: Manter registros de atividades para identificar comportamentos suspeitos e auditar regularmente a integridade do sistema.
- Criptografia e Proteção de Dados Sensíveis: Usar criptografia para proteger informações e comunicações, impedindo que dados confidenciais sejam acessados ou interceptados.
Considerações Iniciais
Antes de iniciar o processo de hardening, é essencial entender o propósito do servidor, quais serviços ele precisa fornecer e quais usuários terão acesso. Essa análise ajudará a definir as configurações de segurança mais adequadas e evitará desabilitar funcionalidades necessárias.
2. Atualização do Sistema e Gerenciamento de Pacotes
Objetivo:
A manutenção do sistema atualizado é uma das práticas mais essenciais para o hardening, pois versões antigas de pacotes e softwares frequentemente contêm vulnerabilidades conhecidas. Mantendo o sistema e os pacotes atualizados, você reduz os riscos de ataques explorando falhas conhecidas.
Conteúdo:
- Atualização Manual de Pacotes
- É fundamental atualizar o sistema regularmente. As distribuições Linux fornecem comandos para gerenciar pacotes e receber atualizações de segurança.
- Distribuições baseadas em Debian (como Ubuntu):
1
sudo apt update && sudo apt upgrade -y
- Distribuições baseadas em Red Hat (como CentOS e Fedora):
1
sudo yum update -y
- Distribuições baseadas em Fedora/Red Hat com
dnf
:1
sudo dnf update -y
- Configuração de Atualizações Automáticas de Segurança
-
Em ambientes de produção, pode ser vantajoso automatizar atualizações de segurança para que o sistema se mantenha protegido sem intervenção manual. Isso é especialmente útil para patches de segurança críticos.
- Configuração em Distribuições Debian/Ubuntu:
- Instale o pacote
unattended-upgrades
:1
sudo apt install unattended-upgrades
- Ative as atualizações automáticas:
1
sudo dpkg-reconfigure --priority=low unattended-upgrades
- Verifique ou edite as configurações no arquivo
/etc/apt/apt.conf.d/50unattended-upgrades
, onde você pode especificar os pacotes que serão automaticamente atualizados.
- Instale o pacote
- Configuração em Distribuições RHEL/CentOS com
yum-cron
:- Instale o
yum-cron
:1
sudo yum install yum-cron
- Habilite e inicie o serviço:
1 2
sudo systemctl enable yum-cron sudo systemctl start yum-cron
- Edite o arquivo de configuração (
/etc/yum/yum-cron.conf
) para definir as atualizações automáticas.
- Instale o
-
- Verificação e Aplicação de Atualizações Críticas de Segurança
- É recomendável revisar atualizações críticas manualmente ou configurar alertas automáticos para monitorá-las. Em Debian/Ubuntu, você pode usar o comando
apt list --upgradable
para listar pacotes pendentes de atualização. Em RHEL/CentOS, useyum check-update
.
- É recomendável revisar atualizações críticas manualmente ou configurar alertas automáticos para monitorá-las. Em Debian/Ubuntu, você pode usar o comando
Tabela de Referência Rápida
Comando | Descrição |
---|---|
sudo apt update && sudo apt upgrade -y |
Atualização em Debian/Ubuntu |
sudo yum update -y |
Atualização em RHEL/CentOS com yum |
sudo dnf update -y |
Atualização em Fedora/RHEL com dnf |
sudo apt install unattended-upgrades |
Instalação de atualizações automáticas em Debian/Ubuntu |
sudo systemctl enable yum-cron |
Habilitação de atualizações automáticas em RHEL/CentOS |
Considerações Finais:
Manter o sistema atualizado é o primeiro passo para a segurança do servidor. Combine essa prática com monitoramento regular para garantir que todas as atualizações críticas sejam aplicadas prontamente.
3. Configuração de Usuários e Controle de Acesso
Objetivo:
Limitar o acesso ao sistema para apenas usuários autorizados e com privilégios mínimos. Essa prática reduz o risco de acessos não autorizados e garante que cada usuário tenha somente as permissões necessárias para desempenhar suas funções.
Conteúdo:
- Criação de Usuários com Privilégios Mínimos
- No Linux, é uma boa prática criar usuários específicos para diferentes tarefas ou grupos, em vez de usar a conta
root
ou uma conta com privilégios administrativos para tarefas comuns. - Para criar um novo usuário com privilégios mínimos:
1
sudo adduser nome_do_usuario
- No Linux, é uma boa prática criar usuários específicos para diferentes tarefas ou grupos, em vez de usar a conta
- Configuração de Grupos para Controle de Permissões
- Usar grupos permite centralizar permissões e facilitar o gerenciamento. Adicione usuários a grupos específicos para conceder permissões necessárias:
1
sudo usermod -aG nome_do_grupo nome_do_usuario
- Por exemplo, para permitir que um usuário execute comandos com
sudo
, adicione-o ao gruposudo
(Debian/Ubuntu) ou ao grupowheel
(CentOS/RHEL):- Debian/Ubuntu:
1
sudo usermod -aG sudo nome_do_usuario
- CentOS/RHEL:
1
sudo usermod -aG wheel nome_do_usuario
- Debian/Ubuntu:
- Usar grupos permite centralizar permissões e facilitar o gerenciamento. Adicione usuários a grupos específicos para conceder permissões necessárias:
- Remoção ou Desativação de Contas Padrão e Não Necessárias
- Desative contas desnecessárias para reduzir o número de usuários no sistema. Contas como
root
podem ser desativadas para login direto:1
sudo passwd -l root
- Verifique se há contas não utilizadas ou desnecessárias listadas no arquivo
/etc/passwd
e, se necessário, bloqueie-as.
- Desative contas desnecessárias para reduzir o número de usuários no sistema. Contas como
- Restrição do Uso do Comando Sudo
- O uso do comando
sudo
deve ser limitado a um número mínimo de usuários. O arquivo/etc/sudoers
controla quem pode usarsudo
e com quais permissões. - Edite o arquivo com
visudo
para evitar erros:1
sudo visudo
- No arquivo, restrinja comandos permitidos para determinados usuários, se necessário, utilizando uma linha como:
1
usuario_especifico ALL=(ALL) /caminho/do/comando
- O uso do comando
- Configuração do Timeout de Sessão
- Configure um tempo limite para sessões inativas, evitando que elas permaneçam ativas inadvertidamente:
- Adicione o seguinte ao final do arquivo
/etc/profile
para definir um timeout de 5 minutos:1 2 3
TMOUT=300 readonly TMOUT export TMOUT
- Adicione o seguinte ao final do arquivo
- Configure um tempo limite para sessões inativas, evitando que elas permaneçam ativas inadvertidamente:
Exemplo Prático de Criação e Configuração de Usuários
- Crie um novo usuário chamado
analista
e adicione-o ao gruposudo
(ouwheel
em CentOS/RHEL) para comandos administrativos.1 2 3
sudo adduser analista sudo usermod -aG sudo analista # Para Ubuntu/Debian sudo usermod -aG wheel analista # Para CentOS/RHEL
- Desative o login direto de root:
1
sudo passwd -l root
- Configure o timeout de sessão no arquivo
/etc/profile
:1
echo "TMOUT=300" | sudo tee -a /etc/profile
Tabela de Comandos Rápidos
Comando | Descrição |
---|---|
sudo adduser nome_do_usuario |
Cria um novo usuário |
sudo usermod -aG nome_do_grupo nome_do_usuario |
Adiciona o usuário a um grupo |
sudo passwd -l nome_do_usuario |
Bloqueia o login para um usuário específico |
sudo visudo |
Edita o arquivo de configurações do sudo |
TMOUT=300 |
Configura o tempo limite para sessões inativas |
Considerações Finais
Restringir o acesso de usuários e limitar os privilégios são passos fundamentais para reduzir o risco de invasões e evitar ações mal-intencionadas. Com essas práticas, o servidor terá um controle de acesso mais seguro e eficiente.
4. Proteção de Acesso SSH
Objetivo:
O SSH é uma das portas de entrada mais utilizadas para administração remota de servidores Linux. Portanto, reforçar sua segurança é essencial para reduzir o risco de acessos não autorizados e ataques.
Conteúdo:
4.1. Alteração da Porta Padrão do SSH
- A porta padrão do SSH é a 22, frequentemente alvo de ataques de força bruta. Alterá-la para outra porta reduz as tentativas automatizadas de invasão.
- Para modificar a porta:
1
sudo nano /etc/ssh/sshd_config
- Localize e altere a linha
Port 22
para outra porta, comoPort 2222
. - Reinicie o serviço SSH para aplicar a mudança:
1
sudo systemctl restart ssh
4.2. Desativação do Login Root via SSH
- Desativar o login do usuário root via SSH impede o acesso direto à conta administrativa.
- No arquivo
/etc/ssh/sshd_config
, encontre e ajuste:1
PermitRootLogin no
- Reinicie o SSH:
1
sudo systemctl restart ssh
4.3. Autenticação com Chave Pública
- A autenticação por chave pública é mais segura que senhas.
- Para gerar um par de chaves:
1
ssh-keygen -t rsa -b 4096
- Copie a chave pública para o servidor:
1
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@ip_do_servidor
- No
/etc/ssh/sshd_config
, desative a autenticação por senha:1
PasswordAuthentication no
- Reinicie o SSH:
1
sudo systemctl restart ssh
4.4. Limitação de Usuários Permitidos
- Restringir o SSH a usuários específicos evita que contas não autorizadas tentem acesso remoto.
- No arquivo
/etc/ssh/sshd_config
, adicione:1
AllowUsers usuario1 usuario2
4.5. Configuração de Fail2Ban para Proteger contra Ataques de Força Bruta
- O Fail2Ban monitora tentativas de login e bloqueia IPs com repetidas falhas de login.
- Instale o Fail2Ban:
1 2
sudo apt install fail2ban # Debian/Ubuntu sudo yum install fail2ban # CentOS/RHEL
- Ative e inicie o serviço:
1 2
sudo systemctl enable fail2ban sudo systemctl start fail2ban
- No arquivo
/etc/fail2ban/jail.local
, configure as opções para o SSH, comomaxretry
ebantime
.
Práticas Avançadas para Hardening do SSH
4.6. Uso de Chave Ed25519
- Ed25519 oferece maior segurança e performance que RSA. Para usar, gere uma chave Ed25519:
1
ssh-keygen -t ed25519
- Essa chave é mais rápida e moderna, tornando-se uma escolha mais segura.
4.7. Configuração de Autenticação Multifatorial (MFA)
- Adicione uma camada extra de segurança com MFA, que exige uma senha, chave e um código de autenticação.
- Instale o Google Authenticator:
1 2
sudo apt install libpam-google-authenticator # Debian/Ubuntu sudo yum install google-authenticator # CentOS/RHEL (EPEL necessário)
- Configure o MFA para o usuário:
1
google-authenticator
- No arquivo
/etc/pam.d/sshd
, adicione:1
auth required pam_google_authenticator.so
- Ative o
ChallengeResponseAuthentication
no/etc/ssh/sshd_config
:1
ChallengeResponseAuthentication yes
- Reinicie o SSH:
1
sudo systemctl restart ssh
4.8. Desativação do Protocolo SSH 1
- O protocolo SSH 1 é vulnerável e deve ser desativado. Garanta o uso apenas do protocolo SSH 2 no
/etc/ssh/sshd_config
:1
Protocol 2
4.9. Limitação de Conexões SSH com Firewall
- Limite a taxa de tentativas de conexão SSH para evitar ataques de força bruta. Com
ufw
, use:1
sudo ufw limit ssh/tcp
4.10. Desabilitação de TCP Forwarding e X11 Forwarding
- Desative o TCP e X11 Forwarding, a menos que sejam estritamente necessários, para reduzir a superfície de ataque:
1 2
AllowTcpForwarding no X11Forwarding no
4.11. Tempo de Vida de Conexões Inativas (ClientAliveInterval)
- Configure um timeout para desconectar sessões SSH inativas automaticamente, evitando sessões ociosas abertas:
1 2
ClientAliveInterval 300 ClientAliveCountMax 2
- Isso encerra sessões ociosas após 5 minutos.
4.12. Configuração Avançada do Fail2Ban para SSH
- No arquivo
/etc/fail2ban/jail.local
, personalize o Fail2Ban para banir IPs por períodos mais longos e detectar tentativas excessivas:1 2 3 4 5 6 7 8
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 86400 # Bane o IP por 24 horas findtime = 600 # Janela de 10 minutos para 3 tentativas
Tabela de Comandos Rápidos
Configuração | Comando ou Arquivo |
---|---|
Alterar a porta SSH | /etc/ssh/sshd_config (Port) |
Desativar login root | PermitRootLogin no |
Autenticação com chave pública | PasswordAuthentication no |
Restringir a usuários específicos | AllowUsers usuario1 usuario2 |
Fail2Ban para SSH | /etc/fail2ban/jail.local |
Chave Ed25519 | ssh-keygen -t ed25519 |
Configurar MFA | libpam-google-authenticator e pam.d/sshd |
SSH Protocol 2 | Protocol 2 no sshd_config |
Limite de conexão com UFW/IPTables | ufw limit ssh/tcp |
Desativar TCP e X11 Forwarding | AllowTcpForwarding no , X11Forwarding no |
Timeout para inatividade | ClientAliveInterval 300 , ClientAliveCountMax 2 |
Considerações Finais
Com estas configurações combinadas, o acesso SSH fica muito mais seguro e resistente a tentativas de invasão. Essas práticas são recomendadas para ambientes de produção e oferecem uma camada de segurança robusta contra ataques externos.
5. Configuração de Firewall com UFW, iptables e FirewallD
Objetivo:
Configurar um firewall no servidor Linux para controlar o tráfego de entrada e saída, permitindo apenas conexões necessárias e bloqueando o restante. Cada ferramenta — UFW, iptables e FirewallD — oferece formas de configurar regras de firewall, cada uma com suas vantagens.
Conteúdo:
5.1. Escolha entre UFW, iptables e FirewallD
- UFW (Uncomplicated Firewall): uma interface simplificada para o
iptables
, ideal para usuários que preferem comandos mais diretos. Comumente utilizada em sistemas baseados em Ubuntu. - iptables: uma ferramenta poderosa com controle avançado de regras, ideal para configurações complexas.
- FirewallD: uma interface de configuração dinâmica baseada em zonas, comumente usada em distribuições Red Hat, CentOS e Fedora. Permite a alteração de regras sem interromper conexões ativas.
5.2. Configuração Básica do Firewall com UFW
- Instalação e Ativação do UFW
- No Ubuntu, o UFW geralmente já vem instalado. Se necessário, instale-o:
1
sudo apt install ufw
- Ative o UFW:
1
sudo ufw enable
- No Ubuntu, o UFW geralmente já vem instalado. Se necessário, instale-o:
- Configuração de Regras de Permissão
- Permita apenas serviços essenciais:
- Porta SSH (substitua
22
se usar uma porta personalizada):1
sudo ufw allow 2222/tcp
- HTTP e HTTPS (para servidores web):
1 2
sudo ufw allow 80/tcp sudo ufw allow 443/tcp
- Porta SSH (substitua
- Permita apenas serviços essenciais:
- Definição de Políticas Padrão
- Configure o firewall para bloquear todas as conexões de entrada e permitir as de saída:
1 2
sudo ufw default deny incoming sudo ufw default allow outgoing
- Configure o firewall para bloquear todas as conexões de entrada e permitir as de saída:
- Limitação de Conexões
- Para evitar ataques de força bruta, limite a taxa de tentativas de conexão SSH:
1
sudo ufw limit 2222/tcp
- Para evitar ataques de força bruta, limite a taxa de tentativas de conexão SSH:
- Verificação das Regras Ativas
- Visualize as regras configuradas com:
1
sudo ufw status verbose
- Visualize as regras configuradas com:
5.3. Configuração Avançada do Firewall com iptables
- Instalação do iptables-persistent
- No Debian/Ubuntu, instale o
iptables-persistent
para salvar as regras e restaurá-las automaticamente após a reinicialização:1
sudo apt install iptables-persistent
- No Debian/Ubuntu, instale o
- Configuração de Regras Básicas no iptables
- Limpe as regras existentes:
1
sudo iptables -F
- Defina a política padrão para bloquear conexões de entrada:
1 2 3
sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT
- Permita o tráfego de loopback (localhost):
1
sudo iptables -A INPUT -i lo -j ACCEPT
- Limpe as regras existentes:
- Permissão de Serviços Essenciais
- Defina regras para permitir conexões necessárias, como SSH (em uma porta personalizada), HTTP e HTTPS:
1 2 3
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT # Porta SSH sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
- Defina regras para permitir conexões necessárias, como SSH (em uma porta personalizada), HTTP e HTTPS:
- Limitação de Conexões SSH
- Configure uma limitação de taxa para o SSH, reduzindo a exposição a ataques de força bruta:
1 2
sudo iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --set sudo iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
- Configure uma limitação de taxa para o SSH, reduzindo a exposição a ataques de força bruta:
- Salvamento das Regras do iptables
- Em Debian/Ubuntu, salve as configurações com:
1
sudo iptables-save | sudo tee /etc/iptables/rules.v4
- Em Debian/Ubuntu, salve as configurações com:
5.4. Configuração do Firewall com FirewallD
- Instalação e Ativação do FirewallD
- No CentOS, RHEL e Fedora, o FirewallD geralmente já está instalado. Caso contrário, instale com:
1
sudo yum install firewalld
- Ative e inicie o serviço:
1 2
sudo systemctl enable firewalld sudo systemctl start firewalld
- No CentOS, RHEL e Fedora, o FirewallD geralmente já está instalado. Caso contrário, instale com:
- Configuração de Zonas no FirewallD
- O FirewallD organiza o tráfego em zonas. A zona
public
é comumente usada para servidores, bloqueando tudo exceto o tráfego explicitamente permitido.
- O FirewallD organiza o tráfego em zonas. A zona
- Configuração de Serviços Essenciais
- Permita apenas serviços essenciais na zona
public
. Por exemplo, para permitir SSH, HTTP e HTTPS:1 2 3
sudo firewall-cmd --zone=public --add-port=2222/tcp --permanent # SSH sudo firewall-cmd --zone=public --add-service=http --permanent # HTTP sudo firewall-cmd --zone=public --add-service=https --permanent # HTTPS
- Permita apenas serviços essenciais na zona
- Aplicação das Regras
- Após configurar as regras, recarregue o FirewallD para aplicá-las:
1
sudo firewall-cmd --reload
- Após configurar as regras, recarregue o FirewallD para aplicá-las:
- Limitação de Conexões e Regras Temporárias
- O FirewallD permite criar regras temporárias, como a limitação de tentativas de conexão SSH. Outra alternativa é adicionar módulos como o Fail2Ban para gerenciar bloqueios automáticos.
- Verificação das Regras Ativas no FirewallD
- Para visualizar as regras configuradas na zona
public
, use:1
sudo firewall-cmd --zone=public --list-all
- Para visualizar as regras configuradas na zona
Exemplo Prático de Configuração de Firewall com UFW, iptables e FirewallD
- UFW: Configuração para permitir SSH, HTTP e HTTPS
1 2 3 4 5 6
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 2222/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
- iptables: Configuração para permitir apenas SSH, HTTP e HTTPS
1 2 3 4 5 6
sudo iptables -P INPUT DROP sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables-save | sudo tee /etc/iptables/rules.v4
- FirewallD: Configuração para a zona
public
com SSH, HTTP e HTTPS1 2 3 4
sudo firewall-cmd --zone=public --add-port=2222/tcp --permanent sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --zone=public --add-service=https --permanent sudo firewall-cmd --reload
Tabela de Comandos Rápidos
Comando (Ferramenta) | Descrição |
---|---|
sudo ufw allow 2222/tcp (UFW) |
Permite tráfego na porta 2222 (SSH personalizado) |
sudo iptables -P INPUT DROP (iptables) |
Define política de bloqueio para conexões de entrada |
sudo firewall-cmd --zone=public --add-service=http --permanent (FirewallD) |
Permite HTTP na zona public |
sudo iptables-save |
Salva configurações do iptables |
sudo firewall-cmd --reload |
Aplica mudanças no FirewallD |
sudo ufw limit 2222/tcp |
Limita a taxa de conexões SSH |
Considerações Finais
Cada ferramenta de firewall oferece diferentes níveis de controle e complexidade. O UFW é ideal para configurações rápidas e intuitivas. O iptables é excelente para configurações mais detalhadas e avançadas, enquanto o FirewallD oferece uma abordagem baseada em zonas, facilitando a aplicação de políticas em servidores em produção.
6. Hardening com Controle de Acesso Baseado em IP e Redes
Objetivo:
Limitar o acesso a serviços críticos do servidor usando listas de controle de acesso (ACL) baseadas em IPs e redes específicas. Essas restrições ajudam a garantir que apenas IPs confiáveis possam acessar o sistema, reduzindo a exposição a redes externas e ameaças.
Conteúdo:
6.1. Uso de hosts.allow
e hosts.deny
O Linux oferece um sistema básico de ACL para controlar o acesso a serviços baseado em IPs, utilizando os arquivos /etc/hosts.allow
e /etc/hosts.deny
. Esses arquivos configuram listas de controle de acesso para serviços que utilizam a biblioteca tcp_wrappers
.
- hosts.allow: Permite o acesso de endereços IP ou redes específicas a determinados serviços.
- hosts.deny: Bloqueia o acesso de IPs ou redes.
6.2. Configuração de Controle de Acesso em hosts.allow
e hosts.deny
- Editar o Arquivo
/etc/hosts.deny
para Bloqueio Geral- Configure o arquivo
/etc/hosts.deny
para negar todo o tráfego como política padrão, adicionando:1
ALL: ALL
- Configure o arquivo
- Permitir Acesso para IPs e Redes Específicas em
/etc/hosts.allow
- Após bloquear todo o acesso, defina exceções para IPs confiáveis no arquivo
/etc/hosts.allow
. - Para permitir o acesso SSH a partir de uma rede específica:
1
sshd: 192.168.1.0/24
- Para permitir o acesso de um IP específico:
1
sshd: 203.0.113.45
- Com essa configuração, apenas o IP
203.0.113.45
e a rede192.168.1.0/24
terão permissão para acessar o SSH, enquanto outros IPs serão bloqueados.
- Após bloquear todo o acesso, defina exceções para IPs confiáveis no arquivo
- Exemplo de Configuração Completa
- No arquivo
/etc/hosts.deny
:1
ALL: ALL
- No arquivo
/etc/hosts.allow
, defina as permissões:1
sshd: 192.168.1.0/24 203.0.113.45
- No arquivo
6.3. Configuração de Acesso com Firewall (UFW, iptables, FirewallD)
Além dos arquivos hosts.allow
e hosts.deny
, é possível configurar listas de controle de acesso para IPs confiáveis diretamente no firewall, oferecendo mais flexibilidade e controle.
6.3.1. Configuração de ACLs com UFW
- Permitir Acesso SSH a Partir de um IP Específico
- Para permitir apenas o IP
203.0.113.45
no SSH:1
sudo ufw allow from 203.0.113.45 to any port 22
- Para permitir acesso a partir de uma rede específica:
1
sudo ufw allow from 192.168.1.0/24 to any port 22
- Para permitir apenas o IP
- Negar Todo o Restante para a Porta de SSH
- Configure uma regra que bloqueia outras tentativas de acesso SSH:
1
sudo ufw deny 22/tcp
- Configure uma regra que bloqueia outras tentativas de acesso SSH:
6.3.2. Configuração de ACLs com iptables
- Permitir Acesso SSH para um IP Específico
- Para permitir apenas o IP
203.0.113.45
no SSH (porta 22):1
sudo iptables -A INPUT -p tcp -s 203.0.113.45 --dport 22 -j ACCEPT
- Permitir acesso para uma rede específica:
1
sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
- Para permitir apenas o IP
- Bloquear Todo o Restante para SSH
- Bloqueie conexões SSH de outros IPs:
1
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
- Bloqueie conexões SSH de outros IPs:
6.3.3. Configuração de ACLs com FirewallD
- Criação de Zona Customizada no FirewallD
- No FirewallD, uma prática comum é criar uma zona personalizada e permitir apenas IPs confiáveis para determinados serviços.
- Crie uma nova zona chamada
trustedssh
:1
sudo firewall-cmd --permanent --new-zone=trustedssh
- Configuração de Acesso Restrito na Zona
- Adicione um IP específico para ter acesso ao SSH nesta zona:
1 2
sudo firewall-cmd --zone=trustedssh --add-source=203.0.113.45/32 --permanent sudo firewall-cmd --zone=trustedssh --add-port=22/tcp --permanent
- Para permitir uma rede inteira:
1
sudo firewall-cmd --zone=trustedssh --add-source=192.168.1.0/24 --permanent
- Adicione um IP específico para ter acesso ao SSH nesta zona:
- Aplicação das Regras e Definição da Zona
- Recarga as regras para aplicá-las:
1
sudo firewall-cmd --reload
- Recarga as regras para aplicá-las:
Tabela de Comandos Rápidos
Ferramenta | Comando ou Arquivo | Descrição |
---|---|---|
/etc/hosts.deny |
ALL: ALL |
Bloqueia acesso de todos os IPs |
/etc/hosts.allow |
sshd: 192.168.1.0/24 203.0.113.45 |
Permite acesso SSH para IPs ou redes específicas |
UFW | sudo ufw allow from IP to any port 22 |
Permite acesso SSH apenas para IP específico |
iptables | sudo iptables -A INPUT -p tcp -s IP --dport 22 -j ACCEPT |
Permite SSH para IP específico |
FirewallD | sudo firewall-cmd --zone=trustedssh --add-source=IP --permanent |
Cria zona para IP específico e SSH |
Exemplo Prático de Configuração de Controle de Acesso com ACLs
- Controle de Acesso com
/etc/hosts.allow
e/etc/hosts.deny
- Bloqueie todo o acesso por padrão e permita apenas um IP confiável:
/etc/hosts.deny
:1
ALL: ALL
/etc/hosts.allow
:1
sshd: 203.0.113.45
- Bloqueie todo o acesso por padrão e permita apenas um IP confiável:
- Controle de Acesso com UFW
- Permita acesso SSH apenas para
203.0.113.45
e bloqueie o restante:1 2
sudo ufw allow from 203.0.113.45 to any port 22 sudo ufw deny 22/tcp
- Permita acesso SSH apenas para
- Controle de Acesso com FirewallD
- Configure a zona
trustedssh
para limitar o SSH a um IP específico:1 2 3 4
sudo firewall-cmd --permanent --new-zone=trustedssh sudo firewall-cmd --zone=trustedssh --add-source=203.0.113.45/32 --permanent sudo firewall-cmd --zone=trustedssh --add-port=22/tcp --permanent sudo firewall-cmd --reload
- Configure a zona
Considerações Finais
Configurar o acesso baseado em IP permite controlar quem pode acessar serviços críticos do servidor, como SSH, reduzindo significativamente a exposição a ameaças externas. Esse método, em conjunto com um firewall bem configurado, é fundamental para hardening em ambientes de produção.
7. Implementação de Port Knocking e VPNs
Objetivo:
Port Knocking e VPNs são técnicas adicionais para controlar e proteger o acesso à rede e ao servidor. Com Port Knocking, o servidor “abre” portas somente após uma sequência específica de conexões. Já uma VPN (Rede Privada Virtual) cria uma conexão segura e criptografada, permitindo acesso remoto ao servidor somente a partir de uma rede interna.
Conteúdo:
7.1. Port Knocking: Configuração e Funcionamento
Port Knocking permite que portas permaneçam “ocultas” até que uma sequência específica de tentativas de conexão seja realizada. Isso aumenta a segurança, pois impede que a porta de SSH, por exemplo, fique visível na rede.
7.1.1. Instalação e Configuração do Knockd
- Instalação do Knockd
- No Debian/Ubuntu:
1
sudo apt install knockd
- No CentOS/RHEL (habilite o repositório EPEL se necessário):
1
sudo yum install knock
- No Debian/Ubuntu:
- Configuração do Knockd
- Edite o arquivo de configuração, geralmente localizado em
/etc/knockd.conf
:1
sudo nano /etc/knockd.conf
- Configure uma sequência de portas para abrir a porta SSH. Exemplo de configuração:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
[options] UseSyslog [openSSH] sequence = 7000,8000,9000 seq_timeout = 5 command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn [closeSSH] sequence = 9000,8000,7000 seq_timeout = 5 command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn
- Neste exemplo, a sequência
7000,8000,9000
abrirá a porta SSH, e a sequência inversa9000,8000,7000
fechará o acesso.
- Edite o arquivo de configuração, geralmente localizado em
- Ativação do Knockd
- No Ubuntu:
1 2
sudo systemctl enable knockd sudo systemctl start knockd
- Verifique o status para garantir que o Knockd esteja ativo:
1
sudo systemctl status knockd
- No Ubuntu:
- Uso do Cliente Knock
- A partir do cliente, execute a sequência para “bater” nas portas e liberar o SSH:
1
knock servidor_ip 7000 8000 9000
- Depois, para fechar o acesso:
1
knock servidor_ip 9000 8000 7000
- A partir do cliente, execute a sequência para “bater” nas portas e liberar o SSH:
7.2. VPN: Configuração para Acesso Remoto Seguro
Uma VPN cria um túnel seguro para acessar a rede privada do servidor. Com ela, o servidor fica inacessível para redes externas, permitindo que apenas dispositivos conectados à VPN possam se comunicar diretamente.
7.2.1. Instalação e Configuração Básica do OpenVPN
OpenVPN é uma das ferramentas de VPN mais populares e seguras, suportada por várias plataformas.
- Instalação do OpenVPN
- No Ubuntu:
1
sudo apt install openvpn easy-rsa
- No CentOS:
1 2
sudo yum install epel-release -y sudo yum install openvpn easy-rsa -y
- No Ubuntu:
- Configuração do OpenVPN
- Copie os arquivos de configuração para o diretório
/etc/openvpn
:1 2
cp -r /usr/share/easy-rsa /etc/openvpn/ cd /etc/openvpn/easy-rsa
- Configure o ambiente:
1 2 3 4 5
. ./vars ./clean-all ./build-ca ./build-key-server servidor ./build-dh
- Copie os arquivos de configuração para o diretório
- Configuração dos Clientes
- Crie as chaves para cada cliente:
1
./build-key cliente1
- Copie as chaves e certificados para o diretório
openvpn/cliente-config
.
- Crie as chaves para cada cliente:
- Configuração de Redirecionamento de IP
- No arquivo
/etc/sysctl.conf
, habilite o redirecionamento de IPs:1
net.ipv4.ip_forward = 1
- Carregue a configuração:
1
sudo sysctl -p
- No arquivo
- Iniciar o OpenVPN
- Ative e inicie o serviço:
1 2
sudo systemctl enable openvpn@server sudo systemctl start openvpn@server
- Ative e inicie o serviço:
- Configuração do Firewall para o OpenVPN
- Configure o firewall para permitir o tráfego OpenVPN. Para UFW:
1 2
sudo ufw allow 1194/udp sudo ufw allow OpenSSH
- Com iptables:
1
sudo iptables -A INPUT -p udp --dport 1194 -j ACCEPT
- Configure o firewall para permitir o tráfego OpenVPN. Para UFW:
7.2.2. Conexão do Cliente à VPN
- No cliente, use o arquivo de configuração e as credenciais fornecidas para conectar-se:
1
sudo openvpn --config cliente1.ovpn
Comparação: Port Knocking vs VPN
Aspecto | Port Knocking | VPN |
---|---|---|
Segurança | Protege portas específicas | Criptografa todo o tráfego |
Controle | Configuração simples para portas | Acesso seguro a toda a rede interna |
Desempenho | Impacto mínimo | Pode ter impacto devido à criptografia |
Facilidade de Uso | Mais manual; sequência para abrir portas | Interface VPN ou cliente simples |
Proteção Contra Escaneamento | Oculta portas de escaneamentos | Requer autenticação e criptografia |
Exemplo de Configuração Combinada: Port Knocking e VPN
Para um hardening mais robusto, considere usar Port Knocking para proteger a porta SSH e, para acesso seguro à rede interna e dados sensíveis, implemente uma VPN.
Tabela de Comandos Rápidos
Comando ou Arquivo | Descrição |
---|---|
sudo apt install knockd |
Instala o Knockd no servidor |
/etc/knockd.conf |
Configura a sequência de port knocking |
knock servidor_ip 7000 8000 9000 |
Executa a sequência de port knocking para liberar SSH |
sudo apt install openvpn easy-rsa |
Instala o OpenVPN para VPN |
openvpn --config cliente1.ovpn |
Conecta o cliente à VPN |
sudo ufw allow 1194/udp |
Permite a porta OpenVPN no firewall (UFW) |
Considerações Finais
Port Knocking e VPNs são métodos eficazes para ocultar e proteger o acesso ao servidor. Port Knocking é uma solução simples para ocultar portas específicas, enquanto VPNs oferecem acesso seguro e criptografado a redes inteiras. A combinação dessas práticas pode fortalecer significativamente a segurança do ambiente de produção.
8. Controle de Permissões de Arquivos e Diretórios
Objetivo:
Configurar permissões de arquivos e diretórios de forma adequada ajuda a proteger informações sensíveis e impede que usuários não autorizados modifiquem arquivos importantes do sistema. O controle de permissões reduz a possibilidade de ataques de escalonamento de privilégios e acesso indevido a dados críticos.
Conteúdo:
8.1. Princípios Básicos de Permissões no Linux
No Linux, cada arquivo e diretório tem três tipos de permissões:
- Leitura (
r
): Permite visualizar o conteúdo do arquivo ou listar o conteúdo do diretório. - Escrita (
w
): Permite modificar o conteúdo do arquivo ou criar/remover arquivos em um diretório. - Execução (
x
): Permite executar o arquivo como um programa ou acessar o diretório.
Essas permissões são definidas para três categorias:
- Dono (Owner)
- Grupo (Group)
- Outros (Others)
Exemplo de uma permissão de arquivo: -rw-r--r--
- Dono:
rw-
(leitura e escrita) - Grupo:
r--
(leitura) - Outros:
r--
(leitura)
8.2. Comandos Básicos para Gerenciar Permissões
- Modificar Permissões:
chmod
- Para definir permissões usando símbolos (
r
,w
,x
), utilizechmod
. Exemplo:1
chmod u=rwx,g=rx,o=r arquivo.txt
- Ou utilize a notação octal. Exemplo para permissões
rwxr-xr--
:1
chmod 754 arquivo.txt
- Para definir permissões usando símbolos (
- Alterar o Dono e o Grupo:
chown
- Para alterar o dono do arquivo:
1
sudo chown usuario arquivo.txt
- Para alterar o grupo do arquivo:
1
sudo chown :grupo arquivo.txt
- Para alterar o dono do arquivo:
- Definir Atributos Imutáveis:
chattr
- Um arquivo pode ser configurado como imutável para evitar qualquer modificação, até mesmo por usuários com permissões de escrita.
- Para tornar um arquivo imutável:
1
sudo chattr +i arquivo.txt
- Para remover a imutabilidade:
1
sudo chattr -i arquivo.txt
8.3. Permissões em Arquivos e Diretórios Críticos do Sistema
Alguns arquivos e diretórios são especialmente sensíveis e devem ter permissões restritas para proteger o sistema.
- Arquivos de Configuração do Sistema
/etc/passwd
: Contém informações sobre usuários.1
sudo chmod 644 /etc/passwd
/etc/shadow
: Contém as senhas criptografadas dos usuários e deve ser altamente restrito.1 2
sudo chmod 640 /etc/shadow sudo chown root:shadow /etc/shadow
- Diretórios de Boot e Kernel
- Proteja o diretório
/boot
para evitar que usuários não autorizados alterem arquivos de inicialização:1
sudo chmod -R 700 /boot
- Proteja o diretório
- Logs do Sistema
- Os logs contêm informações sobre eventos de sistema e podem ser alvo de modificações para ocultar rastros de ataques. Proteja o diretório
/var/log
:1 2
sudo chmod -R 640 /var/log sudo chown -R root:adm /var/log
- Os logs contêm informações sobre eventos de sistema e podem ser alvo de modificações para ocultar rastros de ataques. Proteja o diretório
8.4. Exemplo de Configuração de Permissões de Hardening
- Configuração de um Arquivo com Permissões Restritivas
- Para criar um arquivo de configuração seguro para um serviço:
1 2 3
touch /etc/servico.conf sudo chmod 600 /etc/servico.conf sudo chown root:root /etc/servico.conf
- Para criar um arquivo de configuração seguro para um serviço:
- Configuração de Diretório com Permissões Restritas e Atributos de Imutabilidade
- Para proteger o diretório
/etc
contra exclusão ou modificação acidental:1
sudo chattr +i /etc
- Para proteger o diretório
8.5. Verificação das Permissões de Arquivos Críticos
- Verificar Permissões com o Comando
ls
- Para listar as permissões de um arquivo ou diretório específico:
1
ls -l /caminho/do/arquivo
- Para listar as permissões de um arquivo ou diretório específico:
- Verificar Atributos Especiais com
lsattr
- Para verificar se um arquivo está imutável:
1
lsattr /etc/servico.conf
- Para verificar se um arquivo está imutável:
Tabela de Comandos Rápidos
Comando | Descrição |
---|---|
chmod u=rwx,g=rx,o=r arquivo.txt |
Define permissões de leitura, escrita e execução |
sudo chown usuario:grupo arquivo |
Altera o dono e o grupo do arquivo |
sudo chattr +i arquivo.txt |
Define o arquivo como imutável |
ls -l |
Exibe permissões de arquivos e diretórios |
lsattr |
Exibe atributos especiais de arquivos |
Considerações Finais
Configurar permissões adequadas em arquivos e diretórios críticos ajuda a reduzir vulnerabilidades e proteger o sistema contra alterações não autorizadas. Defina permissões restritivas, use atributos imutáveis onde necessário e monitore regularmente permissões em diretórios sensíveis.
9. Implementação de Sistemas de Arquivos Criptografados
Objetivo:
Proteger dados sensíveis utilizando criptografia de sistemas de arquivos. A criptografia garante que, mesmo que um invasor tenha acesso físico ao disco, ele não consiga ler os dados sem a chave de criptografia.
Conteúdo:
9.1. Visão Geral sobre Criptografia com LUKS e eCryptfs
- LUKS (Linux Unified Key Setup): Um padrão de criptografia de disco para Linux, muito usado para criptografar partições inteiras, fornecendo alto desempenho e segurança.
- eCryptfs: Um sistema de arquivos criptografado em nível de diretório, ideal para proteger diretórios específicos sem criptografar uma partição inteira.
9.2. Criptografia de Partição com LUKS
- Instalação do LUKS
- LUKS geralmente vem pré-instalado em distribuições Linux modernas, mas pode ser instalado com:
1 2
sudo apt install cryptsetup # Debian/Ubuntu sudo yum install cryptsetup # CentOS/RHEL
- LUKS geralmente vem pré-instalado em distribuições Linux modernas, mas pode ser instalado com:
-
Configuração de Criptografia com LUKS
Passo 1: Identifique a Partição
- Verifique a partição a ser criptografada (ex.:
/dev/sdb1
):1
lsblk
Passo 2: Configurar a Partição com LUKS
- Inicialize a partição para criptografia LUKS:
1
sudo cryptsetup luksFormat /dev/sdb1
- Confirme e forneça uma senha forte para a criptografia.
Passo 3: Abrir a Partição e Formatar o Volume
- Desbloqueie a partição e dê um nome para o volume:
1
sudo cryptsetup luksOpen /dev/sdb1 meu_volume_criptografado
- Formate o volume desbloqueado com um sistema de arquivos:
1
sudo mkfs.ext4 /dev/mapper/meu_volume_criptografado
Passo 4: Montagem do Volume
- Crie um diretório para montar o volume e monte-o:
1 2
sudo mkdir /mnt/volume_segurado sudo mount /dev/mapper/meu_volume_criptografado /mnt/volume_segurado
Passo 5: Desmontar e Bloquear o Volume
- Quando terminar de usar o volume criptografado, desmonte-o e bloqueie:
1 2
sudo umount /mnt/volume_segurado sudo cryptsetup luksClose meu_volume_criptografado
- Verifique a partição a ser criptografada (ex.:
- Configuração de Montagem Automática de Partições LUKS
- Para montar automaticamente partições criptografadas durante a inicialização, adicione uma entrada no arquivo
/etc/crypttab
, com a estrutura:1
meu_volume_criptografado /dev/sdb1 none luks
- Adicione o ponto de montagem em
/etc/fstab
:1
/dev/mapper/meu_volume_criptografado /mnt/volume_segurado ext4 defaults 0 0
- Para montar automaticamente partições criptografadas durante a inicialização, adicione uma entrada no arquivo
9.3. Criptografia de Diretórios com eCryptfs
- Instalação do eCryptfs
- No Ubuntu e Debian, instale o
ecryptfs-utils
:1
sudo apt install ecryptfs-utils
- No CentOS e RHEL:
1
sudo yum install ecryptfs-utils
- No Ubuntu e Debian, instale o
- Criação de um Diretório Criptografado
- Crie um diretório para criptografar:
1
mkdir ~/meu_diretorio_segurado
- Monte o diretório com eCryptfs:
1
sudo mount -t ecryptfs ~/meu_diretorio_segurado ~/meu_diretorio_segurado
- Durante o processo, o sistema solicitará opções de criptografia e senha.
- Crie um diretório para criptografar:
- Acesso e Desmontagem do Diretório
- Quando não for necessário acesso, desmonte o diretório criptografado para proteção adicional:
1
sudo umount ~/meu_diretorio_segurado
- Quando não for necessário acesso, desmonte o diretório criptografado para proteção adicional:
Exemplo Prático de Criptografia com LUKS e eCryptfs
- Criptografar uma Partição Inteira com LUKS
- Execute os comandos para criptografar
/dev/sdb1
, desbloqueá-la e montá-la em/mnt/volume_segurado
.
- Execute os comandos para criptografar
- Configurar um Diretório Específico com eCryptfs
- Crie um diretório chamado
dados_sensíveis
e monte-o com eCryptfs:1 2
mkdir ~/dados_sensíveis sudo mount -t ecryptfs ~/dados_sensíveis ~/dados_sensíveis
- Crie um diretório chamado
Tabela de Comandos Rápidos
Comando | Descrição |
---|---|
sudo cryptsetup luksFormat /dev/sdX |
Inicializa a partição para criptografia LUKS |
sudo cryptsetup luksOpen /dev/sdX nome |
Desbloqueia o volume criptografado |
sudo mkfs.ext4 /dev/mapper/nome |
Formata o volume desbloqueado |
sudo mount /dev/mapper/nome /mnt/ponto |
Monta o volume criptografado em um diretório |
sudo umount /mnt/ponto |
Desmonta o volume criptografado |
sudo cryptsetup luksClose nome |
Bloqueia o volume criptografado |
sudo mount -t ecryptfs dir dir |
Monta um diretório com eCryptfs |
Considerações Finais
A criptografia de partições com LUKS é uma medida robusta para proteger dados em armazenamento. Já o eCryptfs é ideal para diretórios específicos e pode ser usado em conjunto com outras técnicas de hardening. A escolha entre LUKS e eCryptfs depende da necessidade de proteger um volume inteiro ou apenas um diretório específico.
10. Monitoramento de Logs e Auditoria com Rsyslog e Logwatch
Objetivo:
O monitoramento de logs e auditoria são fundamentais para identificar atividades suspeitas e responder rapidamente a possíveis ameaças. Ferramentas como Rsyslog e Logwatch facilitam a coleta e análise de logs, permitindo que administradores detectem falhas de segurança e comportamentos anômalos.
Conteúdo:
10.1. Configuração do Rsyslog para Centralizar e Monitorar Logs
Rsyslog é uma ferramenta de gerenciamento de logs que oferece alta capacidade de armazenamento e envio de logs, podendo até centralizar logs de vários servidores em um único sistema.
- Instalação do Rsyslog
- Em distribuições Linux modernas, o Rsyslog costuma vir instalado por padrão. Caso contrário, instale-o com:
1 2
sudo apt install rsyslog # Debian/Ubuntu sudo yum install rsyslog # CentOS/RHEL
- Em distribuições Linux modernas, o Rsyslog costuma vir instalado por padrão. Caso contrário, instale-o com:
- Configuração Básica do Rsyslog
- O arquivo de configuração principal do Rsyslog é
/etc/rsyslog.conf
. Abra o arquivo para configuração:1
sudo nano /etc/rsyslog.conf
- Ative a recepção de logs remotos (opcional, para centralização de logs):
1 2 3 4 5 6 7
# Ativar recepção de logs TCP module(load="imtcp") input(type="imtcp" port="514") # Ativar recepção de logs UDP module(load="imudp") input(type="imudp" port="514")
- Essas configurações permitem que o servidor receba logs de outros dispositivos na porta
514
.
- O arquivo de configuração principal do Rsyslog é
- Definição de Filtros para Logs Específicos
- O Rsyslog permite criar filtros específicos para direcionar logs de certos serviços para arquivos dedicados. Por exemplo, para registrar logs de autenticação em um arquivo separado:
1
auth,authpriv.* /var/log/auth.log
- O Rsyslog permite criar filtros específicos para direcionar logs de certos serviços para arquivos dedicados. Por exemplo, para registrar logs de autenticação em um arquivo separado:
- Reiniciar o Rsyslog para Aplicar as Configurações
- Após ajustar as configurações, reinicie o serviço para aplicá-las:
1
sudo systemctl restart rsyslog
- Após ajustar as configurações, reinicie o serviço para aplicá-las:
- Verificação dos Logs
- Para verificar se os logs estão sendo gravados corretamente, visualize o conteúdo dos arquivos:
1
tail -f /var/log/auth.log
- Para verificar se os logs estão sendo gravados corretamente, visualize o conteúdo dos arquivos:
10.2. Configuração do Logwatch para Geração de Relatórios
Logwatch é uma ferramenta que gera relatórios detalhados de eventos registrados no sistema. Ele é muito útil para auditoria, pois agrega logs em relatórios diários que podem ser enviados por e-mail aos administradores.
- Instalação do Logwatch
- Instale o Logwatch com os seguintes comandos:
1 2
sudo apt install logwatch # Debian/Ubuntu sudo yum install logwatch # CentOS/RHEL
- Instale o Logwatch com os seguintes comandos:
- Configuração do Logwatch
- O arquivo de configuração principal do Logwatch está localizado em
/etc/logwatch/conf/logwatch.conf
. Edite-o conforme necessário:1
sudo nano /etc/logwatch/conf/logwatch.conf
- Configure a saída do relatório (exemplo: envio por e-mail):
1 2 3
MailTo = admin@example.com MailFrom = logwatch@example.com Detail = High
- O arquivo de configuração principal do Logwatch está localizado em
- Geração Manual de Relatórios com Logwatch
- Para gerar um relatório manual, use o seguinte comando:
1
sudo logwatch --detail High --mailto admin@example.com --range today
- Esse comando gera um relatório detalhado para o dia atual e o envia ao e-mail especificado.
- Para gerar um relatório manual, use o seguinte comando:
- Configuração de Relatórios Diários Automatizados
- O Logwatch geralmente é executado automaticamente pelo cron. Para ajustar a frequência dos relatórios, edite o cron correspondente em
/etc/cron.daily/00logwatch
.
- O Logwatch geralmente é executado automaticamente pelo cron. Para ajustar a frequência dos relatórios, edite o cron correspondente em
10.3. Exemplo de Configuração de Monitoramento e Relatório
- Configuração de Logs Centralizados com Rsyslog
- Configure o Rsyslog para capturar logs de autenticação e salvá-los em
/var/log/auth.log
, e habilite a recepção de logs de outros servidores na porta514
.
- Configure o Rsyslog para capturar logs de autenticação e salvá-los em
- Configuração do Logwatch para Relatórios Diários de Segurança
- Ajuste o Logwatch para enviar relatórios detalhados diários para o administrador, destacando eventos de autenticação, tentativas de login e outras atividades críticas.
Tabela de Comandos Rápidos
Comando | Descrição |
---|---|
sudo systemctl restart rsyslog |
Reinicia o serviço Rsyslog para aplicar configurações |
tail -f /var/log/auth.log |
Monitora em tempo real o arquivo de logs de autenticação |
sudo logwatch --detail High --range today |
Gera um relatório detalhado para o dia atual |
sudo apt install rsyslog |
Instala o Rsyslog (Debian/Ubuntu) |
sudo yum install logwatch |
Instala o Logwatch (CentOS/RHEL) |
Considerações Finais
Com o Rsyslog, você centraliza e organiza os logs do sistema para facilitar o monitoramento e auditoria. O Logwatch complementa essa abordagem, gerando relatórios periódicos para detectar rapidamente atividades suspeitas. Juntas, essas ferramentas oferecem uma solução robusta para monitoramento de logs e auditoria de segurança.
11. Configuração de Ferramentas de IDS/IPS (Intrusion Detection/Prevention System)
Objetivo:
As ferramentas de IDS (Sistema de Detecção de Intrusão) e IPS (Sistema de Prevenção de Intrusão) ajudam a detectar e bloquear atividades suspeitas e invasões no servidor. Com a configuração de ferramentas como Fail2Ban, AIDE e Tripwire, é possível monitorar, detectar e até bloquear automaticamente ataques comuns, como tentativas de força bruta e modificações indevidas no sistema.
Conteúdo:
11.1. Configuração do Fail2Ban para Bloquear Acessos Suspeitos
Fail2Ban monitora arquivos de log e bloqueia automaticamente endereços IP que tentam acessar o servidor de maneira suspeita (como tentativas de força bruta no SSH).
- Instalação do Fail2Ban
- No Debian/Ubuntu:
1
sudo apt install fail2ban
- No CentOS/RHEL:
1 2
sudo yum install epel-release sudo yum install fail2ban
- No Debian/Ubuntu:
- Configuração Básica do Fail2Ban
- O arquivo principal de configuração é
/etc/fail2ban/jail.conf
. Para customizar sem modificar o arquivo original, crie um arquivo de configuração local:1
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- Abra o arquivo
/etc/fail2ban/jail.local
para configurar os parâmetros de bloqueio:1 2 3 4 5 6 7 8
[sshd] enabled = true port = 22 filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 86400 # Bloqueia o IP por 24 horas findtime = 600 # Janela de 10 minutos para 3 tentativas
- O arquivo principal de configuração é
- Reiniciar o Fail2Ban
- Reinicie o serviço para aplicar as configurações:
1 2
sudo systemctl enable fail2ban sudo systemctl start fail2ban
- Reinicie o serviço para aplicar as configurações:
- Verificação dos IPs Bloqueados
- Para visualizar a lista de IPs bloqueados:
1
sudo fail2ban-client status sshd
- Para visualizar a lista de IPs bloqueados:
11.2. Configuração do AIDE para Auditoria de Integridade de Arquivos
AIDE (Advanced Intrusion Detection Environment) é uma ferramenta de verificação de integridade que monitora modificações em arquivos críticos do sistema, criando uma base de comparação para identificar alterações não autorizadas.
- Instalação do AIDE
- No Debian/Ubuntu:
1
sudo apt install aide
- No CentOS/RHEL:
1
sudo yum install aide
- No Debian/Ubuntu:
- Inicialização e Configuração do Banco de Dados do AIDE
- Após instalar o AIDE, inicie o banco de dados com:
1
sudo aide --init
- O arquivo gerado pode ser copiado para
/var/lib/aide/aide.db
:1
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
- Após instalar o AIDE, inicie o banco de dados com:
- Verificação de Integridade com o AIDE
- Para verificar alterações no sistema:
1
sudo aide --check
- O AIDE compara o estado atual dos arquivos com a base de dados. Qualquer discrepância indica uma possível modificação não autorizada.
- Para verificar alterações no sistema:
- Automatização de Verificações com Cron
- Para agendar verificações regulares, adicione uma tarefa no Cron, como uma verificação diária:
1
sudo nano /etc/cron.daily/aide_check
- Insira o seguinte comando no arquivo:
1 2
#!/bin/bash /usr/bin/aide --check
- Para agendar verificações regulares, adicione uma tarefa no Cron, como uma verificação diária:
11.3. Configuração do Tripwire para Monitoramento de Integridade de Arquivos
Tripwire é uma alternativa ao AIDE que também verifica a integridade de arquivos do sistema, notificando alterações não autorizadas.
- Instalação do Tripwire
- No Debian/Ubuntu:
1
sudo apt install tripwire
- Durante a instalação, o Tripwire pedirá para configurar senhas para o arquivo de política e o banco de dados.
- No Debian/Ubuntu:
- Configuração Inicial do Banco de Dados
- Após a instalação, inicialize o banco de dados:
1
sudo tripwire --init
- Após a instalação, inicialize o banco de dados:
- Verificação de Integridade com o Tripwire
- Para verificar a integridade do sistema:
1
sudo tripwire --check
- O Tripwire gerará um relatório detalhado listando qualquer modificação detectada.
- Para verificar a integridade do sistema:
- Atualização da Política e Banco de Dados do Tripwire
- Se novas configurações forem adicionadas, atualize o banco de dados do Tripwire com o seguinte comando:
1
sudo tripwire --update-policy /etc/tripwire/twpol.txt
- Se novas configurações forem adicionadas, atualize o banco de dados do Tripwire com o seguinte comando:
Exemplo de Configuração Completa de IDS/IPS
- Configuração do Fail2Ban para bloquear tentativas de login SSH suspeitas, limitando-as a 3 tentativas a cada 10 minutos.
- Configuração do AIDE e Tripwire para auditoria de integridade, verificando regularmente a consistência de arquivos críticos e notificando o administrador sobre qualquer alteração não autorizada.
Tabela de Comandos Rápidos
Comando | Descrição |
---|---|
sudo systemctl start fail2ban |
Inicia o serviço Fail2Ban |
sudo fail2ban-client status sshd |
Exibe o status dos IPs bloqueados pelo Fail2Ban |
sudo aide --init |
Inicializa o banco de dados do AIDE |
sudo aide --check |
Executa uma verificação de integridade com o AIDE |
sudo tripwire --init |
Inicializa o banco de dados do Tripwire |
sudo tripwire --check |
Executa uma verificação de integridade com o Tripwire |
Considerações Finais
Configurar ferramentas de IDS/IPS é essencial para monitorar e proteger o sistema contra atividades maliciosas. O Fail2Ban protege contra tentativas de login suspeitas, enquanto o AIDE e o Tripwire monitoram a integridade de arquivos, detectando e notificando sobre alterações não autorizadas. Essas ferramentas, configuradas corretamente, aumentam consideravelmente a segurança do servidor em produção.
12. Auditoria de Integridade de Arquivos e Detecção de Modificações
Objetivo:
A auditoria de integridade de arquivos é uma prática de segurança que visa monitorar e detectar modificações em arquivos críticos do sistema. Ferramentas como AIDE (Advanced Intrusion Detection Environment) e Tripwire permitem que administradores identifiquem mudanças não autorizadas em arquivos e diretórios importantes, ajudando a detectar atividades maliciosas e invasões.
Conteúdo:
12.1. Configuração Avançada do AIDE para Auditoria de Integridade
O AIDE é uma ferramenta leve e configurável para verificação de integridade, ideal para monitorar alterações em arquivos de sistema.
- Instalação do AIDE
- No Ubuntu e Debian:
1
sudo apt install aide
- No CentOS e RHEL:
1
sudo yum install aide
- No Ubuntu e Debian:
- Configuração Inicial do Banco de Dados do AIDE
- Após a instalação, inicialize o banco de dados com o estado atual dos arquivos:
1
sudo aide --init
- Copie o arquivo gerado para o banco de dados ativo do AIDE:
1
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
- Após a instalação, inicialize o banco de dados com o estado atual dos arquivos:
- Customização do Arquivo de Configuração do AIDE
- O arquivo de configuração do AIDE geralmente está localizado em
/etc/aide/aide.conf
. Ele define quais arquivos e diretórios serão monitorados e o tipo de verificação aplicada (permissões, tamanho, checksum, etc.). - Para monitorar apenas arquivos críticos, edite o arquivo e ajuste as configurações conforme necessário. Exemplo:
1 2 3
/etc FSP # Monitorar permissões, tamanho e conteúdo dos arquivos em /etc /usr/bin FSP /usr/sbin FSP
- O arquivo de configuração do AIDE geralmente está localizado em
- Execução de Verificações Regulares
- Para realizar uma verificação de integridade:
1
sudo aide --check
- O AIDE compara o estado atual dos arquivos com o banco de dados. Qualquer alteração detectada será listada.
- Para realizar uma verificação de integridade:
- Automatização de Verificações com Cron
- Crie uma tarefa no Cron para realizar verificações regulares. Adicione um arquivo de script em
/etc/cron.daily/aide_check
:1
sudo nano /etc/cron.daily/aide_check
- Insira o seguinte comando no arquivo:
1 2
#!/bin/bash /usr/bin/aide --check
- Salve o arquivo e dê permissão de execução:
1
sudo chmod +x /etc/cron.daily/aide_check
- Crie uma tarefa no Cron para realizar verificações regulares. Adicione um arquivo de script em
12.2. Configuração Avançada do Tripwire para Auditoria de Integridade
Tripwire é outra ferramenta de verificação de integridade, popular para ambientes empresariais e que fornece relatórios detalhados sobre alterações em arquivos monitorados.
- Instalação do Tripwire
- No Ubuntu/Debian:
1
sudo apt install tripwire
- Durante a instalação, o Tripwire solicitará a criação de senhas para o banco de dados e arquivo de política. Guarde essas senhas em local seguro.
- No Ubuntu/Debian:
- Inicialização do Banco de Dados do Tripwire
- Após a instalação, inicialize o banco de dados para registrar o estado atual dos arquivos:
1
sudo tripwire --init
- Após a instalação, inicialize o banco de dados para registrar o estado atual dos arquivos:
- Configuração do Arquivo de Política do Tripwire
- O arquivo de política do Tripwire (
/etc/tripwire/twpol.txt
) define os arquivos e diretórios a serem monitorados, além das verificações específicas aplicadas. Edite o arquivo para incluir ou remover diretórios de acordo com as necessidades de auditoria.
- O arquivo de política do Tripwire (
- Verificação de Integridade com o Tripwire
- Para realizar uma verificação:
1
sudo tripwire --check
- Após a verificação, o Tripwire gera um relatório listando quaisquer alterações detectadas nos arquivos monitorados.
- Para realizar uma verificação:
- Atualização da Política e do Banco de Dados do Tripwire
- Após modificações nos arquivos de sistema, pode ser necessário atualizar a base de dados do Tripwire. Para isso, edite o arquivo de política, gere uma nova base de dados e atualize o sistema:
1 2
sudo tripwire --update-policy /etc/tripwire/twpol.txt sudo tripwire --init
- Após modificações nos arquivos de sistema, pode ser necessário atualizar a base de dados do Tripwire. Para isso, edite o arquivo de política, gere uma nova base de dados e atualize o sistema:
Exemplo Prático de Auditoria com AIDE e Tripwire
- Configuração Básica do AIDE para Monitoramento de Diretórios Críticos
- Configure o AIDE para monitorar
/etc
,/usr/bin
,/usr/sbin
, e faça uma verificação regular para detectar alterações.
- Configure o AIDE para monitorar
- Verificação Diária com Tripwire
- Configure o Tripwire para enviar relatórios diários e verificar arquivos críticos. Automatize a execução via cron para garantir monitoramento constante.
Tabela de Comandos Rápidos
Comando | Descrição |
---|---|
sudo aide --init |
Inicializa o banco de dados do AIDE |
sudo aide --check |
Executa verificação de integridade com o AIDE |
sudo tripwire --init |
Inicializa o banco de dados do Tripwire |
sudo tripwire --check |
Executa verificação de integridade com o Tripwire |
sudo tripwire --update-policy twpol.txt |
Atualiza a política do Tripwire |
Considerações Finais
O AIDE e o Tripwire são ferramentas valiosas para auditoria de integridade, fornecendo relatórios detalhados sobre modificações de arquivos críticos. Com essas ferramentas, administradores podem identificar rapidamente alterações não autorizadas, permitindo uma resposta rápida a possíveis ameaças.
13. Proteção de Serviços Web e Aplicações
Objetivo:
Fortalecer a segurança de serviços web e aplicações hospedadas no servidor, como Apache e Nginx. Essas medidas protegem o ambiente contra ataques comuns na web, como ataques de injeção, cross-site scripting (XSS) e ataques de negação de serviço (DoS), melhorando a segurança dos serviços expostos.
Conteúdo:
13.1. Configuração de Segurança no Apache e Nginx
Apache e Nginx são dois dos servidores web mais usados em Linux. Ambos oferecem opções para reforçar a segurança do serviço e mitigar vulnerabilidades.
Configurações no Apache
- Desativar Listagem de Diretórios
- A listagem de diretórios expõe o conteúdo de diretórios não protegidos. Para desativá-la, edite o arquivo de configuração do Apache:
1
sudo nano /etc/apache2/apache2.conf
- Certifique-se de que as diretivas
Options -Indexes
estejam configuradas:1 2 3
<Directory /var/www/> Options -Indexes </Directory>
- A listagem de diretórios expõe o conteúdo de diretórios não protegidos. Para desativá-la, edite o arquivo de configuração do Apache:
- Esconder a Versão do Apache
- Para ocultar a versão do Apache e o sistema operacional, ajuste as diretivas
ServerTokens
eServerSignature
:1 2
ServerTokens Prod ServerSignature Off
- Para ocultar a versão do Apache e o sistema operacional, ajuste as diretivas
- Ativar Módulo de Cabeçalhos de Segurança
- Adicione cabeçalhos HTTP para proteger contra XSS e Clickjacking:
1
sudo a2enmod headers
- Edite o arquivo de configuração do site:
1 2 3
Header always set X-Content-Type-Options "nosniff" Header always set X-Frame-Options "DENY" Header always set X-XSS-Protection "1; mode=block"
- Adicione cabeçalhos HTTP para proteger contra XSS e Clickjacking:
Configurações no Nginx
- Desativar Exibição de Versão
- No Nginx, desative a exibição de versão para reduzir as informações expostas:
1
sudo nano /etc/nginx/nginx.conf
- Adicione a linha:
1
server_tokens off;
- No Nginx, desative a exibição de versão para reduzir as informações expostas:
- Configurar Cabeçalhos de Segurança
- Adicione cabeçalhos HTTP para proteger contra ataques de XSS e clickjacking. No bloco
server
do arquivo de configuração do site, adicione:1 2 3
add_header X-Content-Type-Options "nosniff"; add_header X-Frame-Options "DENY"; add_header X-XSS-Protection "1; mode=block";
- Adicione cabeçalhos HTTP para proteger contra ataques de XSS e clickjacking. No bloco
- Reiniciar o Serviço
- Após configurar, reinicie o serviço para aplicar as mudanças:
1 2
sudo systemctl restart apache2 # Para Apache sudo systemctl restart nginx # Para Nginx
- Após configurar, reinicie o serviço para aplicar as mudanças:
13.2. Configuração de SSL/TLS para Conexões Seguras
- Instalação de Certificado SSL com Let’s Encrypt
- Let’s Encrypt oferece certificados SSL gratuitos. Instale o Certbot para Apache ou Nginx:
1 2
sudo apt install certbot python3-certbot-apache # Para Apache sudo apt install certbot python3-certbot-nginx # Para Nginx
- Solicite um certificado:
1 2
sudo certbot --apache # Para Apache sudo certbot --nginx # Para Nginx
- Let’s Encrypt oferece certificados SSL gratuitos. Instale o Certbot para Apache ou Nginx:
- Forçar Redirecionamento para HTTPS
- Configure o servidor para redirecionar todas as conexões HTTP para HTTPS. No Apache, adicione o seguinte:
1 2 3 4
<VirtualHost *:80> ServerName example.com Redirect permanent / https://example.com/ </VirtualHost>
- No Nginx, adicione:
1 2 3 4 5
server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; }
- Configure o servidor para redirecionar todas as conexões HTTP para HTTPS. No Apache, adicione o seguinte:
13.3. Configuração do ModSecurity para Proteção Web
ModSecurity é um firewall de aplicação web (WAF) que protege contra ataques comuns em aplicações web.
- Instalação do ModSecurity
- No Apache:
1
sudo apt install libapache2-mod-security2
- No Nginx:
1
sudo apt install libnginx-mod-security
- No Apache:
- Ativação do ModSecurity
- No Apache, habilite o módulo ModSecurity:
1
sudo a2enmod security2
- Configure o arquivo de exemplo
modsecurity.conf
:1
sudo nano /etc/modsecurity/modsecurity.conf
- Ative o modo de bloqueio alterando a linha:
1
SecRuleEngine On
- No Apache, habilite o módulo ModSecurity:
- Aplicação das Regras OWASP (Opcional)
- As regras OWASP (Open Web Application Security Project) são uma coleção de regras de segurança que protegem contra uma ampla gama de ataques. Para aplicá-las, baixe e instale as regras OWASP:
1
sudo apt install owasp-modsecurity-crs
- Inclua-as no arquivo de configuração do ModSecurity:
1
IncludeOptional /usr/share/modsecurity-crs/*.conf
- As regras OWASP (Open Web Application Security Project) são uma coleção de regras de segurança que protegem contra uma ampla gama de ataques. Para aplicá-las, baixe e instale as regras OWASP:
- Reiniciar o Servidor
- Após configurar o ModSecurity, reinicie o serviço:
1 2
sudo systemctl restart apache2 # Para Apache sudo systemctl restart nginx # Para Nginx
- Após configurar o ModSecurity, reinicie o serviço:
13.4. Configuração de Fail2Ban para Proteger Serviços Web
- Adicionar Filtros para Ataques Web
- Edite o arquivo
/etc/fail2ban/jail.local
para proteger serviços web. Adicione um filtro para o Apache:1 2 3 4 5 6
[apache-auth] enabled = true filter = apache-auth logpath = /var/log/apache2/*error.log maxretry = 3 bantime = 3600
- Edite o arquivo
- Reiniciar o Fail2Ban
- Reinicie o Fail2Ban para aplicar a configuração:
1
sudo systemctl restart fail2ban
- Reinicie o Fail2Ban para aplicar a configuração:
Exemplo Prático de Proteção de Serviço Web
- Configurar Apache ou Nginx para ocultar a versão do servidor e adicionar cabeçalhos de segurança.
- Configurar SSL/TLS com Let’s Encrypt e redirecionar o tráfego HTTP para HTTPS.
- Instalar e Configurar ModSecurity para proteger contra ataques web comuns.
- Configurar Fail2Ban para bloquear tentativas de autenticação excessivas no Apache.
Tabela de Comandos Rápidos
Comando | Descrição |
---|---|
sudo systemctl restart apache2 |
Reinicia o Apache para aplicar configurações |
sudo certbot --apache |
Solicita certificado SSL para o Apache |
sudo apt install libapache2-mod-security2 |
Instala o ModSecurity para Apache |
sudo systemctl restart fail2ban |
Reinicia o Fail2Ban para aplicar filtros |
sudo nano /etc/nginx/nginx.conf |
Edita o arquivo de configuração principal do Nginx |
Considerações Finais
As configurações de segurança para servidores web, como o Apache e o Nginx, ajudam a proteger contra ataques comuns à camada de aplicação. O uso de SSL/TLS, cabeçalhos de segurança, ModSecurity e Fail2Ban aumenta a segurança, minimizando vulnerabilidades e dificultando invasões.
14. Configuração de SELinux e AppArmor para Controle de Acesso
Objetivo:
Usar SELinux ou AppArmor para restringir permissões e controle de acesso a processos e serviços no sistema. Essas ferramentas aplicam políticas de segurança adicionais que limitam os recursos e arquivos que cada serviço pode acessar, mesmo que seja comprometido.
Conteúdo:
14.1. SELinux: Introdução e Configuração
SELinux (Security-Enhanced Linux) é um módulo de segurança que controla o acesso de processos e usuários a recursos do sistema usando políticas de segurança.
- Verificação do Status do SELinux
- Verifique se o SELinux está ativado com o comando:
1
sudo sestatus
- Verifique se o SELinux está ativado com o comando:
- Modos de Operação do SELinux
- Enforcing: Força todas as políticas configuradas e bloqueia acessos não permitidos.
- Permissive: Registra alertas de políticas de segurança, mas não bloqueia os acessos.
- Disabled: Desativa o SELinux.
- Alterar o Modo do SELinux
- O arquivo de configuração principal é
/etc/selinux/config
. Para modificar o modo, edite este arquivo:1
sudo nano /etc/selinux/config
- Altere a linha
SELINUX=
para um dos modos:1 2 3
SELINUX=enforcing # Ativa o modo Enforcing SELINUX=permissive # Ativa o modo Permissive SELINUX=disabled # Desativa o SELinux
- O arquivo de configuração principal é
- Aplicação de Políticas e Contextos de Segurança
- O SELinux usa contextos de segurança para definir o que cada processo pode fazer. Por exemplo, para verificar o contexto de um arquivo específico:
1
ls -Z /caminho/do/arquivo
- Para aplicar um contexto a um arquivo:
1
sudo chcon -t httpd_sys_content_t /var/www/html/index.html
- No exemplo, o contexto
httpd_sys_content_t
permite que o Apache acesse o arquivo.
- O SELinux usa contextos de segurança para definir o que cada processo pode fazer. Por exemplo, para verificar o contexto de um arquivo específico:
- Ferramentas Úteis para SELinux
- audit2allow: Gera regras de permissões baseadas em eventos registrados, útil para resolver problemas de permissão.
1 2
sudo cat /var/log/audit/audit.log | audit2allow -M meu_modulo sudo semodule -i meu_modulo.pp
- audit2allow: Gera regras de permissões baseadas em eventos registrados, útil para resolver problemas de permissão.
14.2. AppArmor: Introdução e Configuração
AppArmor é uma alternativa ao SELinux, comumente usada no Ubuntu e Debian. Ele permite definir perfis de acesso para aplicativos, restringindo o que cada serviço pode acessar.
- Instalação e Ativação do AppArmor
- Em sistemas baseados em Ubuntu, o AppArmor geralmente já vem instalado e ativo. Para instalar, use:
1
sudo apt install apparmor apparmor-utils
- Em sistemas baseados em Ubuntu, o AppArmor geralmente já vem instalado e ativo. Para instalar, use:
- Verificação do Status do AppArmor
- Verifique se o AppArmor está ativo:
1
sudo apparmor_status
- Verifique se o AppArmor está ativo:
- Modos de Operação do AppArmor
- Enforce: Aplica as políticas de segurança configuradas e bloqueia acessos não permitidos.
- Complain: Apenas registra alertas de políticas sem bloquear acessos, permitindo observar quais acessos seriam negados.
- Gerenciamento de Perfis do AppArmor
- Perfis do AppArmor são arquivos de configuração que definem as permissões de cada serviço e estão localizados em
/etc/apparmor.d/
. - Para definir um serviço para o modo
enforce
, use:1
sudo aa-enforce /etc/apparmor.d/usr.sbin.apache2
- Para definir um serviço para o modo
complain
:1
sudo aa-complain /etc/apparmor.d/usr.sbin.apache2
- Perfis do AppArmor são arquivos de configuração que definem as permissões de cada serviço e estão localizados em
- Criação e Modificação de Perfis de Segurança
- Para configurar um perfil personalizado, você pode usar o
aa-genprof
para gerar um perfil baseado no comportamento do serviço.1
sudo aa-genprof /usr/sbin/nginx
- O AppArmor monitorará o serviço e solicitará permissões à medida que ele tenta acessar arquivos e recursos, permitindo uma configuração personalizada.
- Para configurar um perfil personalizado, você pode usar o
14.3. Exemplo Prático: Configuração de SELinux e AppArmor para Controle de Acesso
- Configuração do SELinux no Apache
- Verifique o contexto de segurança do diretório
/var/www/html
e defina-o para que o Apache possa acessar:1
sudo chcon -R -t httpd_sys_content_t /var/www/html
- Verifique o contexto de segurança do diretório
- Configuração do AppArmor para Proteger o Nginx
- Use o
aa-genprof
para criar um perfil de controle de acesso para o Nginx:1
sudo aa-genprof /usr/sbin/nginx
- Teste o perfil no modo
enforce
para limitar o que o Nginx pode acessar.
- Use o
Tabela de Comandos Rápidos
Comando | Descrição |
---|---|
sudo sestatus |
Verifica o status do SELinux |
sudo nano /etc/selinux/config |
Altera o modo do SELinux |
ls -Z /caminho/do/arquivo |
Exibe o contexto de segurança de um arquivo |
sudo apparmor_status |
Verifica o status do AppArmor |
sudo aa-enforce /etc/apparmor.d/perfil |
Define o perfil AppArmor para o modo Enforce |
sudo aa-genprof /caminho/do/servico |
Gera um perfil de AppArmor com base no comportamento do serviço |
Considerações Finais
SELinux e AppArmor são sistemas de controle de acesso que oferecem proteção adicional ao restringir os serviços e processos dentro de seus respectivos contextos e perfis de segurança. Ambos são fundamentais em hardening de ambientes de produção, especialmente em servidores que hospedam serviços e aplicativos críticos.
15. Configuração de Backups e Recuperação de Dados
Objetivo:
Configurar um sistema de backup regular para garantir que dados críticos possam ser recuperados em caso de falha no sistema, erro humano, ou ataque de ransomware. Realizar backups regulares é uma prática essencial em hardening, permitindo que dados e configurações sejam restaurados rapidamente.
Conteúdo:
15.1. Práticas de Backup e Ferramentas Comuns
- Tipos de Backup:
- Completo: Cria uma cópia completa de todos os dados especificados. É o mais seguro, porém consome mais espaço e tempo.
- Incremental: Faz backup apenas dos arquivos modificados desde o último backup, economizando espaço e tempo.
- Diferencial: Faz backup de todos os arquivos modificados desde o último backup completo. O espaço e o tempo aumentam gradualmente entre backups completos.
- Ferramentas Comuns de Backup:
- rsync: Ferramenta de sincronização e backup de arquivos eficiente, muito usada para backups locais e remotos.
- tar: Comprime diretórios inteiros em arquivos
.tar
,.gz
ou.bz2
, útil para backups completos. - rsnapshot: Baseado em
rsync
, é uma ferramenta para backups incrementais. - Bacula e Duplicity: Ferramentas avançadas para backup com suporte a compressão e criptografia.
15.2. Configuração de Backup com rsync
rsync é uma das ferramentas de backup mais populares em Linux, especialmente para backups incrementais e sincronização de arquivos em servidores locais e remotos.
- Backup Local com rsync
- Execute o seguinte comando para copiar e sincronizar o diretório
/dados
para o diretório de backup/backup/dados
:1
sudo rsync -a --delete /dados/ /backup/dados/
- A opção
-a
preserva permissões, datas e links simbólicos, enquanto--delete
remove arquivos no diretório de destino que foram excluídos na origem.
- Execute o seguinte comando para copiar e sincronizar o diretório
- Backup Remoto com rsync
- Para realizar um backup remoto, especifique o IP e diretório do servidor de destino:
1
sudo rsync -a /dados/ usuario@servidor_destino:/backup/dados/
- Para realizar um backup remoto, especifique o IP e diretório do servidor de destino:
- Automatização de Backups com Cron
- Agende backups automáticos usando Cron. Edite o Cron para realizar um backup diário:
1
sudo crontab -e
- Adicione uma entrada para rodar o backup todos os dias às 2h:
1
0 2 * * * rsync -a --delete /dados/ /backup/dados/
- Agende backups automáticos usando Cron. Edite o Cron para realizar um backup diário:
15.3. Backup Completo com tar
tar é uma ferramenta de compactação útil para criar backups completos de diretórios e arquivos. Geralmente, ele é usado junto com a compressão gzip
ou bzip2
.
- Criação de um Backup Completo com tar
- Para compactar o diretório
/dados
em um arquivobackup_dados.tar.gz
:1
sudo tar -czvf /backup/backup_dados.tar.gz /dados
- As opções
-czvf
indicam: criar (c
), compactar com gzip (z
), verbose (v
para exibir progresso), e especificar o nome do arquivo (f
).
- Para compactar o diretório
- Agendamento de Backup com tar e Cron
- Adicione uma tarefa ao Cron para realizar um backup semanal:
1
0 3 * * 1 tar -czvf /backup/backup_dados_$(date +\%F).tar.gz /dados
- Adicione uma tarefa ao Cron para realizar um backup semanal:
15.4. Automação de Backups Incrementais com rsnapshot
rsnapshot é uma ferramenta baseada em rsync
que realiza backups incrementais, economizando espaço e mantendo várias versões dos arquivos.
- Instalação do rsnapshot
- No Debian/Ubuntu:
1
sudo apt install rsnapshot
- No Debian/Ubuntu:
- Configuração do rsnapshot
- O arquivo de configuração principal está em
/etc/rsnapshot.conf
. Edite o arquivo e defina os diretórios de backup e intervalos:1 2 3 4
snapshot_root /backup/rsnapshot/ interval daily 7 interval weekly 4 backup /dados/ localhost/
- O arquivo de configuração principal está em
- Execução de Backups com rsnapshot
- Para executar um backup diário:
1
sudo rsnapshot daily
- Para executar um backup diário:
- Automatização com Cron
- O rsnapshot adiciona automaticamente tarefas ao Cron para realizar backups de acordo com os intervalos configurados (
daily
,weekly
).
- O rsnapshot adiciona automaticamente tarefas ao Cron para realizar backups de acordo com os intervalos configurados (
15.5. Recuperação de Dados
- Restauração com rsync
- Para restaurar dados do backup feito com
rsync
, inverta a origem e o destino:1
sudo rsync -a /backup/dados/ /dados/
- Para restaurar dados do backup feito com
- Restauração com tar
- Para restaurar o backup criado com
tar
:1
sudo tar -xzvf /backup/backup_dados.tar.gz -C /
- Para restaurar o backup criado com
- Restauração com rsnapshot
- Para restaurar um backup específico com
rsnapshot
, copie o diretório correspondente:1
sudo rsync -a /backup/rsnapshot/daily.0/dados/ /dados/
- Para restaurar um backup específico com
Tabela de Comandos Rápidos
Comando | Descrição |
---|---|
rsync -a --delete /dados/ /backup/dados/ |
Executa um backup incremental com rsync |
tar -czvf /backup/backup_dados.tar.gz /dados |
Cria um backup completo com tar |
rsnapshot daily |
Executa um backup diário com rsnapshot |
crontab -e |
Edita as tarefas do Cron para automação de backups |
sudo tar -xzvf /backup/backup_dados.tar.gz -C / |
Restaura um backup compactado com tar |
Considerações Finais
Implementar backups regulares é essencial para garantir a continuidade dos serviços e a recuperação de dados em caso de perda ou comprometimento. A escolha entre rsync
, tar
e rsnapshot
depende das necessidades específicas, como frequência dos backups e volume de dados. A automação dos backups com Cron complementa essas ferramentas, permitindo que backups sejam feitos de forma regular e sem intervenção manual.
Excelente ideia! O rclone é uma ferramenta poderosa para gerenciar e sincronizar arquivos em provedores de armazenamento em nuvem, ideal para backups remotos. Vamos adicionar uma subseção sobre o rclone na Seção 15.
15.6. Backup em Nuvem com rclone
rclone permite sincronizar e fazer backups de arquivos para vários serviços de armazenamento em nuvem, incluindo Google Drive, Dropbox, Amazon S3, Azure Blob Storage, entre outros.
Instalação e Configuração Básica do rclone
- Instalação do rclone
- No Debian/Ubuntu:
1
sudo apt install rclone
- Em outras distribuições, consulte o site oficial do rclone para opções de instalação: https://rclone.org/downloads/
- No Debian/Ubuntu:
- Configuração do rclone com um Provedor de Nuvem
- Inicie a configuração:
1
rclone config
- Siga as etapas do assistente para configurar uma conexão com o serviço de nuvem desejado (ex.: Google Drive, Amazon S3). No final, o rclone criará uma configuração para o serviço, que você poderá identificar pelo nome escolhido (ex.:
meudrive
).
- Inicie a configuração:
- Verificar a Conexão com o Provedor de Nuvem
- Para testar a conexão e verificar os arquivos do serviço configurado:
1
rclone ls meudrive:
- Substitua
meudrive
pelo nome configurado no rclone.
- Para testar a conexão e verificar os arquivos do serviço configurado:
Realizando Backups com o rclone
- Backup Completo de um Diretório Local para a Nuvem
- Use o rclone para sincronizar o diretório
/dados
para um diretório de backup na nuvem:1
rclone sync /dados meudrive:/backup/dados
- O comando
sync
faz a sincronização completa, excluindo arquivos no destino que não existem mais na origem.
- Use o rclone para sincronizar o diretório
- Backup Incremental com rclone
- Se preferir preservar versões anteriores dos arquivos, utilize o comando
copy
em vez desync
:1
rclone copy /dados meudrive:/backup/dados
- Se preferir preservar versões anteriores dos arquivos, utilize o comando
- Criptografia de Dados com rclone
- O rclone suporta criptografia de dados para segurança extra. Para configurá-la, edite o arquivo de configuração do rclone e crie uma nova “remessa” (remote) criptografada com
rclone config
, adicionando uma camada de segurança para seus dados em nuvem.
- O rclone suporta criptografia de dados para segurança extra. Para configurá-la, edite o arquivo de configuração do rclone e crie uma nova “remessa” (remote) criptografada com
Agendamento de Backups com rclone e Cron
- Configuração de um Backup Automático com rclone
- Para realizar backups diários na nuvem, adicione uma entrada no Cron:
1
sudo crontab -e
- Adicione o seguinte comando para realizar um backup completo diário às 4h da manhã:
1
0 4 * * * rclone sync /dados meudrive:/backup/dados
- Para realizar backups diários na nuvem, adicione uma entrada no Cron:
- Verificação e Monitoramento dos Backups
- rclone pode ser configurado para gerar logs de atividades. No comando de backup do Cron, redirecione a saída para um arquivo de log para facilitar o monitoramento:
1
0 4 * * * rclone sync /dados meudrive:/backup/dados >> /var/log/rclone_backup.log 2>&1
- rclone pode ser configurado para gerar logs de atividades. No comando de backup do Cron, redirecione a saída para um arquivo de log para facilitar o monitoramento:
Exemplo de Configuração Completa de Backup com rclone
- Configurar o rclone para conectar-se ao Google Drive, Amazon S3 ou outro serviço de nuvem.
- Sincronizar o diretório
/dados
para o armazenamento na nuvem, utilizando a opçãosync
para backups completos oucopy
para backups incrementais. - Automatizar o backup diário com Cron, incluindo logs para monitoramento.
Tabela de Comandos Rápidos (rclone)
Comando | Descrição |
---|---|
rclone config |
Configura uma nova conexão com um serviço de nuvem |
rclone sync /dados meudrive:/backup/dados |
Sincroniza o diretório /dados com o backup na nuvem |
rclone copy /dados meudrive:/backup/dados |
Copia arquivos modificados para a nuvem, sem apagar versões anteriores |
rclone ls meudrive:/backup |
Lista os arquivos no diretório remoto de backup |
rclone sync /dados meudrive:/backup/dados >> /var/log/rclone_backup.log 2>&1 |
Sincroniza com log |
Considerações Finais
O rclone amplia a estratégia de backup com a possibilidade de armazenar dados em nuvem, oferecendo uma camada adicional de segurança para recuperação de desastres e garantindo que os backups estejam seguros, mesmo em caso de falha física no servidor. A automação com Cron torna o processo contínuo e confiável.
16. Monitoramento de Vulnerabilidades e Atualizações de Segurança
Objetivo:
Manter o sistema protegido contra ameaças emergentes através do monitoramento contínuo de vulnerabilidades e da aplicação de atualizações de segurança. Ferramentas como Lynis, chkrootkit e ClamAV são fundamentais para monitorar vulnerabilidades, detectar malware e rootkits, e manter o sistema atualizado e protegido contra novas ameaças.
Conteúdo:
16.1. Monitoramento de Vulnerabilidades com Lynis
Lynis é uma ferramenta de auditoria de segurança para sistemas Linux e Unix que analisa o sistema em busca de vulnerabilidades e verifica se as práticas recomendadas estão em uso.
- Instalação do Lynis
- No Debian/Ubuntu:
1
sudo apt install lynis
- No CentOS/RHEL:
1 2
sudo yum install epel-release sudo yum install lynis
- No Debian/Ubuntu:
- Execução de Auditoria de Segurança com Lynis
- Execute uma auditoria completa do sistema com o seguinte comando:
1
sudo lynis audit system
- O Lynis gera um relatório detalhado, listando possíveis vulnerabilidades, recomendações de segurança e pontuação geral de segurança do sistema.
- Execute uma auditoria completa do sistema com o seguinte comando:
- Interpretação do Relatório
- O relatório exibe informações de áreas como autenticação, rede, permissões de arquivos e configurações de firewall.
- Para uma análise contínua, crie um log das auditorias para revisar e implementar as recomendações de segurança listadas.
16.2. Verificação de Rootkits com chkrootkit
chkrootkit é uma ferramenta que verifica o sistema em busca de rootkits — programas maliciosos que tentam obter e manter acesso ao sistema de forma encoberta.
- Instalação do chkrootkit
- No Debian/Ubuntu:
1
sudo apt install chkrootkit
- No CentOS/RHEL:
1
sudo yum install chkrootkit
- No Debian/Ubuntu:
- Execução de Verificação com chkrootkit
- Para realizar uma verificação completa:
1
sudo chkrootkit
- O chkrootkit analisa o sistema e exibe uma lista de possíveis rootkits detectados. Revise os resultados e, se necessário, tome medidas corretivas.
- Para realizar uma verificação completa:
- Automatização de Verificações
- Adicione uma tarefa no Cron para realizar verificações semanais e redirecionar os resultados para um log:
1
0 3 * * 7 /usr/sbin/chkrootkit > /var/log/chkrootkit.log 2>&1
- Adicione uma tarefa no Cron para realizar verificações semanais e redirecionar os resultados para um log:
16.3. Verificação de Malware com ClamAV
ClamAV é um antivírus de código aberto, amplamente utilizado para detectar malware, trojans, e outros arquivos maliciosos.
- Instalação do ClamAV
- No Debian/Ubuntu:
1
sudo apt install clamav clamav-daemon
- No CentOS/RHEL:
1 2
sudo yum install epel-release sudo yum install clamav clamav-update
- No Debian/Ubuntu:
- Atualização do Banco de Dados de Assinaturas do ClamAV
- Atualize o banco de dados de assinaturas antes de realizar a primeira verificação:
1
sudo freshclam
- Atualize o banco de dados de assinaturas antes de realizar a primeira verificação:
- Execução de uma Verificação Completa com ClamAV
- Para realizar uma verificação completa do diretório
/home
:1
sudo clamscan -r /home
- Use a opção
--remove
para excluir arquivos infectados automaticamente:1
sudo clamscan -r --remove /home
- Para realizar uma verificação completa do diretório
- Automatização de Verificações de Malware com Cron
- Configure uma verificação regular com Cron. Por exemplo, para realizar uma verificação diária às 2h da manhã:
1
0 2 * * * clamscan -r /home >> /var/log/clamav_scan.log 2>&1
- Configure uma verificação regular com Cron. Por exemplo, para realizar uma verificação diária às 2h da manhã:
16.4. Configuração de Alertas de Vulnerabilidades e Atualizações de Segurança
- Configuração de Atualizações Automáticas
- Em sistemas Debian/Ubuntu, utilize
unattended-upgrades
para aplicar atualizações de segurança automaticamente:1 2
sudo apt install unattended-upgrades sudo dpkg-reconfigure --priority=low unattended-upgrades
- Em sistemas Debian/Ubuntu, utilize
- Monitoramento de Vulnerabilidades com o Serviço de Alertas
- Inscreva-se em listas de alertas de segurança, como o US-CERT ou o NVD (National Vulnerability Database), para receber notificações sobre vulnerabilidades recentes.
Exemplo Prático de Configuração de Monitoramento de Vulnerabilidades
- Execução Regular do Lynis para auditoria de segurança e implementação das recomendações encontradas.
- Verificação Automática de Rootkits e Malware usando o chkrootkit e ClamAV, com relatórios agendados.
- Configuração de Atualizações Automáticas para manter o sistema protegido contra vulnerabilidades conhecidas.
Tabela de Comandos Rápidos
Comando | Descrição |
---|---|
sudo lynis audit system |
Executa uma auditoria de segurança com o Lynis |
sudo chkrootkit |
Verifica o sistema em busca de rootkits |
sudo freshclam |
Atualiza o banco de dados do ClamAV |
sudo clamscan -r /home |
Realiza uma verificação de malware no diretório /home |
sudo apt install unattended-upgrades |
Instala e configura atualizações automáticas no Ubuntu/Debian |
Considerações Finais
A execução periódica de auditorias de segurança e verificações de rootkits e malware é fundamental para detectar vulnerabilidades e proteger o sistema contra ameaças emergentes. Com o monitoramento contínuo e a aplicação de atualizações automáticas, o servidor se mantém seguro contra novas explorações.
17. Práticas Recomendadas para Hardening e Segurança em Produção
Objetivo:
Consolidar as melhores práticas de segurança para hardening de servidores em produção. Esta seção servirá como um checklist prático, cobrindo pontos críticos de segurança que devem ser revisados periodicamente, garantindo que o servidor permaneça protegido ao longo do tempo.
Conteúdo:
17.1. Checklist de Boas Práticas para Hardening
Aqui está um checklist com práticas recomendadas que devem ser seguidas para hardening em servidores Linux em produção.
Área | Prática | Status |
---|---|---|
Atualizações | Configurar atualizações automáticas para pacotes de segurança | [ ] |
Controle de Acesso | Desativar login root via SSH e usar autenticação com chave pública | [ ] |
Configurar controle de acesso baseado em IP e restringir a usuários específicos | [ ] | |
Firewall | Configurar UFW/iptables/FirewallD para permitir apenas tráfego necessário | [ ] |
Implementar Port Knocking e VPN para proteger o acesso SSH | [ ] | |
Segurança SSH | Alterar a porta padrão do SSH e ativar autenticação multifatorial (MFA) | [ ] |
Monitoramento de Logs | Configurar Rsyslog e Logwatch para monitorar e enviar alertas sobre logs críticos | [ ] |
Integridade | Configurar AIDE ou Tripwire para auditoria de integridade de arquivos | [ ] |
IDS/IPS | Configurar Fail2Ban para bloquear tentativas de login suspeitas | [ ] |
Segurança Web | Configurar SSL/TLS, ModSecurity, cabeçalhos de segurança e Fail2Ban para proteger serviços web | [ ] |
Controle de Acesso | Configurar SELinux ou AppArmor para limitar o acesso de processos e serviços | [ ] |
Backup | Implementar backups locais e em nuvem (com rclone), automatizados com cron | [ ] |
Verificação de Malware | Executar verificações de rootkits e malware com chkrootkit e ClamAV | [ ] |
Monitoramento de Vulnerabilidades | Executar auditorias de segurança periódicas com Lynis | [ ] |
17.2. Procedimentos de Manutenção e Revisão de Configurações
Para manter o hardening em ambientes de produção, é essencial revisar regularmente as configurações de segurança e monitoramento:
- Revisões de Segurança Mensais
- Execute auditorias de segurança mensais com Lynis para identificar vulnerabilidades e configurar permissões e serviços recomendados.
- Verifique logs de auditoria com o AIDE ou Tripwire para garantir que não houve modificações não autorizadas em arquivos críticos.
- Realize verificações de rootkits e malware com chkrootkit e ClamAV.
- Revisão Semanal de Logs e Backups
- Revise semanalmente os logs dos serviços, especialmente logs de autenticação e logs web, para identificar qualquer atividade suspeita.
- Confirme a integridade dos backups e certifique-se de que os backups em nuvem (feitos com rclone) estão acessíveis e completos.
- Procedimentos de Recuperação e Testes de Backup
- Teste periodicamente a restauração de backups para garantir que o processo esteja funcionando adequadamente.
- Mantenha um plano de recuperação de desastres documentado, com procedimentos para restaurar o sistema em caso de falha.
- Monitoramento Contínuo de Vulnerabilidades
- Inscreva-se para receber alertas de vulnerabilidades de fontes confiáveis, como o US-CERT, NVD e listas de segurança específicas para Linux.
- Revise e aplique rapidamente atualizações de segurança para serviços críticos.
17.3. Exemplo de Rotina de Hardening para um Servidor Linux em Produção
- Segunda-feira: Executar uma verificação de integridade de arquivos com AIDE e analisar os logs de autenticação e sistema.
- Terça-feira: Executar o Lynis para auditoria de segurança e revisar quaisquer recomendações, ajustando as configurações do sistema conforme necessário.
- Quarta-feira: Realizar uma verificação de rootkits e malware com chkrootkit e ClamAV.
- Quinta-feira: Confirmar a integridade dos backups, garantindo que backups incrementais foram realizados com sucesso (com rsnapshot e rclone).
- Sexta-feira: Verificar atualizações de segurança e aplicar patches necessários.
- Mensal: Rever as políticas SELinux ou AppArmor e as configurações do firewall para garantir que não houve alterações não autorizadas.
Tabela de Ferramentas de Hardening e Monitoramento
Ferramenta | Finalidade | Comando Principal |
---|---|---|
Lynis | Auditoria de segurança | sudo lynis audit system |
Fail2Ban | Proteção contra tentativas de login suspeitas | sudo fail2ban-client status |
Rsyslog | Monitoramento e centralização de logs | sudo systemctl restart rsyslog |
Logwatch | Relatório de logs de segurança | sudo logwatch --detail High |
AIDE/Tripwire | Verificação de integridade de arquivos | sudo aide --check , sudo tripwire --check |
ClamAV | Verificação de malware | sudo clamscan -r /home |
SELinux/AppArmor | Controle de acesso granular a processos | sestatus , sudo aa-status |
rclone | Backup em nuvem | rclone sync /dados remoto:/backup |
Considerações Finais
Este checklist de hardening e segurança em produção, junto com uma rotina de manutenção, ajudam a garantir que o servidor Linux permaneça seguro e protegido contra ameaças. Revisões periódicas de segurança, atualizações automáticas e monitoramento de logs são práticas indispensáveis para a segurança de ambientes de produção.
Seção Extra: Configuração do Postfix para Envio de Notificações por E-mail (Usando Gmail como Relay)
Objetivo:
Configurar o Postfix para envio de e-mails de notificação automática, utilizando o Gmail como relay. Esta configuração permite que o servidor Linux envie e-mails de relatórios de segurança, como os gerados por Logwatch, Lynis, e Fail2Ban.
Conteúdo:
1. Instalação e Configuração Básica do Postfix
Postfix é um servidor de e-mail amplamente utilizado, configurável como relay para enviar e-mails usando um provedor externo, como o Gmail.
- Instalação do Postfix
- No Debian/Ubuntu:
1
sudo apt install postfix mailutils
- No CentOS/RHEL:
1
sudo yum install postfix mailx
- No Debian/Ubuntu:
- Configuração Básica do Postfix
- Durante a instalação, selecione a opção “Site de Internet” quando solicitado e defina o nome do sistema de e-mail para o domínio do servidor (ex.:
meuservidor.com
).
- Durante a instalação, selecione a opção “Site de Internet” quando solicitado e defina o nome do sistema de e-mail para o domínio do servidor (ex.:
- Configuração do Gmail como Relay
- Edite o arquivo de configuração principal do Postfix:
1
sudo nano /etc/postfix/main.cf
- Adicione as seguintes linhas ao final do arquivo para configurar o Gmail como relay:
1 2 3 4 5 6
relayhost = [smtp.gmail.com]:587 smtp_use_tls = yes smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
- Edite o arquivo de configuração principal do Postfix:
- Configuração das Credenciais do Gmail
- Crie o arquivo
/etc/postfix/sasl_passwd
para armazenar as credenciais do Gmail:1
sudo nano /etc/postfix/sasl_passwd
- Adicione a seguinte linha, substituindo
seu_email@gmail.com
esua_senha
pelas credenciais da conta do Gmail:1
[smtp.gmail.com]:587 seu_email@gmail.com:sua_senha
- Observação: Para utilizar o Gmail, a autenticação em duas etapas deve estar desativada, ou você precisará configurar uma senha de aplicativo, caso a verificação em duas etapas esteja ativa.
- Crie o arquivo
- Proteção e Atualização das Credenciais
- Aplique permissões restritivas ao arquivo de credenciais e atualize o Postfix:
1 2
sudo chmod 600 /etc/postfix/sasl_passwd sudo postmap /etc/postfix/sasl_passwd
- Aplique permissões restritivas ao arquivo de credenciais e atualize o Postfix:
- Reinício do Postfix para Aplicar as Configurações
- Reinicie o Postfix para aplicar as novas configurações:
1
sudo systemctl restart postfix
- Reinicie o Postfix para aplicar as novas configurações:
2. Testando o Envio de E-mail
- Envio de um E-mail de Teste
- Para testar o envio de e-mail, execute o seguinte comando, substituindo
seu_email@gmail.com
pelo e-mail de destino:1
echo "Teste de envio de e-mail via Postfix" | mail -s "Teste Postfix" seu_email@gmail.com
- Verifique o e-mail de destino para confirmar o recebimento.
- Para testar o envio de e-mail, execute o seguinte comando, substituindo
- Verificação de Logs do Postfix
- Se o e-mail não for entregue, verifique os logs do Postfix para identificar problemas:
1
sudo tail -f /var/log/mail.log
- Se o e-mail não for entregue, verifique os logs do Postfix para identificar problemas:
3. Integração com Ferramentas de Segurança para Notificações
Agora que o Postfix está configurado para enviar e-mails, é possível integrar o envio de notificações por e-mail com várias ferramentas de segurança e monitoramento:
- Logwatch: Configure o Logwatch para enviar relatórios diários por e-mail, editando o arquivo de configuração
/etc/logwatch/conf/logwatch.conf
:1 2
MailTo = seu_email@gmail.com MailFrom = servidor@meudominio.com
- Fail2Ban: Configure o Fail2Ban para enviar alertas de bloqueio de IP por e-mail. No arquivo
/etc/fail2ban/jail.local
, adicione:1 2 3
destemail = seu_email@gmail.com sender = fail2ban@meudominio.com action = %(action_mwl)s
- Lynis: Configure a execução do Lynis via cron para que o relatório seja enviado por e-mail. Crie um script
/etc/cron.daily/lynis_audit
:1
sudo nano /etc/cron.daily/lynis_audit
- Insira o seguinte conteúdo no script:
1 2
#!/bin/bash lynis audit system --quiet | mail -s "Relatório Lynis" seu_email@gmail.com
- Torne o script executável:
1
sudo chmod +x /etc/cron.daily/lynis_audit
- Insira o seguinte conteúdo no script:
Tabela de Comandos Rápidos para Configuração do Postfix com Gmail
Comando | Descrição |
---|---|
sudo apt install postfix mailutils |
Instala o Postfix e utilitários de e-mail |
sudo nano /etc/postfix/main.cf |
Edita a configuração do Postfix |
sudo postmap /etc/postfix/sasl_passwd |
Atualiza o arquivo de credenciais de autenticação do Postfix |
echo "Mensagem" | mail -s "Assunto" email@dominio.com |
Envia um e-mail de teste |
sudo tail -f /var/log/mail.log |
Visualiza os logs do Postfix |
Considerações Finais
Configurar o Postfix para enviar notificações por e-mail permite que você receba relatórios e alertas críticos de segurança diretamente em sua caixa de entrada. Isso é especialmente útil para monitorar atividades importantes, como alertas do Fail2Ban e relatórios de auditoria do Lynis, ajudando a manter o servidor seguro e monitorado.
Essa configuração complementa as práticas de hardening, permitindo que o administrador seja notificado proativamente sobre eventos de segurança e performance.
Conclusão Geral
O processo de hardening de servidores Linux é fundamental para proteger ambientes de produção contra ameaças cada vez mais complexas e frequentes. Este guia buscou reunir as principais práticas de segurança, fornecendo orientações detalhadas para que profissionais de TI possam configurar, monitorar e proteger seus servidores de forma eficaz.
A implementação das práticas de segurança descritas – como configuração de firewall, auditoria de integridade, controle de permissões e backup regular – aumenta a resiliência do sistema contra ataques e incidentes de segurança. Além disso, a configuração de monitoramento e envio de notificações por e-mail permite que os administradores se mantenham informados sobre qualquer atividade suspeita ou crítica, respondendo prontamente a possíveis ameaças.
A segurança é um processo contínuo. Revisões periódicas, auditorias regulares e aplicação de atualizações de segurança são componentes essenciais para garantir a proteção e o funcionamento seguro dos servidores. Com as práticas deste guia, é possível estabelecer uma base robusta de segurança, protegendo os dados e garantindo a disponibilidade e o desempenho dos serviços em produção.