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!