MODULO 3.3

🛡️ Firewall e Protecao

Seu servidor esta na internet, exposto a milhares de tentativas de invasao por dia. Aqui voce aprende a colocar um porteiro na frente dele: abrir so as portas certas, banir quem insiste em errar a senha e ligar o cadeado verde do HTTPS.

6
Topicos
45
Minutos
Basico
Nivel
Pratico
Tipo
1

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.

INTERNET visitante :443 admin :22 invasor :3306 bot :23 scanner :8080 FIREWALL 22 aberta ✓ 80 aberta ✓ 443 aberta ✓ resto fechada ✗ so o permitido SEU SERVIDOR 🛡️ protegido

🧠 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.

2

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 status apos cada mudanca
  • Abrir somente as portas que voce realmente usa

✗ O que NAO fazer

  • Rodar enable sem liberar o SSH primeiro
  • Abrir a porta de banco de dados (3306) para a internet
  • Deixar tudo aberto "para resolver depois"
3

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).

22
SSH

Sua porta de administracao. E por aqui que voce entra no servidor pelo terminal.

80
HTTP

A porta dos sites sem cadeado. Geralmente so redireciona o visitante para o HTTPS.

443
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.

4

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

1

Atacante tenta entrar

Um bot tenta logar no SSH com senhas aleatorias: admin, 123456, root...

2

Fail2ban conta as falhas

Cada senha errada e registrada no log. O Fail2ban fica de olho nesse log.

3

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.

5

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.

6

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 status e 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

Firewall e o porteiro do servidor - so deixa passar quem tem permissao
UFW: allow, deny, enable, status - configurar o firewall em comandos simples
Portas 22, 80 e 443 - SSH, HTTP e HTTPS, o trio essencial de um site
Fail2ban bane IPs - depois de varias tentativas de senha falhas
SSL gratis com Let's Encrypt - certbot liga o cadeado verde do HTTPS

Proximo Modulo:

3.4 - Tokens e Acesso (gerenciar chaves e segredos sem nunca deixa-los vazar)