Nginx Seguro
CONFIGURAÇÃO E PROTEÇÃO DE SERVIÇOS WEB
Abertura
Desenvolvimento
Infraestrutura (DataCenter / Cloud)
[Link]
Glaucio Guerra
CTO - MarkWay
glaucio@[Link] Arquitetura
DevOps
[Link]
Consultoria especializada
Educação
[Link]/in/glaucioguerra/
Abertura
Indicado para iniciantes e profissionais experientes em servidores
Web que desejam aprender sobre configuração e otimização do
NGINX.
Compartilha as melhores práticas de mercado relacionadas ao
NGINX.
O livro aborda as funcionalidades do NGINX, oferecendo
informações sobre configuração, otimização e segurança.
Versão Impressa: [Link] Versão Digital: [Link]
Abertura
Apache Web Server DevOps - Mão na Massa Go - DevOps & SREs
[Link] [Link] [Link]
Abertura
DevOps
SRE
Arquitetura
Podcasts
Perguntas x Respostas
Dicas
Promoções e sorteios de cursos
Primeiros Passos
Introdução
Introdução
Nginx, criado por Igor Sysoev em 2002, é um servidor web de código aberto.
Destacou-se por lidar com muitas conexões simultâneas com baixo uso de
recursos.
Lançado oficialmente como projeto de código aberto em 2004.
Ganhou popularidade como servidor web de alto desempenho e proxy
reverso.
Em 2011, a empresa Nginx Inc. foi criada para desenvolver soluções, incluindo
o Nginx Plus, uma versão comercial com suporte.
Introdução
Quem utiliza?
Introdução
Funcionamento
[Link]
Introdução
Arquitetura Híbrida
[Link]
Introdução
HA - Multi Zones
[Link]
Introdução
Global Load Balance
[Link]
Primeiros Passos
Instalação do Nginx
Instalação
Servidor Ubuntu 20.4
Acesso a Internet
1G de RAM
20G Disco
2VCPUs
Instalação
Atualização do S.O
Instalação do git
Configuração do repo Nginx
Instalação do Nginx
Configuração do primeiro virtual host
Instalação
Atualização do S.O
sudo apt update && sudo apt upgrade -y
sudo apt autoremove
Instalação
Instalação do Git
sudo apt install git
git --version
[Link]
Instalação
Instalação Nginx
Hora do Hands On
Primeiros Passos
Configuração de Virtual Server
Virtual Server
Para que serve?
Permite que um único servidor web hospede vários sites
diferentes em um único servidor físico.
Cada site pode ter sua própria configuração e comportamento
independentes.
Mesmo compartilhando recursos do servidor, os virtual hosts
direcionam solicitações para o site correto com base no nome de
domínio
Virtual Server
Criar um arquivo de configuração extensão .conf
Criar diretório de hospedagem dos arquivos estáticos
Download da aplicação:
[Link]
[Link]
Simular criação de um nome de DNS válido (/etc/hosts)
Virtual Server
server {
listen 80;
server_name [Link];
root /var/www/[Link];
index [Link];
location / {
try_files $uri $uri/ = 404;
}
Virtual Server
Comandos básicos:
nginx -t
service nginx reload
service nginx start
service nginx restart
git clone
Virtual Server
Erros comuns:
Virtual Server
Hora do Hands On
Virtual Server
[Link]
Dica rápida
Criação de alias
Editar ~/.bashrc
Adicionar alias: ntr (nginx test e reload)
echo "alias seu_alias='nginx -t && service nginx reload'" >> ~/.bashrc
Primeiros Passos
Estrutura de diretórios e arquivos
Estrutura de diretórios e arquivos
/etc/nginx:
Diretório principal de configuração do produto
Configurações globais
/etc/nginx/conf.d:
Configuração virtual hosts
/usr/share/nginx:
Arquivos estáticos
/var/log/nginx:
Arquivos de acesso e erros do web server.
Estrutura de diretórios e arquivos
/etc/nginx/[Link]: http {
#tabela DE X PARA de tipos de arquivos
include /etc/nginx/[Link];
user nginx; #type default caso não seja encontrado no [Link]
default_type application/octet-stream;
#qtd de workers (CPU)
worker_processes auto; log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
error_log /var/log/nginx/[Link] notice; '"$http_user_agent" "$http_x_forwarded_for"';
pid /var/run/[Link]; access_log /var/log/nginx/[Link] main;
events { # cópia direta de um file descriptor para outro
#n. máximo de conexões por worker sendfile on;
#Envia http response header em um pacote somente (precisa do sendfile)
worker_connections 1024; #tcp_nopush on;
# tempo que a conexão se mantém aberta com o client.
} keepalive_timeout 65;
# Compactação de requests
#gzip on;
# inclusão de arquivos de configuração (virtual hosts)
include /etc/nginx/conf.d/*.conf;
Tópicos avançados
Balanceamento de carga
Balanceamento de carga
Distribuição de carga por diversos servidores
Melhorar Desempenho e escalabilidade
Caso de uso:
Balanceamento entre dois servidores NodeJs
Instalação do NodeJs e npm
Balanceamento de carga
upstream node-servers {
server localhost:3000; # servidor A
server localhost:3001; # servidor B
}
Instalação do NodeJs
Configuração de duas apps server {
Configuração do balance no Nginx listen 80;
server_name [Link];
location / {
proxy_pass [Link]
}
}
Balanceamento de carga
Hora do Hands On
Segurança
Certificado SSL com Let's Encrypt
SSL com Let's Encrypt
Tornar a criptografia de sites e aplicativos web mais acessível e fácil de
implementar
O Let’s Encrypt é uma autoridade de certificação (ou CA - Certificate
Authority) gratuita
Os certificados SSL/TLS são uma forma de criptografar a comunicação
entre um servidor web e o navegador do usuário
O certificado emitido pela Let’s Encrypt tem validade de apenas 90 dias,
diferentemente do padrão utilizado pelo mercado
SSL com Let's Encrypt
Certbot:
CLI desenvolvido pelo Let’s Encrypt que facilita o processo de obtenção, renovação e
gerenciamento de certificados SSL/TLS gratuitos
Fácil utilização
Automação no processo de obter e renovar certificado
Gratuito
SSL com Let's Encrypt
Domínio válido
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx
SSL com Let's Encrypt
server {
listen 80;
# Substitua pelo seu domínio
server_name [Link];
root /var/www/agenciasbancarias;
index [Link];
# Servir arquivos estáticos diretamente
location / {
try_files $uri $uri/ =404;
}
}
SSL com Let's Encrypt
Hora do Hands On
Segurança
Configuração de redirects para SSL
Redirect para SSL
Redirecionar todos os requets para https
Manter o site seguro
Evitar erro 404 para chamadas HTTP
Configuração de host www
Redirect para SSL
Hora do Hands On
Segurança
Autenticação básica
Autenticação básica
Gerenciada no Nginx
Forma eficiente de proteger um endereço
Utilizada quando recurso não é protegido pela
aplicação (conteúdo estático por exemplo)
Armazenamento via htpasswd
Autenticação básica
sudo apt-get install apache2-utils
htpasswd -c /etc/nginx/.htpasswd <username>
Adicionar ao virtual host [Link]:
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
Reload do serviço
Autenticação básica
Hora do Hands On
Segurança
Firewall
Firewall
Geralmente utilizado como Appliance
pfsense, Palo alto, Juniper, Check Point, etc.
Firewall Cloud (AWS, Azure, OCI, GCP)
Firewall embarcado no Nginx: Soluções menores
VPS
UFW - Criação de regras de firewall simples
Limitar tráfego de entrada
Especificar quais portas serão liberadas
80, 443, 22
Firewall
Hora do Hands On
Segurança
Web Application Firewall - ModSecurity
WAF - ModSecurity
ModSecurity: WAF OpenSource
SQL Injection
Cross-site scripting (XSS)
Site request Forgery (CSRF)
OWASP Modsecurity Core Rule Set (CRS)
[Link]
WAF - ModSecurity
Compilação a partir do fonte:
ModSecurity-connector
Habilitar / configurar o mod_security
Baixar e configurar core rule set:
[Link]
WAF - ModSecurity
Hora do Hands On
Segurança
Análise DAST - ZAP
Análise DAST - ZAP
DAST (Dynamic Application Security Testing)
Teste de aplicativo em modo de execução
Ferramenta de teste de segurança OpenSource
Teste de aplicativos Web e APIs
Formas de uso: GUI e CLI
[Link]
Análise DAST - ZAP
Hora do Hands On
Próximos passos
Próximos Passos
Instalação em containers
Tuning de S.O
Compactação
Algoritmos de Load Balance
HTTP/2
Ajustes avançados de SSL
CDN
...
Versão Impressa: [Link]
Versão Digital: [Link] Glaucio Guerra
CTO - MarkWay
glaucio@[Link]
[Link]/in/glaucioguerra
[Link] [Link] [Link]
OBRIGADO!
PERGUNTAS?