0%
Hardening de segurança de um servidor Linux em 10 etapas essenciais

Hardening de segurança de um servidor Linux em 10 etapas essenciais

Guia prático para proteger com eficiência seus servidores Linux contra as ameaças atuais, com comandos concretos e explicações detalhadas

I

InSkillCoach

· min

Hardening de segurança de um servidor Linux em 10 etapas essenciais

Proteger um servidor Linux é uma competência fundamental para qualquer administrador de sistemas. Com o aumento dos ciberataques e das tentativas de invasão, é crucial implementar uma estratégia eficaz de hardening (endurecimento) desde a implantação inicial do servidor.

Este guia detalha 10 etapas essenciais para reforçar de forma significativa a segurança dos seus servidores Linux, estejam eles hospedados na sua infraestrutura ou na nuvem.

1. Manter o sistema atualizado

A base de qualquer estratégia de segurança começa com atualizações regulares. As correções de segurança são publicadas com frequência para corrigir as vulnerabilidades descobertas.

Para Debian/Ubuntu:

# Atualização da lista de pacotes
sudo apt update

# Instalação das atualizações
sudo apt upgrade -y

# Atualização do kernel e dos pacotes críticos
sudo apt dist-upgrade -y

Para RHEL/CentOS/Fedora:

# Atualização de todos os pacotes
sudo dnf update -y
# ou com yum em sistemas mais antigos
sudo yum update -y

Dica profissional: Configure atualizações automáticas de segurança com unattended-upgrades no Debian/Ubuntu ou dnf-automatic no Fedora/RHEL.

# No Debian/Ubuntu
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

# No RHEL/CentOS 8/Fedora
sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer

2. Proteger o SSH

O SSH costuma ser a principal porta de entrada para o seu servidor, o que o torna um alvo preferencial dos atacantes.

Alterar a porta padrão

Edite o arquivo /etc/ssh/sshd_config:

# Substitua 22 por uma porta não padrão (entre 1024 e 65535)
Port 2222

Desativar a autenticação por senha

PasswordAuthentication no
ChallengeResponseAuthentication no

Configurar a autenticação por chave

Na sua máquina local:

# Criar um par de chaves se você não tiver um
ssh-keygen -t ed25519 -a 100

# Copiar a chave pública para o servidor
ssh-copy-id -i ~/.ssh/id_ed25519.pub utilisateur@serveur

Limitar o acesso root e os usuários autorizados

PermitRootLogin no
AllowUsers utilisateur1 utilisateur2

Aplicar as alterações

sudo systemctl restart sshd

3. Configurar um firewall

Um firewall bem configurado é essencial para controlar o tráfego de entrada e de saída.

UFW (Uncomplicated Firewall) para Debian/Ubuntu

# Instalação
sudo apt install ufw

# Configuração básica
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Permitir SSH (na porta alterada, se necessário)
sudo ufw allow 2222/tcp

# Permitir outros serviços conforme a necessidade
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Ativar o firewall
sudo ufw enable

Firewalld para RHEL/CentOS/Fedora

# Instalação, se necessário
sudo dnf install firewalld

# Ativação do serviço
sudo systemctl enable --now firewalld

# Configuração básica
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# Se você alterou a porta SSH
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --permanent --add-port=2222/tcp

# Aplicar as alterações
sudo firewall-cmd --reload

4. Instalar e configurar o Fail2ban

O Fail2ban monitora os logs do seu sistema e bloqueia temporariamente os endereços IP que apresentam sinais de atividade maliciosa.

# Instalação
sudo apt install fail2ban # Debian/Ubuntu
sudo dnf install fail2ban # RHEL/CentOS/Fedora

# Criação de um arquivo de configuração local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Edite /etc/fail2ban/jail.local para personalizar a configuração:

[DEFAULT]
# Banir um IP por 1 hora (3600 segundos)
bantime = 3600
# Banir após 5 tentativas malsucedidas
maxretry = 5
# Período de observação das tentativas (em segundos)
findtime = 600

[sshd]
enabled = true
port = 2222
logpath = %(sshd_log)s
maxretry = 3

Ative e inicie o serviço:

sudo systemctl enable --now fail2ban

5. Particionamento seguro e opções de montagem

Se você está configurando um novo servidor, considere um esquema de particionamento que inclua partições separadas para /home, /tmp, /var, /var/log e /var/log/audit, para evitar que o preenchimento de espaço afete todo o sistema.

Para sistemas existentes, proteja as opções de montagem em /etc/fstab:

# Montagem de /tmp com noexec, nosuid e nodev
/dev/sdXY  /tmp  ext4  defaults,nosuid,nodev,noexec  0 0

# Montagem de /home com nosuid e nodev
/dev/sdXZ  /home  ext4  defaults,nosuid,nodev  0 0

Se você não tem partições separadas, pode usar sistemas de arquivos temporários:

# Adicionar ao /etc/fstab
tmpfs  /tmp  tmpfs  defaults,nosuid,nodev,noexec,size=1G  0 0

Aplique as alterações:

sudo mount -o remount /tmp

6. Proteger o kernel com sysctl

Modifique /etc/sysctl.conf para reforçar os parâmetros de segurança do kernel:

# Desativar o encaminhamento de IP se não for um roteador
net.ipv4.ip_forward = 0

# Proteção contra ataques de spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignorar as respostas ICMP broadcast
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Proteção contra ataques SYN flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2

# Proteção contra ataques de martian packets
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

# Desativar pings (opcional)
net.ipv4.icmp_echo_ignore_all = 1

# Desativar o protocolo IPv6 se não for utilizado
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

Aplique as alterações:

sudo sysctl -p

7. Auditar e limitar os pacotes instalados

Minimize a superfície de ataque instalando apenas os pacotes necessários.

Listar os pacotes instalados

# Debian/Ubuntu
dpkg -l

# RHEL/CentOS/Fedora
rpm -qa

Remover os pacotes desnecessários

# Debian/Ubuntu
sudo apt remove paquet-inutile
sudo apt autoremove

# RHEL/CentOS/Fedora
sudo dnf remove paquet-inutile

Verificar os serviços em execução

sudo systemctl list-units --type=service --state=active

Desativar os serviços não essenciais

sudo systemctl disable service-non-essentiel
sudo systemctl stop service-non-essentiel

8. Configurar um sistema de detecção de intrusão

O AIDE (Advanced Intrusion Detection Environment) é uma ferramenta de verificação de integridade que detecta modificações não autorizadas nos arquivos do sistema.

# Instalação
sudo apt install aide # Debian/Ubuntu
sudo dnf install aide # RHEL/CentOS/Fedora

# Inicializar o banco de dados
sudo aideinit
# ou
sudo aide --init

# O comando cria um banco de dados em /var/lib/aide/aide.db.new
# Em alguns sistemas, é preciso renomeá-lo
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# Verificar a integridade regularmente
sudo aide --check

Configure uma tarefa cron para verificações regulares:

echo "0 4 * * * root /usr/sbin/aide --check | mail -s 'AIDE Integrity Check' admin@example.com" | sudo tee /etc/cron.d/aide-check

9. Reforçar a política de senhas

Uma política de senhas forte é essencial, mesmo que você use a autenticação por chave SSH.

Instale libpam-pwquality no Debian/Ubuntu ou pam_pwquality no RHEL/CentOS/Fedora.

sudo apt install libpam-pwquality # Debian/Ubuntu
sudo dnf install pam_pwquality # RHEL/CentOS/Fedora

Edite o arquivo /etc/pam.d/common-password (Debian/Ubuntu) ou /etc/security/pwquality.conf (RHEL/CentOS/Fedora):

# Exemplo para Debian/Ubuntu em /etc/pam.d/common-password
password requisite pam_pwquality.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 reject_username enforce_for_root

# Exemplo para RHEL/CentOS/Fedora em /etc/security/pwquality.conf
minlen = 12
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
difok = 3

Para configurar a expiração das senhas:

sudo chage -M 90 -m 7 -W 14 utilisateur

Este comando:

  • Força a troca de senha a cada 90 dias (-M 90)
  • Impõe um mínimo de 7 dias entre as trocas (-m 7)
  • Avisa o usuário 14 dias antes da expiração (-W 14)

10. Monitorar e auditar o sistema

O monitoramento dos logs é crucial para detectar tentativas de invasão.

Configurar o registro de logs centralizado

Para uma infraestrutura maior, considere implantar um servidor de logs centralizado.

Configurar o auditd para um registro avançado

# Instalação
sudo apt install auditd audispd-plugins # Debian/Ubuntu
sudo dnf install audit # RHEL/CentOS/Fedora

# Ativar na inicialização
sudo systemctl enable --now auditd

Edite /etc/audit/rules.d/audit.rules para adicionar regras personalizadas:

# Monitorar as modificações nos arquivos de configuração
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k sshd_config

# Monitorar as falhas de autenticação
-a always,exit -F arch=b64 -S open -F a1&01003 -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S open -F a1&01003 -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S open -F a1&01003 -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S open -F a1&01003 -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access

Recarregue as regras:

sudo auditctl -R /etc/audit/rules.d/audit.rules

Monitorar as conexões com o LogWatch

# Instalação
sudo apt install logwatch # Debian/Ubuntu
sudo dnf install logwatch # RHEL/CentOS/Fedora

# Execução manual
sudo logwatch --output mail --mailto admin@example.com --detail high

Configure uma tarefa cron para relatórios diários editando /etc/cron.daily/00logwatch.

Conclusão

Proteger um servidor Linux é um processo contínuo que exige vigilância e atualizações regulares. Estas 10 etapas permitirão estabelecer uma base sólida para proteger seus sistemas contra a maioria das ameaças comuns.

Lembre-se de que esta lista não é exaustiva. Dependendo do seu ambiente e das suas necessidades específicas, você pode precisar de medidas adicionais, como:

  • A implantação de soluções de backup automatizadas
  • A implementação de uma solução de controle de acesso baseado em papéis (RBAC)
  • O uso de um sistema de prevenção de intrusão (IPS)
  • A configuração de uma VPN para acesso remoto
  • A implementação de SELinux ou AppArmor para controle de acesso obrigatório

A segurança é um equilíbrio entre funcionalidade e proteção. Adapte sempre estas recomendações às suas necessidades específicas e não hesite em consultar a documentação oficial da sua distribuição Linux para obter orientações adequadas ao seu ambiente.

Quais medidas de segurança você considerou mais eficazes para os seus servidores Linux? Compartilhe sua experiência nos comentários!

InSkillCoach

Sobre InSkillCoach

Especialista em treinamento e tecnologias

Coach especializado em tecnologias avançadas e IA, apoiado pela GNeurone Inc.

Certificações:

  • AWS Certified Solutions Architect – Professional
  • Certificações Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
1.4k
349

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!