SIXCORE Logo SIXCORE • Educação Profissional
NGINX Logo High Performance Web Server

NGINX com Segurança e Integração MikroTik

Nível: Iniciante → Intermediário • Formato: Teórico + Prático

NGINX HTTPS Reverse Proxy MikroTik Firewall Let's Encrypt
Instrutor JOSUÉ SANTOS • SIXCORE

Sumário

  1. Apresentação Pessoal
  2. Conhecimento básico do NGINX
  3. Por que usar Debian?
  4. Conhecimento básico de SSL/TLS, Certbot e Let's Encrypt
  5. Passo a Passo Josué Santos
  6. Referências oficiais
Josué Santos

Josué Santos

Analista em T.I • DPL Construções • Community Contributor

Casado com Jucilene • Pai da Acsah Thuanny

Entusiasta de tecnologia e desenvolvedor de software, transformando ideias em código. Explorando o universo Python, automação e análise de dados. Profissional com mais de 7 anos de experiência em infraestrutura de TI, especializado em soluções de rede, servidores Linux e implementação de tecnologias.

Formação: Estudante de Análise e Desenvolvimento de Sistemas • Universidade Ceuma

Localização: Imperatriz, Maranhão, Brasil

🐙 GitHub 💼 LinkedIn 📸 Instagram
🔧
Infraestrutura
Analista em T.I, Servidores Windows e Linux, Virtualização, Docker
🌐
Redes
Análise de Redes, MikroTik, Firewall, VPN
🐍
Python
Automação, Análise de Dados, Scripts, Desenvolvimento
Performance
NGINX, Otimização, Monitoramento
🎓
Educação
Community Contributor, Treinamentos, Mentorias
🏗️
Desenvolvimento
Software Development, Automação, DevOps

Missão: "Transformar conhecimento técnico em crescimento profissional, explorando o universo da tecnologia com Python, automação e análise de dados."

Conhecimento básico do NGINX

O que é NGINX?

O NGINX (pronuncia-se "engine X") é um servidor web de alta performance e proxy reverso de código aberto. Diferentemente do Apache, que usa um modelo de processamento baseado em threads (uma thread por conexão), o NGINX utiliza uma arquitetura event-driven (orientada a eventos) com um event loop não bloqueante.

Vantagens da Arquitetura Assíncrona do NGINX
Arquitetura assíncrona do NGINX vs Apache tradicional.

Características principais

Componentes principais do NGINX

Master Process

Lê e valida o arquivo de configuração (nginx.conf), inicia, para e reinicia os processos worker, permite recarregar a configuração sem derrubar o serviço (reload sem downtime) e gerencia sinais do sistema operacional.

Worker Processes

Processam as requisições HTTP/HTTPS, cada worker pode lidar com múltiplas conexões simultaneamente, normalmente o número de workers é igual ao número de núcleos de CPU (worker_processes auto;) e trabalham de forma independente.

Event Loop

Mecanismo que permite que cada worker aguarde eventos (novas conexões, dados chegando) sem bloquear. Usa sistemas operacionais eficientes como epoll (Linux), kqueue (BSD/macOS) ou IOCP (Windows). Permite que um único processo worker gerencie milhares de conexões.

Para que serve o NGINX?

Ideal para: Servir conteúdo estático com alta performance, proxy reverso para aplicações backend, balanceamento de carga entre múltiplos servidores, terminação TLS/SSL, cache de conteúdo e compressão, rate limiting e proteção contra ataques DDoS, roteamento de requisições baseado em domínio, caminho ou headers.

Comparação: NGINX vs Apache

Aspecto NGINX Apache
Modelo de processamento Event-driven (assíncrono) Thread-based (síncrono)
Consumo de memória Baixo (~2-5 MB por worker) Alto (~10-20 MB por thread)
Conexões simultâneas 10.000+ facilmente Limitado pelo número de threads
Performance estática Excelente Bom
Configuração Simples e direta Complexa (muitos módulos)

Por que usar Debian?

Melhores Distribuições Linux para Servidor
Principais distribuições Linux recomendadas para servidores.

O que é Debian?

Debian é uma distribuição Linux estável, segura e confiável, mantida por uma comunidade de voluntários. É uma das distribuições mais antigas e respeitadas do Linux, servindo como base para muitas outras (Ubuntu, Linux Mint, etc.).

Por que Debian é ideal para servidores

Estabilidade

Ciclo de lançamento longo (a cada 2-3 anos), versões antigas recebem suporte por 5+ anos, testes rigorosos antes de cada release, ideal para ambientes de produção onde downtime é crítico.

Segurança

Equipe dedicada de segurança que publica patches rapidamente, repositórios oficiais contêm apenas software verificado, suporte de longa duração (LTS) para versões estáveis, comunidade ativa reportando e corrigindo vulnerabilidades.

Minimalismo

Instalação base muito leve (sem bloatware), você instala apenas o que precisa, menos serviços desnecessários = menos superfície de ataque, ideal para VPS e servidores com recursos limitados.

Compatibilidade com NGINX

NGINX está disponível nos repositórios oficiais do Debian, fácil instalação: apt install nginx, atualizações automáticas de segurança, comunidade grande de usuários NGINX no Debian.

Gerenciamento de pacotes (APT)

O APT (Advanced Package Tool) é um sistema de pacotes robusto e confiável que resolve dependências automaticamente, facilita atualizar, remover ou instalar pacotes, e mantém repositórios bem organizados (main, contrib, non-free).

Custo

Debian é completamente gratuito e open-source, sem licenças proprietárias, ideal para startups e projetos com orçamento limitado.

Versões recomendadas

Comparação: Debian vs outras distribuições

Distribuição Estabilidade Segurança Comunidade Ideal para
Debian Excelente Excelente Muito grande Servidores de produção
Ubuntu Boa Boa Muito grande Desktop e servidores
CentOS/RHEL Excelente Excelente Grande Empresas (pago)
Alpine Boa Boa Pequena Containers (Docker)

Conhecimento básico de SSL/TLS, Certbot e Let's Encrypt

O que é SSL/TLS?

SSL (Secure Sockets Layer) e TLS (Transport Layer Security) são protocolos que criptografam a comunicação entre o cliente (navegador) e o servidor (NGINX). Quando você acessa um site com https://, está usando TLS.

O que é SSL/TLS
Conceito básico de SSL/TLS e sua importância na segurança web.

Diferença importante: SSL é a versão antiga (descontinuada desde 2015), TLS é a versão moderna e segura (1.2 e 1.3 são as atuais). Coloquialmente, ainda chamamos de "SSL" mesmo usando TLS.

Como funciona HTTPS/TLS

Como funciona HTTPS/TLS
Fluxo detalhado do handshake TLS e comunicação criptografada.

1. Handshake

Cliente conecta ao servidor na porta 443, servidor envia seu certificado (contém chave pública), cliente verifica se o certificado é válido e confiável, cliente e servidor negociam uma chave de sessão criptografada.

2. Comunicação

Todos os dados trocados são criptografados, apenas cliente e servidor conseguem descriptografar, protege contra espionagem (man-in-the-middle attacks).

3. Autenticação

O certificado prova que o servidor é quem diz ser, navegador verifica a assinatura do certificado contra autoridades confiáveis (CAs).

O que é Let's Encrypt?

Let's Encrypt é uma autoridade certificadora (CA) gratuita, automatizada e aberta que emite certificados SSL/TLS válidos. Criada em 2016, revolucionou a segurança web ao tornar HTTPS acessível para todos.

Let's Encrypt Logo e Conceito
Let's Encrypt: certificados SSL/TLS gratuitos e automatizados.

Características: Gratuito (sem custos de certificado), automatizado (emissão e renovação automática), aberto (código-fonte disponível, sem restrições), confiável (reconhecido por todos os navegadores), válido por 90 dias (renovação automática antes do vencimento).

O que é ACME?

ACME (Automatic Certificate Management Environment) é um protocolo que automatiza a emissão e renovação de certificados. Let's Encrypt usa ACME para validar que você é o dono do domínio, emitir o certificado automaticamente e renovar antes do vencimento.

Tipos de validação ACME

O que é Certbot?

Certbot é um cliente ACME oficial mantido pela EFF (Electronic Frontier Foundation). Automatiza todo o processo: valida a propriedade do domínio, emite o certificado Let's Encrypt, configura o NGINX automaticamente e renova o certificado antes do vencimento.

Vantagens: Simples de usar (um comando), integração automática com NGINX, renovação automática via cron, suporta múltiplos domínios.

Fluxo completo: Do domínio ao HTTPS

  1. Você compra um domínio (ex: seu-site.com)
  2. Aponta o domínio para seu servidor (DNS A record)
  3. Instala Certbot no servidor
  4. Executa: certbot --nginx -d seu-site.com
  5. Certbot valida o domínio (HTTP-01)
  6. Let's Encrypt emite o certificado
  7. Certbot configura NGINX automaticamente
  8. Seu site está HTTPS ✅
  9. Cron renova automaticamente a cada 90 dias

Certificados Let's Encrypt vs Certificados pagos

Aspecto Let's Encrypt Certificados pagos
Custo Gratuito $50-300/ano
Validação Domain (DV) Domain, Organization ou Extended
Validade 90 dias 1-3 anos
Renovação Automática Manual
Garantia Não Sim (até $10k)
Ideal para Maioria dos sites Grandes empresas

Conclusão: Para 99% dos casos, Let's Encrypt é suficiente e recomendado.

Configuração básica de TLS no NGINX

server {
    listen 443 ssl http2;
    server_name seu-site.com;

    # Certificados Let's Encrypt
    ssl_certificate /etc/letsencrypt/live/seu-site.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/seu-site.com/privkey.pem;

    # Protocolos seguros
    ssl_protocols TLSv1.2 TLSv1.3;

    # Ciphers fortes
    ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384";
    ssl_prefer_server_ciphers on;

    # Segurança adicional
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;

    # Headers de segurança
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}

# Redirecionar HTTP para HTTPS
server {
    listen 80;
    server_name seu-site.com;
    return 301 https://$host$request_uri;
}

Passo a Passo Josué Santos

Arquitetura MikroTik + NGINX
Arquitetura completa: Internet → MikroTik Firewall → NGINX → Aplicações internas.
Pré-requisitos: Acesso root/sudo em uma máquina Debian, conexão à internet, um domínio válido (ou IP público), e acesso administrativo ao MikroTik.

🔧 Sequência de Configuração

  1. Instalação Debian e Dependências
  2. Atualização Debian e Instalação NGINX e Certbot
  3. Liberação Firewall MikroTik
  4. Configuração SSL com Certbot (ACME Let's Encrypt)

📋 Informações necessárias antes de começar:

  • Domínio: Registrado e apontando para seu IP público
  • Acesso MikroTik: Usuário/senha do RouterOS
  • Install: Debian deve ser Instalado sem Interface Grafica.
  • Disco: Assistido - usar disco inteiro e configurar LVM.
  • Software: Somente selecionar o Servidor SSH.
  • Rede: IP local servidor Debian (ex: 192.168.1.200)
  • Porta da aplicação: Porta onde sua aplicação roda (ex: 8080)

1Instalação Debian e Dependências

Instalação do Debian 12
Processo de instalação do Debian 12 - Configuração inicial do sistema.
Instalação Assistida Debian
Configuração de Disco - Assistido com LVM.
Configuração SSH no Debian
Seleção de Software - SSH acesso remoto seguro ao servidor.
📹 Material de Apoio: Para um tutorial completo em vídeo sobre a instalação do Debian 12, acesse: Aprenda a Instalar o Debian 12 - Diolinux
Pré-requisitos: Acesso root/sudo em uma máquina Debian, conexão à internet.

2 Atualização Debian e Instalação NGINX e Certbot

Pré-requisitos: Instalação do Debian sem GUI, Acesso root/sudo, conexão à internet.

Passos de instalação

1) Atualizar e instalar pacotes essenciais
apt update && apt full-upgrade -y
apt install sudo
apt install nginx
apt install python3-certbot-nginx certbot
2) Configurar e habilitar NGINX
cd /etc/nginx/sites-enabled/
rm default
cd /etc/nginx/sites-available/
rm default
sudo nginx -t
sudo systemctl start nginx
sudo systemctl status nginx
3) Validar instalação
curl -I http://localhost
nginx -v
sudo nginx -t

3 Liberação Firewall MikroTik

Atenção: Execute essas configurações via Winbox ou SSH. Cuidado para não se bloquear do roteador.

Configuração de NAT e Firewall

1) Configurar NAT (Redirecionamento de Portas)
Objetivo: Redirecionar tráfego das portas 80 e 443 do IP público para o servidor NGINX interno.
# Via Terminal MikroTik:

# NAT para porta 80 (HTTP)
/ip firewall nat
add action=dst-nat chain=dstnat dst-port=80 protocol=tcp to-addresses=192.168.1.200 to-ports=80

# NAT para porta 443 (HTTPS)  
/ip firewall nat
add action=dst-nat chain=dstnat dst-port=443 protocol=tcp to-addresses=192.168.1.200 to-ports=443
Winbox: IP → Firewall → NAT → Add New → Chain: dstnat, Protocol: TCP, Dst. Port: 80, Action: dst-nat, To Addresses: 192.168.1.200, To Ports: 80
2) Configurar regras de Firewall Filter
# Permitir tráfego HTTP/HTTPS para o servidor NGINX
/ip firewall filter

# Permitir HTTP (porta 80) para o servidor
add action=accept chain=forward dst-address=192.168.1.200 dst-port=80 protocol=tcp

# Permitir HTTPS (porta 443) para o servidor
add action=accept chain=forward dst-address=192.168.1.200 dst-port=443 protocol=tcp

# Permitir respostas de conexões estabelecidas
add action=accept chain=forward connection-state=established,related

📊 Tabela de Portas Configuradas

Serviço Porta Externa Porta Interna IP Destino Protocolo
HTTP 80 80 192.168.1.200 TCP
HTTPS 443 443 192.168.1.200 TCP

4 Configuração SSL com Certbot (ACME Let's Encrypt)

Atenção: Certifique-se de que as portas 80 e 443 estão acessíveis publicamente através do MikroTik (necessárias para validação ACME).

Obter certificado Let's Encrypt

1) Criar configuração básica no NGINX
sudo nano /etc/nginx/sites-available/nginxconf
Atenção: Ajuste o server_name de acordo com seu domínio. Se tiver IPv6, descomente a linha correspondente.
server {
    listen 80;
    # listen [::]:80;  # Descomente se tiver IPv6

    server_name nginxconf.dpl.srv.br;  # Substitua pelo seu domínio

}
sudo ln -s /etc/nginx/sites-available/nginxconf /etc/nginx/sites-enabled/
sudo nginx -t
systemctl restart nginx.service
sudo systemctl status nginx
cd /etc/nginx/sites-available/
ls -la
2) Criar certificados (Certbot + plugin NGINX)
sudo certbot --nginx -d nginxconf.dpl.srv.br
systemctl restart nginx.service
sudo systemctl status nginx
Durante a execução do Certbot:
  1. Informe um e-mail válido para notificações
  2. Digite 'A' para aceitar os termos
  3. Digite 'N' para não compartilhar e-mail com EFF
  4. Aguarde a validação automática
3) Configurar HTTPS + Reverse Proxy
sudo nano /etc/nginx/sites-available/nginxconf
Atenção:
  • Ajuste todos os server_name de acordo com seu domínio
  • Ajuste o proxy_pass conforme o IP do servidor da aplicação
  • Obtenha a ssl_ciphers em: https://ssl-config.mozilla.org/
server {
    listen 443 ssl http2;
    # OBS: Ajuste todos os server_name de acordo com seu domínio
    server_name nginxconf.dpl.srv.br;

    ssl_certificate /etc/letsencrypt/live/nginxconf.dpl.srv.br/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/nginxconf.dpl.srv.br/privkey.pem; # managed by Certbot

    # Configurações de SSL/TLS
    ssl_protocols TLSv1.2 TLSv1.3;
    # OBS: Obtenha a ssl_ciphers atualizada em https://ssl-config.mozilla.org/
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;
    ssl_ecdh_curve X25519:P-256:P-384:P-521;

    # Configurações de sessão SSL
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;

    # Tamanho máximo de upload (ajuste conforme necessário)
    client_max_body_size 100M;

    # Headers de segurança
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Content-Type-Options nosniff always;
    add_header X-Frame-Options DENY always;
    add_header X-XSS-Protection "1; mode=block" always;

    location / {
        # OBS: Ajustar o proxy_pass de acordo com o IP do servidor
        proxy_pass http://192.168.1.210:8080/;
        proxy_http_version 1.1;
        
        # Headers para WebSocket e conexões upgrade
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        # Headers padrão do proxy
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # Timeouts
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}

server {
    listen 80;
    server_name nginxconf.dpl.srv.br;
    return 301 https://$host$request_uri;  # Redireciona HTTP para HTTPS
}
4) Validar configuração SSL e reiniciar serviços
sudo nginx -t
systemctl restart nginx.service
sudo systemctl status nginx

# Testar SSL
curl -I https://nginxconf.dpl.srv.br

# Verificar certificado
openssl s_client -connect nginxconf.dpl.srv.br:443 -servername nginxconf.dpl.srv.br
5) Configurar renovação automática de certificados
# Testar renovação
certbot renew

# Adicionar ao crontab para renovação automática
echo '00 00 1 * * root certbot renew -q' >> /etc/crontab

# Reiniciar e verificar cron
systemctl restart cron
systemctl status cron

# Verificar crontab
cat /etc/crontab

# Verificar logs do cron
tail -f /var/log/cron.log

🔐 Teste Final de SSL

Acesse seu domínio e verifique:

  • HTTPS funciona: https://seu-dominio.com
  • HTTP redireciona: http://seu-dominio.com → https://
  • Certificado válido: Navegador mostra cadeado verde
  • Aplicação acessível: Proxy reverso funcionando
Ferramentas para testar SSL:
  • SSL Labs Test - Análise completa do SSL
  • WhatsMyDNS - Verificar propagação DNS
  • Comando: curl -I https://seu-dominio.com

Referências oficiais

Lembre-se: 80/443 expostas ao público via MikroTik (DST-NAT + filtros) apontando para o NGINX.