A segurança de um servidor VPS (Virtual Private Server) é fundamental para proteger dados, aplicações e a integridade do sistema contra acessos não autorizados e ameaças potenciais. Sem medidas de segurança adequadas, seu VPS pode ser comprometido e utilizado para atividades maliciosas, como envio de spam, hospedagem de sites de phishing, mineração de criptomoedas ou até mesmo ataques de ransomware.
Este guia fornece um passo a passo detalhado para fortalecer a segurança de um VPS rodando Ubuntu 24.04, abordando desde a configuração inicial até práticas avançadas de hardening.
1. Atualização do Sistema
Antes de qualquer configuração, é essencial garantir que o sistema esteja atualizado com os últimos patches de segurança e melhorias.
bash CopiarEditar sudo apt update && sudo apt upgrade -y sudo reboot
sudo apt update
: Atualiza a lista de pacotes disponíveis.
sudo apt upgrade -y
: Instala as atualizações disponíveis automaticamente.
sudo reboot
: Reinicia o sistema para aplicar as atualizações, especialmente se houver atualizações do kernel.OTLand
2. Configuração de Acesso SSH com Chave Pública
Utilizar autenticação por chave SSH em vez de senhas aumenta significativamente a segurança do servidor.
2.1. Geração da Chave SSH
No seu computador local, gere um par de chaves SSH:
bash CopiarEditar ssh-keygen -t ed25519 -C "vps" -f ~/.ssh/id_ed25519-vps
t ed25519
: Especifica o tipo de chave (Ed25519 é mais seguro e rápido).
C "vps"
: Comentário para identificar a chave.
f ~/.ssh/id_ed25519-vps
: Define o caminho e nome do arquivo da chave.InMotion Hosting+4cloudpap.com+4Shapehost+4
2.2. Copiando a Chave Pública para o Servidor
Transfira a chave pública para o servidor VPS:
bash CopiarEditar rsync -avR ~/.ssh/id_ed25519-vps.pub usuario@ip_do_vps:~/.ssh/authorized_keys
rsync -avR
: Sincroniza arquivos preservando permissões e estrutura de diretórios.
~/.ssh/id_ed25519-vps.pub
: Arquivo da chave pública gerada.
usuario@ip_do_vps
: Substitua pelo usuário e IP do seu VPS.
~/.ssh/authorized_keys
: Arquivo no servidor que armazena chaves autorizadas.
3. Criação de Novo Usuário com Privilégios de Sudo
Evite utilizar o usuário padrão (como "ubuntu") para tarefas administrativas. Crie um novo usuário com permissões de sudo:
bash CopiarEditar sudo adduser vpsu sudo usermod -aG sudo vpsu sudo rsync --archive --chown=vpsu:vpsu ~/.ssh /home/vpsu
sudo adduser vpsu
: Cria um novo usuário chamado "vpsu".
sudo usermod -aG sudo vpsu
: Adiciona o usuário ao grupo sudo, concedendo privilégios administrativos.
sudo rsync --archive --chown=vpsu:vpsu ~/.ssh /home/vpsu
: Copia as chaves SSH para o novo usuário, ajustando as permissões.
4. Configuração Avançada do SSH
Ajuste as configurações do SSH para aumentar a segurança:
bash CopiarEditar sudo nano /etc/ssh/sshd_config
Modifique ou adicione as seguintes linhas:
bash CopiarEditar Port 1327 PermitRootLogin no PasswordAuthentication no AllowUsers vpsu
Port 1327
: Altera a porta padrão do SSH para 1327 (escolha uma porta alta e não utilizada).
PermitRootLogin no
: Desativa o login direto como root.
PasswordAuthentication no
: Desativa a autenticação por senha, permitindo apenas chaves SSH.
AllowUsers vpsu
: Restringe o acesso SSH apenas ao usuário "vpsu".InMotion Hosting+1Reddit+1
Salve e feche o arquivo. Em seguida, reinicie o serviço SSH:
bash CopiarEditar sudo systemctl restart ssh
No seu computador local, atualize o arquivo de configuração SSH para refletir as mudanças:
bash CopiarEditar nano ~/.ssh/config
Adicione:
bash CopiarEditar Host vps HostName ip_do_vps User vpsu Port 1327 IdentityFile ~/.ssh/id_ed25519-vps IdentitiesOnly yes
Host vps
: Alias para o servidor.
HostName ip_do_vps
: Endereço IP do seu VPS.
User vpsu
: Usuário para conexão SSH.
Port 1327
: Porta configurada para o SSH.
IdentityFile
: Caminho para a chave privada.
IdentitiesOnly yes
: Garante que apenas a chave especificada seja usada.
Agora, você pode se conectar ao VPS usando:
bash CopiarEditar ssh vps
1. Configuração de Firewall com UFW (Uncomplicated Firewall)
1.1. Ativando o UFW
O UFW é um wrapper para iptables, simplificando a configuração do firewall no Ubuntu.
bash CopiarEditar sudo ufw allow 1327/tcp sudo ufw allow OpenSSH sudo ufw enable
allow 1327/tcp
: permite acesso à porta SSH personalizada configurada anteriormente.
allow OpenSSH
: útil como fallback, caso a porta personalizada falhe.
enable
: ativa o firewall de forma permanente.
1.2. Políticas padrão
Defina regras padrão de segurança restritiva:
bash CopiarEditar sudo ufw default deny incoming sudo ufw default allow outgoing
deny incoming
: bloqueia por padrão qualquer tentativa de conexão externa.
allow outgoing
: permite ao servidor se comunicar com o exterior.
1.3. Verificando o status
bash CopiarEditar sudo ufw status verbose
2. Fail2Ban – Proteção contra Força Bruta
Fail2Ban monitora logs em busca de padrões de ataques (como tentativas de login) e automaticamente bloqueia IPs maliciosos via firewall.
2.1. Instalação
bash CopiarEditar sudo apt install fail2ban -y
2.2. Criação de arquivo de configuração local
bash CopiarEditar sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo nano /etc/fail2ban/jail.local
Altere ou adicione:
ini CopiarEditar [DEFAULT] bantime = 24h findtime = 10m maxretry = 3 backend = systemd destemail = root@localhost sender = fail2ban@localhost mta = sendmail action = %(action_mwl)s [sshd] enabled = true port = 1327 logpath = %(sshd_log)s
bantime
: tempo de bloqueio (24h).
findtime
: janela para identificar tentativas maliciosas.
maxretry
: número de falhas antes do banimento.
action_mwl
: envia alerta com whois + log + email.
2.3. Reiniciar o serviço
bash CopiarEditar sudo systemctl restart fail2ban sudo systemctl enable fail2ban
2.4. Verificação em tempo real
bash CopiarEditar sudo fail2ban-client status sshd
3. DNS Seguro: Integração com DNS-over-HTTPS (DoH)
Prevenir que consultas DNS sejam interceptadas é vital para proteção contra MITM (man-in-the-middle) e espionagem.
3.1. Instalar o cloudflared
Cloudflared é o binário da Cloudflare que permite usar DoH.
bash CopiarEditar wget -O cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb sudo dpkg -i cloudflared.deb
3.2. Configurar serviço de DNS local
bash CopiarEditar sudo cloudflared service install
Crie o arquivo:
bash CopiarEditar sudo nano /etc/systemd/system/cloudflared.service
Conteúdo:
ini CopiarEditar [Unit] Description=Cloudflared DNS over HTTPS proxy After=network.target [Service] ExecStart=/usr/bin/cloudflared proxy-dns --port 5053 --upstream https://1.1.1.1/dns-query Restart=on-failure User=nobody CapabilityBoundingSet=CAP_NET_BIND_SERVICE [Install] WantedBy=multi-user.target
Ativar o serviço:
bash CopiarEditar sudo systemctl daemon-reexec sudo systemctl enable cloudflared sudo systemctl start cloudflared
3.3. Redirecionar consultas DNS
Edite o resolv.conf do systemd:
bash CopiarEditar sudo nano /etc/systemd/resolved.conf
Adicione:
ini CopiarEditar DNS=127.0.0.1:5053 FallbackDNS=1.1.1.1 1.0.0.1 DNSStubListener=no
Reinicie:
bash CopiarEditar sudo systemctl restart systemd-resolved
Verifique:
bash CopiarEditar dig @127.0.0.1 -p 5053 google.com
4. Hardening de Kernel e Parâmetros de Rede (sysctl)
4.1. Editando parâmetros críticos
Abra o arquivo de configuração:
bash CopiarEditar sudo nano /etc/sysctl.d/99-hardening.conf
Cole o seguinte conteúdo:
bash CopiarEditar # Protege contra IP spoofing net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # Desativa pacotes ICMP redirect net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 # Ignora pacotes ICMP de broadcast net.ipv4.icmp_echo_ignore_broadcasts = 1 # Protege contra ataques SYN flood net.ipv4.tcp_syncookies = 1 # Evita rastreamento de IP net.ipv4.conf.all.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0 # Desabilita encaminhamento de IP (caso não esteja roteando tráfego) net.ipv4.ip_forward = 0 net.ipv6.conf.all.forwarding = 0
4.2. Aplicar as configurações
bash CopiarEditar sudo sysctl --system
Verifique se os parâmetros foram aplicados:
bash CopiarEditar sysctl -a | grep rp_filter
5. Desabilitar Serviços Inúteis
Identifique e desative qualquer serviço que não esteja sendo usado:
bash CopiarEditar sudo systemctl list-unit-files --type=service | grep enabled
Para desabilitar:
bash CopiarEditar sudo systemctl disable nome-do-serviço sudo systemctl stop nome-do-serviço
Exemplo:
bash CopiarEditar sudo systemctl disable avahi-daemon
6. Monitoramento de Conexões e Portas Abertas
Monitorar quais portas estão expostas é uma prática essencial:
bash CopiarEditar sudo ss -tuln
t
: TCP
u
: UDP
l
: apenas serviços em escuta
n
: exibe números de porta em vez de nomes
7. Ativar Logs Persistentes
Por padrão, logs do
journalctl
podem não ser persistentes após reboot. Para ativar:bash CopiarEditar sudo mkdir -p /var/log/journal sudo systemd-tmpfiles --create --prefix /var/log/journal sudo systemctl restart systemd-journald
1. Desativando o Usuário Root
Evitar o uso direto do usuário
root
é um dos pilares da segurança operacional. Mesmo com o SSH já bloqueado para root, desativar o login direto local ou por sudo explícito eleva o nível de proteção.1.1. Bloquear login de root
bash CopiarEditar sudo passwd -l root
l
: bloqueia o login do usuário root, mesmo localmente.
1.2. Verificar status
bash CopiarEditar sudo passwd -S root
Resultado esperado:
L
(locked)2. Backup Offsite Criptografado com Restic
Restic é um utilitário moderno de backup que suporta criptografia de ponta a ponta, deduplicação automática e envio para destinos como S3, Backblaze, SSH, entre outros.
2.1. Instalar Restic
bash CopiarEditar sudo apt install restic -y
2.2. Inicializar repositório criptografado
bash CopiarEditar export RESTIC_PASSWORD="senha-forte" restic init --repo /mnt/backup
- Repositório pode estar em disco externo, volume montado via SSHFS, ou ponto remoto.
2.3. Executar backup manual
bash CopiarEditar restic -r /mnt/backup backup /etc /home /var/www
2.4. Backup via cron com log
bash CopiarEditar sudo nano /etc/cron.daily/restic-backup
bash CopiarEditar #!/bin/bash export RESTIC_PASSWORD="senha-forte" restic -r /mnt/backup backup /etc /home /var/www >> /var/log/restic.log 2>&1
bash CopiarEditar sudo chmod +x /etc/cron.daily/restic-backup
3. Verificação de Integridade com AIDE (Advanced Intrusion Detection Environment)
AIDE cria um banco de dados com hashes criptográficos dos arquivos mais críticos do sistema, detectando alterações suspeitas.
3.1. Instalar AIDE
bash CopiarEditar sudo apt install aide -y
3.2. Inicializar banco de dados
bash CopiarEditar sudo aideinit
Banco gerado será armazenado como
/var/lib/aide/aide.db.new
Substituir banco:
bash CopiarEditar sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
3.3. Verificar integridade
bash CopiarEditar sudo aide --check
3.4. Agendar verificação automática
bash CopiarEditar sudo nano /etc/cron.daily/aide-check
bash CopiarEditar #!/bin/bash /usr/bin/aide --check | mail -s "Relatório de Integridade do Servidor" root
bash CopiarEditar sudo chmod +x /etc/cron.daily/aide-check
4. Proteção de Arquivos Críticos (Immutable + chattr)
Arquivos de configuração sensíveis podem ser "congelados" com o atributo
immutable
, o que impede alterações mesmo por root.4.1. Aplicar atributo
bash CopiarEditar sudo chattr +i /etc/passwd /etc/shadow /etc/gshadow /etc/group
+i
: torna o arquivo imutável.
4.2. Remover atributo (caso precise editar no futuro)
bash CopiarEditar sudo chattr -i /etc/passwd
5. Monitoramento de Processos em Tempo Real
Para detectar processos suspeitos ou backdoors em execução:
bash CopiarEditar sudo apt install htop lsof -y htop
htop
: interface interativa de processos.
lsof -i
: lista de conexões de rede em tempo real.
bash CopiarEditar sudo lsof -iTCP -sTCP:LISTEN -P -n
6. Endurecendo a Segurança Física Virtual: Kernel Lockdown Mode
O Ubuntu 24.04 suporta o modo lockdown do kernel, bloqueando interações potencialmente perigosas com o hardware ou memória.
6.1. Ativar via GRUB
Edite:
bash CopiarEditar sudo nano /etc/default/grub
Encontre:
bash CopiarEditar GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Altere para:
bash CopiarEditar GRUB_CMDLINE_LINUX_DEFAULT="quiet splash lockdown=integrity"
Aplicar:
bash CopiarEditar sudo update-grub sudo reboot
7. Restrições de Compilação de Código em Produção
Evite que o servidor compile código localmente (tática comum de atacantes):
7.1. Remover ferramentas de build
bash CopiarEditar sudo apt purge build-essential gcc g++ make -y
8. Auditar Logs com GoAccess (Web e SSH)
GoAccess é uma ferramenta de visualização de logs em tempo real com saída em terminal ou HTML.
8.1. Instalar
bash CopiarEditar sudo apt install goaccess -y
8.2. Usar com logs SSH
bash CopiarEditar sudo goaccess /var/log/auth.log --log-format=COMBINED
9. Práticas Finais de Segurança para Operação Profissional
- Use TOTP (Two-Factor Auth) para painéis e dashboards.
- Implemente bloqueio geográfico com ipset + iptables se seu público for regional.
- Sincronize horário com NTP seguro:
systemd-timesyncd
.
- Restrinja comandos com
sudoers.d
esudo visudo
.
- Realize auditorias mensais com
lynis audit system
.
- Escaneie portas regularmente com
nmap
de outro servidor seguro.
- Desative IPv6 se não for usado:
bash CopiarEditar sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
10. Salvaguarda: Snapshot e Imagem de Backup Total
Utilize snapshot completo via:
- Provedores (DigitalOcean, Vultr, Hetzner)
- LVM snapshot + Restic
- QEMU/KVM image export (
qcow2
ou.img
)
Este conjunto de práticas, cuidadosamente implementado, configura um VPS Ubuntu 24.04 pronto para operação em ambientes profissionais, inclusive em setores que exigem compliance de alto nível, como:
- Fintechs
- Infraestrutura de automação
- Sistemas que manipulam dados sensíveis
- Plataformas SaaS autogeridas
Autor do artigo
Sou formado em Marketing Digital por uma das principais faculdades do Brasil, com carreira construída unindo tecnologia, automação e estratégia digital.
Apaixonado por inovação, me especializei em T.I. e automação de marketing com inteligência artificial, criando soluções que ajudam empresas a vender mais, automatizar processos e crescer com eficiência.
Atuo como empreendedor digital, desenvolvendo sistemas completos com foco em automação de vendas, atendimento inteligente via WhatsApp e integração de ferramentas modernas com IA.
Minha missão é transformar ideias em sistemas inteligentes que funcionam de forma autônoma, liberando tempo e energia para que você possa focar no que realmente importa: o crescimento do seu negócio.