NGINX: Segurança para Servidores

NGINX: Segurança para Servidores

No universo da segurança para servidores, o NGINX desponta como uma poderosa ferramenta, oferecendo não apenas funcionalidades essenciais de um servidor web, mas também recursos avançados, como proxy reverso e balanceamento de carga.

Neste artigo, exploramos os fundamentos do NGINX, seu papel em empresas renomadas e suas características distintas.

O que significa NGINX?

O termo NGINX, pronunciado “engine-ex,” é um servidor web open-source, também utilizado como proxy reverso e balanceador de carga.

Algumas empresas que utilizam o NGINX:

    • Atlassian

    • T-Mobile

    • GitLab

    • DuckDuckGo

    • Microsoft

    • IBM

    • Google

    • Adobe

    • Salesforce

    • LinkedIn

    • Cisco

    • Facebook

    • Twitter

    • Apple

    • Intel

O NGINX foi projetado para possibilitar uma utilização de pouca memória e uma elevada simultaneidade. Em vez de criar novos processos para cada requisição web, o NGINX usa uma abordagem assíncrona e orientada para eventos, na qual as requisições são gerenciadas em um único segmento.

Algumas características encontradas no NGINX

    • Proxy reverso com armazenamento em cache

    • IPv6

    • Balanceamento de carga

    • Suporte para o FastCGI com cache

    • WebSockets

    • Manipulação de arquivos estáticos, arquivos de índice e indexação automática

    • TLS/SSL com SNI

Como verificar se você está utilizando o NGINX

Na maioria dos sites, pode simplesmente verificar o cabeçalho HTTP server para ver se ele diz NGINX. Você pode ver os cabeçalhos HTTP ao abrir o separador “Rede” no Chrome DevTools. Contudo, o cabeçalho HTTP nem sempre revela o servidor web subjacente. Por exemplo, se seu site WordPress estiver por trás de um serviço de proxy, como o Cloudflare, o cabeçalho HTTP server dirá Cloudflare.

Agora, sabendo os princípios básicos, vamos esclarecer…

Para que serve um proxy reverso?

Um proxy reverso é um servidor que fica na frente dos servidores web e encaminha as requisições do cliente (por exemplo, navegador web) para esses servidores web. Os proxy reversos normalmente são implementados para ajudar a aumentar a segurança, o desempenho e a confiabilidade.

E para que serve um balanceador de carga?

O balanceamento de carga é o método de distribuir o tráfego de rede igualmente em um grupo de recursos que oferecem suporte a uma aplicação. As aplicações modernas devem processar milhões de usuários simultaneamente e retornar o texto, vídeos, imagens e outros dados corretos para cada usuário de maneira rápida e confiável. Para lidar com volumes tão altos de tráfego, a maioria das aplicações tem muitos servidores de recursos com dados duplicados entre eles. Um balanceador de carga é um dispositivo que fica entre o usuário e o grupo de servidores e atua como um facilitador invisível, garantindo que todos os servidores de recursos sejam usados igualmente.

O balanceamento de carga direciona e controla o tráfego da Internet entre os servidores de aplicações e seus visitantes ou clientes. Como resultado, ele melhora a disponibilidade, e escalabilidade, a segurança e a performance de uma aplicação.

Agora, vamos esclarecer sobre o ponto importante que visa a segurança para servidores:

É importante considerar que o servidor NGINX é mais eficiente, consumindo menos recursos do que o Apache, e se tornou recentemente o servidor web mais popular no mundo.

Trabalhando com HTTPS no NGINX

O uso de HTTPS para navegação em websites se tornou uma prática padrão, essencial inclusive para sites pessoais e blogs (como o que você está lendo agora). O Google já leva em consideração o uso de certificados de segurança para o ranqueamento no sistema de busca, como um dos parâmetros do conceito de Page Experience.

Você pode instalar um certificado de segurança no seu servidor NGINX gratuitamente usando o Certbot. Alguns serviços de hospedagem também oferecem instalações gratuitas ou pagas em seus planos.

Uma vez instalado, você pode redirecionar todo o tráfego para a versão segura do seu site com HTTPS usando o código abaixo no bloco server do arquivo de configuração dentro da pasta sites-enabled.

Exemplo:

# Force HTTPS

#

server {

    listen 80;

    listen [::]:80;

    access_log off;

    error_log off;

    server_name example.com www.example.com;

    return 301 https://example.com$request_uri;

}

No código acima, todos os acessos via porta 80 (http) no domínio example.com e com o subdomínio www.example.com serão redirecionados para o endereço https://example.com. Note o $request_uri, que repassa o caminho de arquivos que possa vir depois do domínio na barra de endereços.

Também é recomendável bloquear o acesso via porta 80 no endereço IP do seu servidor. No caso, o servidor retorna um erro 444 (connection closed without response).

# Block access using server IP

#

server {

    listen 80 default_server;

    server_name _;

    return 444;

}

Para bloquear o acesso direto via IP inclusive via HTTPS, forçando o usuário a acessar pelo domínio do seu site, você pode adaptar o bloco de configurações do site com SSL em seu servidor usando o seguinte código:

server {

    …

    server_name example.com www.example.com;

    if ($host !~ ^(example.com|www.example.com)$){

        return 400;

    }

    …

}

Neste exemplo, se o usuário acessa o servidor por algo diferente de example.com ou www.example.com, o NGINX retorna para o usuário um erro 400 (Bad Request). Note que o erro 444 não pode ser retornado por conta do handshake na conexão SSL.

Protegendo pastas com senha no NGINX

Outra dica de segurança no NGINX é proteger o acesso a pastas e arquivos confidenciais ou administrativos com senha, para evitar acessos não autorizados.

Primeiro é necessário criarmos um arquivo de senha com as credenciais de acesso. Para criar uma senha criptografada, use o comando openssl password no terminal. Insira e confirme a senha desejada. O comando retornará a versão criptografada da sua senha:

# Criar uma senha criptografada

openssl password

# Exemplo de retorno após a entrada da senha desejada

/PUfiF9t9VXnI

Copie o valor retornado. Agora vamos criar o arquivo com os dados de autenticação. Neste exemplo, nomearemos o arquivo como autenticacao e salvaremos dentro da pasta /etc/nginx/.

# Criar o arquivo /etc/nginx/autenticacao no editor de texto

sudo nano /etc/nginx/autenticacao

No editor de texto, você especificará o nome de usuário, seguido por dois pontos, e a senha criptografada que criou nos passos anteriores. Por exemplo, john_doe:/PUfiF9t9VXnI. Salve e feche o arquivo.

Agora vamos modificar o arquivo de configuração do NGINX. Abra o arquivo de configuração correspondente ao site desejado na pasta /etc/nginx/sites-available/. Neste exemplo, faremos a configuração na pasta /restrito/.

server {

    …

    location / {

        try_files $uri $uri/ =404;

    }

    location ^~ /restrito/ {

        auth_basic “Admin Login”;

        auth_basic_user_file /etc/nginx/autenticacao;

    }

    …

}

Salve o arquivo no editor de texto e reinicie o servidor NGINX com o comando sudo systemctl reload nginx. Quando algum usuário acessar o endereço example.com/restrito, ele verá um prompt do navegador exigindo nome de usuário e senha definido no arquivo autenticacao para acessá-lo.

Cabeçalhos de segurança no NGINX

Por fim, uma configuração importante que evita, entre outros, a injeção de código malicioso e clickjacking. Pode ser configurado tanto no arquivo correspondente ao site na pasta sites-available quanto no arquivo de configuração geral do NGINX, com o comando add_header.

A configuração dos cabeçalhos depende do nível de segurança que você precisa oferecer no seu site, mas segue abaixo um exemplo.

add_header X-Frame-Options SAMEORIGIN;

add_header X-Content-Type-Options nosniff;

add_header X-XSS-Protection “1; mode=block”;

add_header Content-Security-Policy “default-src ‘self’; script-src ‘self’ ‘unsafe-inline’ ‘unsafe-eval’ https://ssl.google-analytics.com; img-src ‘self’ https://ssl.google-analytics.com; style-src ‘self’ ‘unsafe-inline’ https://fonts.googleapis.com; font-src ‘self’ https://themes.googleusercontent.com; object-src ‘none'”;

Conclusão

Em conclusão, a implementação efetiva de práticas de segurança no NGINX é crucial para salvaguardar servidores contra ameaças digitais. Desde a configuração do HTTPS até a proteção de pastas com senha e a adoção de cabeçalhos de segurança, cada passo contribui para um ambiente mais robusto e resistente. Ao aproveitar ao máximo as capacidades do NGINX, os administradores de servidores podem garantir não apenas desempenho excepcional, mas também uma defesa sólida contra potenciais vulnerabilidades. Ao celebrarmos o primeiro ano do NGINX, reconhecemos não apenas sua popularidade, mas sua importância na construção de um ecossistema online mais seguro e confiável.

Gostou do artigo? Compartilhe.

LinkedIn
Facebook
WhatsApp

Faça parte da nossa lista de emails!