O Que e um Firewall
Um firewall e um filtro de entrada e saida do seu servidor. Toda conexao que tenta chegar ate ele passa primeiro por esse filtro. O firewall olha para onde a conexao quer ir (qual porta) e decide: deixa passar ou bloqueia. Sem firewall, qualquer porta aberta do seu servidor fica acessivel para o mundo inteiro.
🧠 Analogia: O porteiro do predio
Imagine um predio com um porteiro na entrada. Todo mundo que quer entrar para na portaria. O porteiro tem uma lista: quem esta na lista entra, quem nao esta fica do lado de fora, por mais que insista. O firewall e esse porteiro do seu servidor.
- •Visitante na lista (porta 443): entra para ver o site
- •Voce, o dono (porta 22): entra para administrar
- •Estranho sem permissao: barrado na portaria
💡 Por padrao, o ataque ja comecou
Assim que voce coloca um servidor online, bots automaticos comecam a varrer suas portas em minutos, procurando uma aberta para invadir. Isso e normal e acontece com todo servidor. O firewall e a primeira e mais importante linha de defesa contra esse ruido constante.
UFW: Permitir e Negar Portas
No Linux, o jeito mais simples de configurar um firewall e o UFW (Uncomplicated Firewall, ou "firewall descomplicado"). Ele e uma camada amigavel por cima do firewall do sistema. Com comandos curtos e em ingles claro, voce diz quais portas abrir e quais fechar.
ufw allow e ufw deny
Os comandos sao quase frases: "ufw allow 22" = "firewall, permita a porta 22".
# Permitir uma porta (deixar passar)
$ sudo ufw allow 22
Rules updated
Rules updated (v6)
# Permitir por nome do servico
$ sudo ufw allow OpenSSH
# Negar uma porta (bloquear)
$ sudo ufw deny 3306
Rules updated
ufw enable e ufw status
Definir as regras nao basta: voce precisa ligar o firewall. E sempre conferir o status para ver o que esta valendo.
# Ligar o firewall
$ sudo ufw enable
Firewall is active and enabled on system startup
# Ver as regras ativas
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
# Desligar (se precisar)
$ sudo ufw disable
⚠️ Erro Comum
Problema: Rodei sudo ufw enable e fui desconectado do servidor para sempre.
Solucao: Isso acontece quando voce liga o firewall SEM ter permitido a porta 22 (SSH) antes. Como o firewall bloqueia tudo que nao foi liberado, ele corta a sua propria conexao. Sempre rode sudo ufw allow 22 ANTES de enable. Se voce ja se trancou para fora, use o console web do seu provedor (VPS) para entrar e liberar a porta.
✓ O que FAZER
- ✓Liberar a porta 22 (SSH) ANTES de dar
enable - ✓Conferir com
ufw statusapos cada mudanca - ✓Abrir somente as portas que voce realmente usa
✗ O que NAO fazer
- ✗Rodar
enablesem liberar o SSH primeiro - ✗Abrir a porta de banco de dados (3306) para a internet
- ✗Deixar tudo aberto "para resolver depois"
Portas Essenciais: 22, 80 e 443
Uma porta e como uma porta numerada de um predio: cada servico mora atras de uma porta especifica. Para um servidor web simples, voce so precisa de tres portas abertas. Saber o que cada uma faz evita abrir portas demais (perigoso) ou de menos (site fora do ar).
Sua porta de administracao. E por aqui que voce entra no servidor pelo terminal.
A porta dos sites sem cadeado. Geralmente so redireciona o visitante para o HTTPS.
A porta dos sites com cadeado verde. E onde seu site seguro de verdade vai responder.
Liberando as tres de uma vez
# SSH primeiro (para nao se trancar para fora)
$ sudo ufw allow 22
# Site sem cadeado (redireciona para o seguro)
$ sudo ufw allow 80
# Site com cadeado (HTTPS)
$ sudo ufw allow 443
# Agora sim, ligar o firewall
$ sudo ufw enable
Firewall is active and enabled on system startup
👁 O que voce vai ver na tela
Depois de liberar e ligar, o ufw status numbered mostra a lista numerada das suas regras. Cada linha e uma porta liberada:
$ sudo ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN Anywhere
[ 2] 80 ALLOW IN Anywhere
[ 3] 443 ALLOW IN Anywhere
Os numeros entre colchetes servem para remover uma regra depois: sudo ufw delete 2 apaga a regra numero 2.
💡 Dica: nao abra portas "por desencargo"
Cada porta aberta e uma porta a mais para um invasor testar. Se voce nao sabe para que serve uma porta, NAO abra. Bancos de dados (3306, 5432), por exemplo, devem ficar fechados para a internet e acessados so de dentro do proprio servidor.
Fail2ban: Banindo Tentativas de Invasao
O firewall abre a porta 22 para voce administrar, mas ela tambem fica visivel para invasores que tentam adivinhar sua senha milhares de vezes. O Fail2ban resolve isso: ele observa as tentativas falhas e, depois de algumas seguidas, bane o IP do atacante por um tempo.
🧠 Analogia: O seguranca que decora rostos
Imagine um seguranca na porta da balada. Se a mesma pessoa tenta entrar com uma carteirinha falsa cinco vezes seguidas, ele anota o rosto dela e a proibe de chegar perto por uma hora. O Fail2ban faz isso com IPs: errou a senha demais, fica banido temporariamente.
Instalando e ativando
# Instalar
$ sudo apt install fail2ban -y
# Ativar para iniciar junto com o servidor
$ sudo systemctl enable fail2ban
$ sudo systemctl start fail2ban
# Ver os IPs banidos no momento
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Currently failed: 2
|- Total failed: 148
`- Banned IP list: 203.0.113.45 198.51.100.7
Atacante tenta entrar
Um bot tenta logar no SSH com senhas aleatorias: admin, 123456, root...
Fail2ban conta as falhas
Cada senha errada e registrada no log. O Fail2ban fica de olho nesse log.
Passou do limite, ban
Apos 5 falhas (padrao), o IP e bloqueado pelo firewall por 10 minutos. Tentou de novo? Mais tempo de banimento.
👁 Onde se ajustam os limites
A configuracao fica no arquivo /etc/fail2ban/jail.local. Os tres ajustes mais comuns:
# quanto tempo o IP fica banido (10 min)
bantime = 10m
# janela em que as falhas sao contadas
findtime = 10m
# quantas falhas ate o ban
maxretry = 5
⚠️ Erro Comum
Problema: "Errei minha propria senha algumas vezes e agora estou banido do meu servidor!"
Solucao: O Fail2ban nao distingue voce de um invasor. Se isso acontecer, entre pelo console web do provedor (VPS) e rode sudo fail2ban-client unban SEU_IP. Para evitar, use chaves SSH (modulo 3.2) em vez de senha: assim voce nunca erra.
Certificado SSL com Let's Encrypt
O cadeado verde do navegador (HTTPS) significa que a conexao entre o visitante e o seu site e criptografada: ninguem no meio do caminho consegue ler os dados. Para ter esse cadeado, voce precisa de um certificado SSL. O Let's Encrypt emite esses certificados de graca, e o certbot faz todo o trabalho por voce.
🧠 Analogia: O envelope lacrado
HTTP e um cartao-postal: qualquer carteiro no caminho le o que esta escrito. HTTPS e uma carta dentro de um envelope lacrado: so o destinatario abre. O certificado SSL e o que garante esse lacre, e o cadeado verde e a prova de que o lacre esta intacto.
Instalando o certbot e emitindo o certificado
# Instalar o certbot (exemplo com Nginx)
$ sudo apt install certbot python3-certbot-nginx -y
# Emitir o certificado para o seu dominio
$ sudo certbot --nginx -d meusite.com -d www.meusite.com
Requesting a certificate for meusite.com
Successfully received certificate.
Deploying certificate
Congratulations! You have successfully enabled HTTPS
O certbot edita a configuracao do Nginx sozinho e ja liga o redirecionamento de HTTP para HTTPS.
👁 O certificado expira em 90 dias (e se renova sozinho)
Certificados Let's Encrypt valem 90 dias. Mas o certbot ja agenda a renovacao automatica. Voce pode testar se a renovacao funciona sem esperar:
$ sudo certbot renew --dry-run
Processing /etc/letsencrypt/renewal/meusite.com.conf
Congratulations, all simulated renewals succeeded
⚠️ Erro Comum
Problema: O certbot falha com "Could not bind to port 80" ou "connection refused".
Solucao: O Let's Encrypt precisa acessar seu servidor pelas portas 80 e 443 para validar que o dominio e seu. Confirme que sudo ufw allow 80 e sudo ufw allow 443 ja foram rodados, e que o dominio aponta (DNS) para o IP do servidor.
Checklist de Seguranca do Servidor
Juntando tudo: um servidor bem protegido segue alguns passos basicos que cobrem 90% dos ataques automaticos. Use este checklist toda vez que subir um servidor novo. Sao poucos comandos e fazem uma diferenca enorme.
1.Atualize o sistema
$ sudo apt update && sudo apt upgrade -y
Pacotes desatualizados sao a porta de entrada mais comum.
2.Use chave SSH, desligue login por senha
# em /etc/ssh/sshd_config
PasswordAuthentication no
PermitRootLogin no
Sem senha para adivinhar, o ataque de forca bruta morre.
3.Ligue o firewall com so o necessario
$ sudo ufw allow 22
$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw enable
4.Instale o Fail2ban
$ sudo apt install fail2ban -y
$ sudo systemctl enable fail2ban
5.Ligue o HTTPS
$ sudo certbot --nginx -d meusite.com
✓ Habitos seguros
- ✓Atualizar o sistema com regularidade
- ✓Entrar so com chave SSH, nunca com senha
- ✓Conferir
ufw statuse os logs de vez em quando - ✓Criar um usuario comum e nao usar root no dia a dia
✗ Riscos a evitar
- ✗Logar como root direto pela internet
- ✗Usar senhas curtas ou repetidas
- ✗Deixar portas abertas "para testar e esquecer"
- ✗Servir o site so em HTTP, sem cadeado
🏆 Seu servidor agora tem porteiro
Com firewall, Fail2ban e HTTPS, voce ja esta a frente da maioria dos servidores na internet. Seguranca nao e um botao unico: e uma soma de camadas. No proximo modulo, voce vai aprender a gerenciar tokens e acessos com seguranca, para que suas chaves e segredos nunca vazem.
📚 Resumo do Modulo
Proximo Modulo:
3.4 - Tokens e Acesso (gerenciar chaves e segredos sem nunca deixa-los vazar)