Meus Primeiros 5 Minutos em um Servidor: Segurança Essencial para Servidores Linux
Data: 3 de março de 2013
Autor: Bryan Kennedy
A segurança de servidores não precisa ser complicada. Minha filosofia de segurança é simples: adotar princípios que protejam contra os vetores de ataque mais frequentes, mantendo a administração eficiente o suficiente para evitar acúmulo de “cruft” de segurança. Se você usar bem os primeiros cinco minutos em um servidor, pode atingir esse equilíbrio.
Admins experientes sabem que, conforme a infraestrutura cresce e novos servidores e desenvolvedores são adicionados, a administração de usuários torna-se um fardo. Em startups, é comum lidar com senhas desatualizadas, contas de estagiários abandonadas e problemas de acesso inconsistentes, como “tenho sudo no Servidor A, mas não no Servidor B”. Embora ferramentas de sincronização de contas possam mitigar esse problema, acredito que os benefícios incrementais não compensam os riscos e complicações adicionais. Simplicidade é o coração da boa segurança.
Nosso padrão de configuração utiliza duas contas: root e deploy. A conta deploy tem acesso sudo com uma senha longa e é usada pelos desenvolvedores para logins. Eles utilizam chaves públicas para autenticação, mantendo o arquivo authorized_keys atualizado entre os servidores. O login do root via SSH é desativado, e o usuário deploy só pode acessar o servidor a partir de nosso bloco de IPs do escritório.
Embora essa abordagem exija acesso ao terminal remoto caso o arquivo authorized_keys seja corrompido ou configurado incorretamente (por exemplo, através da ferramenta Lish da Linode), ela mantém um bom equilíbrio entre simplicidade e segurança.
Nota: Essa não é a abordagem mais segura possível, mas considero que ela equilibra segurança e simplicidade de gerenciamento para uma pequena equipe. A maioria das violações ocorre por falta de procedimentos adequados ou pela má manutenção dos mesmos.
Passo a Passo
1. Atualizar o Sistema
bash
passwd
apt-get update && apt-get upgrade
Atualize o sistema e defina uma senha longa e complexa para o root.
2. Instalar o Fail2ban
apt-get install fail2ban
O Fail2ban monitora tentativas de login e bloqueia atividades suspeitas.
3. Criar Usuário para Login
useradd deploy
mkdir /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
4. Configurar Autenticação por Chave Pública
vim /home/deploy/.ssh/authorized_keys
chmod 400 /home/deploy/.ssh/authorized_keys
chown deploy:deploy /home/deploy -R
5. Habilitar Sudo
passwd deploy
visudo
Adicione no arquivo:
root ALL=(ALL) ALL
deploy ALL=(ALL) ALL
6. Configurar o SSH
vim /etc/ssh/sshd_config
Adicione as linhas:
PermitRootLogin no
PasswordAuthentication no
AllowUsers deploy@(seu-ip)
Reinicie o SSH:
service ssh restart
7. Configurar Firewall
ufw allow from {seu-ip} to any port 22
ufw allow 80
ufw allow 443
ufw enable
8. Atualizações Automáticas
apt-get install unattended-upgrades
vim /etc/apt/apt.conf.d/10periodic
Configure:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "1";
9. Instalar Logwatch
apt-get install logwatch
vim /etc/cron.daily/00logwatch
Adicione:
/usr/sbin/logwatch --output mail --mailto seu_email@example.com --detail high
Conclusão
Em poucos minutos, configuramos um servidor com segurança básica para repelir ataques comuns e facilitar a manutenção. Segurança eficaz depende da consistência e de boas práticas na equipe. Compartilhe suas experiências ou sugestões sobre esta abordagem!