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
InSkillCoach
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!
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+
Comentários
Os comentários são alimentados pelo GitHub Discussions
Conecte-se com o GitHub para participar da discussão