Post

Guia Completo de Hardening em Servidores Linux: Segurança em Camadas

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

  1. Introdução ao Hardening de Servidores Linux
  2. Atualização do Sistema e Gerenciamento de Pacotes
  3. Configuração de Usuários e Controle de Acesso
  4. Proteção de Acesso SSH
  5. Configuração de Firewall com UFW, iptables e FirewallD
  6. Hardening com Controle de Acesso Baseado em IP e Redes
  7. Implementação de Port Knocking e VPNs
  8. Controle de Permissões de Arquivos e Diretórios
  9. Implementação de Sistemas de Arquivos Criptografados
  10. Monitoramento de Logs e Auditoria com Rsyslog e Logwatch
  11. Configuração de Ferramentas de IDS/IPS
  12. Auditoria de Integridade de Arquivos e Detecção de Modificações
  13. Proteção de Serviços Web e Aplicações
  14. Configuração de SELinux e AppArmor para Controle de Acesso
  15. Configuração de Backups e Recuperação de Dados
  16. Monitoramento de Vulnerabilidades e Atualizações de Segurança
  17. Práticas Recomendadas para Hardening e Segurança em Produção
  18. 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:

  1. 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.
  2. 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.
  3. 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:

  1. 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
      
  2. 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:
      1. Instale o pacote unattended-upgrades:
        1
        
        sudo apt install unattended-upgrades
        
      2. Ative as atualizações automáticas:
        1
        
        sudo dpkg-reconfigure --priority=low unattended-upgrades
        
      3. 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.
    • Configuração em Distribuições RHEL/CentOS com yum-cron:
      1. Instale o yum-cron:
        1
        
        sudo yum install yum-cron
        
      2. Habilite e inicie o serviço:
        1
        2
        
        sudo systemctl enable yum-cron
        sudo systemctl start yum-cron
        
      3. Edite o arquivo de configuração (/etc/yum/yum-cron.conf) para definir as atualizações automáticas.
  3. 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, use yum check-update.

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:

  1. 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
      
  2. 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 grupo sudo (Debian/Ubuntu) ou ao grupo wheel (CentOS/RHEL):
      • Debian/Ubuntu:
        1
        
        sudo usermod -aG sudo nome_do_usuario
        
      • CentOS/RHEL:
        1
        
        sudo usermod -aG wheel nome_do_usuario
        
  3. 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.
  4. 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 usar sudo 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
      
  5. 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
        

Exemplo Prático de Criação e Configuração de Usuários

  1. Crie um novo usuário chamado analista e adicione-o ao grupo sudo (ou wheel 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
    
  2. Desative o login direto de root:
    1
    
    sudo passwd -l root
    
  3. 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, como Port 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, como maxretry e bantime.

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

  1. 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
      
  2. 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
        
  3. 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
      
  4. 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
      
  5. Verificação das Regras Ativas
    • Visualize as regras configuradas com:
      1
      
      sudo ufw status verbose
      

5.3. Configuração Avançada do Firewall com iptables

  1. 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
      
  2. 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
      
  3. 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
      
  4. 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
      
  5. Salvamento das Regras do iptables
    • Em Debian/Ubuntu, salve as configurações com:
      1
      
      sudo iptables-save | sudo tee /etc/iptables/rules.v4
      

5.4. Configuração do Firewall com FirewallD

  1. 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
      
  2. 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.
  3. 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
      
  4. Aplicação das Regras
    • Após configurar as regras, recarregue o FirewallD para aplicá-las:
      1
      
      sudo firewall-cmd --reload
      
  5. 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.
  6. Verificação das Regras Ativas no FirewallD
    • Para visualizar as regras configuradas na zona public, use:
      1
      
      sudo firewall-cmd --zone=public --list-all
      

Exemplo Prático de Configuração de Firewall com UFW, iptables e FirewallD

  1. 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
    
  2. 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
    
  3. FirewallD: Configuração para a zona public com SSH, HTTP e HTTPS
    1
    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

  1. 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
      
  2. 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 rede 192.168.1.0/24 terão permissão para acessar o SSH, enquanto outros IPs serão bloqueados.
  3. 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
      

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
  1. 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
      
  2. 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
      
6.3.2. Configuração de ACLs com iptables
  1. 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
      
  2. Bloquear Todo o Restante para SSH
    • Bloqueie conexões SSH de outros IPs:
      1
      
      sudo iptables -A INPUT -p tcp --dport 22 -j DROP
      
6.3.3. Configuração de ACLs com FirewallD
  1. 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
      
  2. 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
      
  3. Aplicação das Regras e Definição da Zona
    • Recarga as regras para aplicá-las:
      1
      
      sudo firewall-cmd --reload
      

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

  1. 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
        
  2. 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
      
  3. 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
      

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
  1. 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
      
  2. 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 inversa 9000,8000,7000 fechará o acesso.
  3. 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
      
  4. 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
      

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.

  1. 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
      
  2. 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
      
  3. 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.
  4. 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
      
  5. Iniciar o OpenVPN
    • Ative e inicie o serviço:
      1
      2
      
      sudo systemctl enable openvpn@server
      sudo systemctl start openvpn@server
      
  6. 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
      
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

  1. Modificar Permissões: chmod
    • Para definir permissões usando símbolos (r, w, x), utilize chmod. 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
      
  2. 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
      
  3. 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.

  1. 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
      
  2. 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
      
  3. 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
      

8.4. Exemplo de Configuração de Permissões de Hardening

  1. 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
      
  2. 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
      

8.5. Verificação das Permissões de Arquivos Críticos

  1. 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
      
  2. Verificar Atributos Especiais com lsattr
    • Para verificar se um arquivo está imutável:
      1
      
      lsattr /etc/servico.conf
      

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

  1. 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
      
  2. 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
      
  3. 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
      

9.3. Criptografia de Diretórios com eCryptfs

  1. 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
      
  2. 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.
  3. 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
      

Exemplo Prático de Criptografia com LUKS e eCryptfs

  1. Criptografar uma Partição Inteira com LUKS
    • Execute os comandos para criptografar /dev/sdb1, desbloqueá-la e montá-la em /mnt/volume_segurado.
  2. 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
      

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.

  1. 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
      
  2. 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.
  3. 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
      
  4. 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
      
  5. 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
      

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.

  1. 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
      
  2. 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
      
  3. 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.
  4. 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.

10.3. Exemplo de Configuração de Monitoramento e Relatório

  1. 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 porta 514.
  2. 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).

  1. 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
      
  2. 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
      
  3. Reiniciar o Fail2Ban
    • Reinicie o serviço para aplicar as configurações:
      1
      2
      
      sudo systemctl enable fail2ban
      sudo systemctl start fail2ban
      
  4. Verificação dos IPs Bloqueados
    • Para visualizar a lista de IPs bloqueados:
      1
      
      sudo fail2ban-client status sshd
      

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.

  1. Instalação do AIDE
    • No Debian/Ubuntu:
      1
      
      sudo apt install aide
      
    • No CentOS/RHEL:
      1
      
      sudo yum install aide
      
  2. 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
      
  3. 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.
  4. 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
      

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.

  1. 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.
  2. Configuração Inicial do Banco de Dados
    • Após a instalação, inicialize o banco de dados:
      1
      
      sudo tripwire --init
      
  3. 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.
  4. 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
      

Exemplo de Configuração Completa de IDS/IPS

  1. Configuração do Fail2Ban para bloquear tentativas de login SSH suspeitas, limitando-as a 3 tentativas a cada 10 minutos.
  2. 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.

  1. Instalação do AIDE
    • No Ubuntu e Debian:
      1
      
      sudo apt install aide
      
    • No CentOS e RHEL:
      1
      
      sudo yum install aide
      
  2. 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
      
  3. 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
      
  4. 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.
  5. 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
      

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.

  1. 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.
  2. 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
      
  3. 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.
  4. 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.
  5. 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
      

Exemplo Prático de Auditoria com AIDE e Tripwire

  1. 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.
  2. 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
  1. 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>
      
  2. Esconder a Versão do Apache
    • Para ocultar a versão do Apache e o sistema operacional, ajuste as diretivas ServerTokens e ServerSignature:
      1
      2
      
      ServerTokens Prod
      ServerSignature Off
      
  3. 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"
      
Configurações no Nginx
  1. 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;
      
  2. 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";
      
  3. 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
      

13.2. Configuração de SSL/TLS para Conexões Seguras

  1. 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
      
  2. 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;
      }
      

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.

  1. Instalação do ModSecurity
    • No Apache:
      1
      
      sudo apt install libapache2-mod-security2
      
    • No Nginx:
      1
      
      sudo apt install libnginx-mod-security
      
  2. 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
      
  3. 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
      
  4. 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
      

13.4. Configuração de Fail2Ban para Proteger Serviços Web

  1. 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
      
  2. Reiniciar o Fail2Ban
    • Reinicie o Fail2Ban para aplicar a configuração:
      1
      
      sudo systemctl restart fail2ban
      

Exemplo Prático de Proteção de Serviço Web

  1. Configurar Apache ou Nginx para ocultar a versão do servidor e adicionar cabeçalhos de segurança.
  2. Configurar SSL/TLS com Let’s Encrypt e redirecionar o tráfego HTTP para HTTPS.
  3. Instalar e Configurar ModSecurity para proteger contra ataques web comuns.
  4. 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.

  1. Verificação do Status do SELinux
    • Verifique se o SELinux está ativado com o comando:
      1
      
      sudo sestatus
      
  2. 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.
  3. 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
      
  4. 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.
  5. 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
      

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.

  1. 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
      
  2. Verificação do Status do AppArmor
    • Verifique se o AppArmor está ativo:
      1
      
      sudo apparmor_status
      
  3. 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.
  4. 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
      
  5. 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.

14.3. Exemplo Prático: Configuração de SELinux e AppArmor para Controle de Acesso

  1. 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
      
  2. 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.

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

  1. 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.
  2. 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.

  1. 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.
  2. 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/
      
  3. 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/
      

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.

  1. Criação de um Backup Completo com tar
    • Para compactar o diretório /dados em um arquivo backup_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).
  2. 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
      

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.

  1. Instalação do rsnapshot
    • No Debian/Ubuntu:
      1
      
      sudo apt install rsnapshot
      
  2. 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/
      
  3. Execução de Backups com rsnapshot
    • Para executar um backup diário:
      1
      
      sudo rsnapshot daily
      
  4. Automatização com Cron
    • O rsnapshot adiciona automaticamente tarefas ao Cron para realizar backups de acordo com os intervalos configurados (daily, weekly).

15.5. Recuperação de Dados

  1. 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/
      
  2. Restauração com tar
    • Para restaurar o backup criado com tar:
      1
      
      sudo tar -xzvf /backup/backup_dados.tar.gz -C /
      
  3. 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/
      

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
  1. 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/
  2. 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).
  3. 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.

Realizando Backups com o rclone
  1. 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.
  2. Backup Incremental com rclone
    • Se preferir preservar versões anteriores dos arquivos, utilize o comando copy em vez de sync:
      1
      
      rclone copy /dados meudrive:/backup/dados
      
  3. 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.

Agendamento de Backups com rclone e Cron
  1. 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
      
  2. 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
      

Exemplo de Configuração Completa de Backup com rclone

  1. Configurar o rclone para conectar-se ao Google Drive, Amazon S3 ou outro serviço de nuvem.
  2. Sincronizar o diretório /dados para o armazenamento na nuvem, utilizando a opção sync para backups completos ou copy para backups incrementais.
  3. 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.

  1. 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
      
  2. 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.
  3. 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.

  1. Instalação do chkrootkit
    • No Debian/Ubuntu:
      1
      
      sudo apt install chkrootkit
      
    • No CentOS/RHEL:
      1
      
      sudo yum install chkrootkit
      
  2. 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.
  3. 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
      

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.

  1. 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
      
  2. 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
      
  3. 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
      
  4. 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
      

16.4. Configuração de Alertas de Vulnerabilidades e Atualizações de Segurança

  1. 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
      
  2. Monitoramento de Vulnerabilidades com o Serviço de Alertas

Exemplo Prático de Configuração de Monitoramento de Vulnerabilidades

  1. Execução Regular do Lynis para auditoria de segurança e implementação das recomendações encontradas.
  2. Verificação Automática de Rootkits e Malware usando o chkrootkit e ClamAV, com relatórios agendados.
  3. 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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

  1. Segunda-feira: Executar uma verificação de integridade de arquivos com AIDE e analisar os logs de autenticação e sistema.
  2. 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.
  3. Quarta-feira: Realizar uma verificação de rootkits e malware com chkrootkit e ClamAV.
  4. Quinta-feira: Confirmar a integridade dos backups, garantindo que backups incrementais foram realizados com sucesso (com rsnapshot e rclone).
  5. Sexta-feira: Verificar atualizações de segurança e aplicar patches necessários.
  6. 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.

  1. Instalação do Postfix
    • No Debian/Ubuntu:
      1
      
      sudo apt install postfix mailutils
      
    • No CentOS/RHEL:
      1
      
      sudo yum install postfix mailx
      
  2. 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).
  3. 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
      
  4. 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 e sua_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.
  5. 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
      
  6. Reinício do Postfix para Aplicar as Configurações
    • Reinicie o Postfix para aplicar as novas configurações:
      1
      
      sudo systemctl restart postfix
      

2. Testando o Envio de E-mail

  1. 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.
  2. 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
      

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:

  1. 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
    
  2. 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
    
  3. 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
      

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.


This post is licensed under CC BY 4.0 by the author.