13 min de leitura · Guia técnico
Checklist para configurar servidor web seguro usando apenas linha de comando é um conjunto de verificações essenciais para proteger servidores contra ataques e vulnerabilidades. Para configurar um servidor web seguro via terminal, siga estes passos:
- Alterar porta SSH padrão e desabilitar login root
- Configurar firewall UFW com regras restritivas
- Instalar e configurar fail2ban para proteção contra ataques
- Implementar certificado SSL Let's Encrypt
- Configurar backup automatizado e monitoramento
- Aplicar atualizações de segurança e hardening do sistema
Pré-requisitos
- Servidor VPS ou dedicado com Ubuntu 22.04 LTS ou superior
- Acesso root via SSH com credenciais válidas
- Domínio apontado para o IP do servidor (para SSL)
- Conhecimento básico de comandos Linux
- Cliente SSH configurado (PuTTY, Terminal ou similar)
Configuração inicial de segurança SSH
A primeira etapa do checklist para configurar servidor web seguro envolve proteger o acesso SSH, que é o ponto de entrada mais visado por atacantes. Altere a porta padrão e desabilite login root direto para reduzir drasticamente tentativas de invasão automatizadas.
Edite o arquivo de configuração SSH:
sudo nano /etc/ssh/sshd_config
Localize e modifique as seguintes linhas:
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Reinicie o serviço SSH para aplicar as alterações:
sudo systemctl restart sshd
Atenção: Antes de desconectar, teste a nova configuração em uma segunda sessão SSH para evitar bloqueio de acesso.
Configure autenticação por chave SSH para eliminar ataques de força bruta. Gere um par de chaves no cliente:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Copie a chave pública para o servidor:
ssh-copy-id -p 2222 usuario@ip-do-servidor
Implementação de firewall UFW
O firewall UFW (Uncomplicated Firewall) fornece proteção essencial bloqueando portas desnecessárias e permitindo apenas tráfego autorizado. Configure regras restritivas seguindo o princípio de menor privilégio.
Instale e ative o UFW:
sudo apt update
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
Configure regras básicas para serviços essenciais:
sudo ufw allow 2222/tcp comment 'SSH custom port'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
Ative o firewall e verifique o status:
sudo ufw enable
sudo ufw status verbose
Output esperado:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
2222/tcp ALLOW IN Anywhere # SSH custom port
80/tcp ALLOW IN Anywhere # HTTP
443/tcp ALLOW IN Anywhere # HTTPS
Configuração do fail2ban para proteção dinâmica
O fail2ban monitora logs em tempo real e bloqueia automaticamente IPs que fazem múltiplas tentativas de login falhadas. Esta proteção dinâmica complementa o firewall UFW contra ataques de força bruta.
Instale o fail2ban:
sudo apt install fail2ban -y
Crie arquivo de configuração personalizada:
sudo nano /etc/fail2ban/jail.local
Adicione a configuração básica:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 2
[nginx-limit-req]
enabled = true
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 2
Reinicie e verifique o status do fail2ban:
sudo systemctl restart fail2ban
sudo fail2ban-client status
Instalação de certificado SSL Let's Encrypt
O certificado SSL garante criptografia HTTPS e confiança dos usuários. O Let's Encrypt oferece certificados gratuitos com renovação automática via certbot.
Instale o certbot e o plugin do Nginx:
sudo apt install certbot python3-certbot-nginx -y
Configure o Nginx básico antes do SSL. Crie um arquivo de configuração:
sudo nano /etc/nginx/sites-available/default
Adicione a configuração mínima:
server {
listen 80;
server_name seu-dominio.com www.seu-dominio.com;
location / {
root /var/www/html;
index index.html;
}
}
Teste e recarregue o Nginx:
sudo nginx -t
sudo systemctl reload nginx
Obtenha o certificado SSL:
sudo certbot --nginx -d seu-dominio.com -d www.seu-dominio.com
Teste a renovação automática:
sudo certbot renew --dry-run
Configuração de backup automatizado
Backups regulares protegem contra perda de dados e facilitam recuperação após incidentes de segurança. Configure scripts automatizados para backup de arquivos e bancos de dados.
Crie diretório para scripts de backup:
sudo mkdir -p /opt/backup/scripts
sudo mkdir -p /opt/backup/files
Crie script de backup básico:
sudo nano /opt/backup/scripts/backup-daily.sh
Adicione o conteúdo do script:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/opt/backup/files"
# Backup de arquivos web
tar -czf $BACKUP_DIR/web_$DATE.tar.gz /var/www/
# Backup de configurações
tar -czf $BACKUP_DIR/config_$DATE.tar.gz /etc/nginx/ /etc/ssl/
# Remover backups antigos (manter 7 dias)
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
echo "Backup concluído: $DATE" >> /var/log/backup.log
Torne o script executável:
sudo chmod +x /opt/backup/scripts/backup-daily.sh
Configure cron para execução automática:
sudo crontab -e
Adicione a linha para backup diário às 2h:
0 2 * * * /opt/backup/scripts/backup-daily.sh
Hardening do sistema e atualizações
O hardening remove serviços desnecessários e aplica configurações de segurança avançadas. Mantenha o sistema atualizado para corrigir vulnerabilidades conhecidas.
Configure atualizações automáticas de segurança:
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades
Desabilite serviços desnecessários:
sudo systemctl disable bluetooth
sudo systemctl disable cups
sudo systemctl disable avahi-daemon
Configure limites de recursos no sistema:
sudo nano /etc/security/limits.conf
Adicione as linhas:
* soft nofile 65536
* hard nofile 65536
* soft nproc 32768
* hard nproc 32768
Configure parâmetros de kernel para segurança:
sudo nano /etc/sysctl.conf
Adicione configurações de segurança:
# Proteção contra IP spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Desabilitar redirecionamentos ICMP
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# Proteção contra SYN flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
Aplique as configurações:
sudo sysctl -p
Monitoramento e verificação de segurança
Implemente monitoramento contínuo para detectar atividades suspeitas e verificar a efetividade das configurações de segurança. Use ferramentas de linha de comando para análise regular.
Instale ferramentas de monitoramento:
sudo apt install htop iotop nethogs nmap -y
Crie script de verificação de segurança:
sudo nano /opt/backup/scripts/security-check.sh
Adicione verificações automatizadas:
#!/bin/bash
echo "=== Verificação de Segurança - $(date) ===" >> /var/log/security-check.log
# Verificar portas abertas
echo "Portas abertas:" >> /var/log/security-check.log
ss -tuln >> /var/log/security-check.log
# Status do fail2ban
echo "Status fail2ban:" >> /var/log/security-check.log
fail2ban-client status >> /var/log/security-check.log
# Últimos logins
echo "Últimos logins:" >> /var/log/security-check.log
last -n 10 >> /var/log/security-check.log
# Processos suspeitos
echo "Processos com alta CPU:" >> /var/log/security-check.log
ps aux --sort=-%cpu | head -10 >> /var/log/security-check.log
Configure execução semanal do script:
sudo chmod +x /opt/backup/scripts/security-check.sh
echo "0 6 * * 1 /opt/backup/scripts/security-check.sh" | sudo crontab -
Para verificação manual de segurança, execute scan de portas:
nmap -sS -O localhost
Monitore conexões ativas:
netstat -tuln | grep LISTEN
Problemas comuns e como resolver
SSH não conecta após mudança de porta
Causa: Firewall bloqueando nova porta SSH ou configuração incorreta no sshd_config.
Solução: Verifique se a porta está liberada no UFW com sudo ufw status e teste a configuração SSH com sudo sshd -t antes de reiniciar o serviço.
Certificado SSL não renova automaticamente
Causa: Cron do certbot não configurado ou falha na validação do domínio.
Solução: Execute sudo certbot renew --dry-run para testar. Verifique se o domínio aponta corretamente para o servidor e se a porta 80 está acessível.
Fail2ban não bloqueia ataques SSH
Causa: Configuração incorreta da porta SSH no jail.local ou logs não encontrados.
Solução: Verifique se a porta no arquivo /etc/fail2ban/jail.local corresponde à porta SSH configurada. Confirme o caminho dos logs com sudo fail2ban-client get sshd logpath.
Backup automatizado falha silenciosamente
Causa: Permissões insuficientes ou espaço em disco esgotado.
Solução: Verifique permissões do diretório de backup com ls -la /opt/backup/ e espaço disponível com df -h. Adicione logs detalhados ao script de backup.
Firewall UFW bloqueia serviços necessários
Causa: Regras muito restritivas ou ordem incorreta das regras.
Solução: Liste regras ativas com sudo ufw status numbered e adicione exceções específicas. Use sudo ufw insert 1 allow from IP_CONFIAVEL para IPs específicos.
Perguntas frequentes sobre checklist para configurar servidor web seguro
Qual a primeira configuração de segurança que devo fazer em um servidor web novo?
A primeira configuração deve ser alterar a porta padrão do SSH (22) e desabilitar login root direto. Isso reduz drasticamente tentativas de ataques automatizados. Configure também autenticação por chave SSH para eliminar ataques de força bruta.
É necessário configurar firewall mesmo em servidor com poucos acessos?
Sim, o firewall é essencial independente do volume de tráfego. Servidores expostos na internet recebem milhares de tentativas de invasão diariamente. O UFW bloqueia automaticamente portas desnecessárias e permite apenas tráfego autorizado.
Como verificar se meu servidor web está realmente seguro após as configurações?
Execute verificações regulares com nmap para portas abertas, analise logs do fail2ban para tentativas bloqueadas e monitore processos com htop. Teste também acesso SSH de IP externo para confirmar que apenas conexões autorizadas funcionam.
Preciso renovar certificado SSL Let's Encrypt manualmente?
Não, o certbot configura renovação automática via cron. Execute 'certbot renew --dry-run' para testar o processo. A renovação acontece automaticamente 30 dias antes do vencimento, garantindo que seu site nunca fique sem HTTPS válido.
Qual a diferença entre fail2ban e firewall UFW na proteção do servidor?
O UFW controla quais portas ficam abertas ou fechadas permanentemente. O fail2ban monitora logs em tempo real e bloqueia IPs que fazem muitas tentativas de login falhadas. Ambos trabalham juntos: UFW como barreira inicial e fail2ban como proteção dinâmica contra ataques.
Conclusão
Implementar este checklist para configurar servidor web seguro via linha de comando estabelece múltiplas camadas de proteção contra ameaças comuns. A combinação de SSH hardening, firewall UFW, fail2ban e certificados SSL cria uma base sólida de segurança.
- Execute verificações regulares de segurança usando os scripts automatizados
- Mantenha backups atualizados e teste a restauração periodicamente
- Monitore logs do sistema para identificar tentativas de invasão
Para configurações mais avançadas, considere implementar otimizações específicas de performance e explore configurações avançadas para hospedagem de sites.
Leia também
- Guia para configurar acesso SSH apenas para IPs específicos no Ubuntu 22.04
- Comparativo: Gerenciamento de Firewall via Linha de Comando vs. Painel Web em VPS Linux e Servidor Dedicado
- Passo a passo para configurar firewall com nftables em VPS Linux e servidor dedicado
Precisa de ajuda com configuração de servidor seguro?
Nossa equipe especializada pode auxiliar na implementação completa deste checklist de segurança. Oferecemos suporte técnico especializado para configuração e manutenção de servidores VPS com foco em segurança e performance.