Melhores práticas de segurança para servidores WEB

Este guia detalha as melhores práticas de segurança para servidores web, incluindo a configuração de headers HTTP (CSP, HSTS, X-Frame-Options), ajustes de performance (limites de solicitações, desativação de listagem de diretórios), uso de SSL/TLS e medidas contra ataques DoS/DDoS. Ele também aborda o monitoramento e a proteção através de WAF e logs.

Configurar um servidor web de forma segura é um passo crucial para proteger suas aplicações contra uma vasta gama de ameaças. Ao seguir este guia, você poderá garantir que seu servidor web esteja configurado de acordo com as melhores práticas de segurança, usando headers HTTP, ajustes de configuração (tuning) e outros mecanismos de proteção. O foco aqui será em servidores Apache e Nginx, dois dos servidores web mais populares.

1. Configuração de Headers HTTP para Segurança

Os headers HTTP são uma das primeiras camadas de defesa que você pode implementar para aumentar a segurança de sua aplicação web. Abaixo estão alguns dos principais headers de segurança que você deve configurar no seu servidor.

a) Content Security Policy (CSP)

Este header ajuda a prevenir ataques de Cross-Site Scripting (XSS) e outros tipos de injeção de conteúdo, restringindo quais fontes de recursos (scripts, imagens, estilos) podem ser carregadas em seu site.

Exemplo de Configuração para Apache:

<IfModule mod_headers.c>
Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.com; object-src 'none';"
</IfModule>

Exemplo de Configuração para Nginx:

add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.com; object-src 'none';";

b) X-Frame-Options

Previne que seu site seja carregado dentro de um iframe, mitigando ataques de clickjacking.

Exemplo de Configuração para Apache:

<IfModule mod_headers.c>
Header always set X-Frame-Options "DENY"
</IfModule>

Exemplo de Configuração para Nginx:

nginxCopiar códigoadd_header X-Frame-Options "DENY";

c) X-Content-Type-Options

Este header impede que os navegadores façam o “sniffing” do tipo de conteúdo (content type) e assegura que o tipo MIME declarado seja respeitado.

Exemplo de Configuração para Apache:

<IfModule mod_headers.c>
Header set X-Content-Type-Options "nosniff"
</IfModule>

Exemplo de Configuração para Nginx:

nginxCopiar códigoadd_header X-Content-Type-Options "nosniff";

d) Strict-Transport-Security (HSTS)

Força o navegador a sempre utilizar HTTPS para se comunicar com o seu servidor, evitando ataques de downgrade (protocol downgrade attacks).

Exemplo de Configuração para Apache:

<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>

Exemplo de Configuração para Nginx:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

e) Referrer-Policy

Controla quais informações do referenciador (referrer) serão passadas ao navegar entre páginas.

Exemplo de Configuração para Apache:

<IfModule mod_headers.c>
Header set Referrer-Policy "no-referrer"
</IfModule>

Exemplo de Configuração para Nginx:

add_header Referrer-Policy "no-referrer";

2. Ajustes de Configuração (Tuning) do Servidor Web

Além dos headers de segurança, é importante ajustar as configurações do servidor web para otimizar seu desempenho e segurança.

a) Desabilitar Listagem de Diretórios

Desabilitar a listagem de diretórios impede que usuários mal-intencionados possam explorar o conteúdo do servidor.

Configuração para Apache:

<Directory /var/www/html>
Options -Indexes
</Directory>

Configuração para Nginx:

location / {
autoindex off;
}

b) Limitar o Tamanho das Solicitações (Request Limits)

Impor limites ao tamanho de uploads e solicitações HTTP pode evitar ataques de negação de serviço (DoS).

Configuração para Apache:

apacheCopiar códigoLimitRequestBody 10485760  # Limita o tamanho do corpo a 10 MB

Configuração para Nginx:

nginxCopiar códigoclient_max_body_size 10M;  # Limita o tamanho do corpo a 10 MB

c) Tempo de Timeout de Conexão

Configurar um tempo de timeout apropriado para conexões ociosas ajuda a evitar que os recursos do servidor sejam esgotados por conexões pendentes.

Configuração para Apache:

Timeout 60
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

Configuração para Nginx:

keepalive_timeout 65;
client_header_timeout 10;
client_body_timeout 10;

d) Desativar Protocolos Inseguros (TLS/SSL)

Sempre utilize a versão mais recente do TLS e desative versões anteriores, como TLS 1.0 e SSLv3, que possuem vulnerabilidades conhecidas.

Configuração para Apache:

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

Configuração para Nginx:

ssl_protocols TLSv1.2 TLSv1.3;

3. Configuração de Certificados SSL/TLS

a) Obtenção de Certificados

Hoje, é essencial ter HTTPS habilitado em todos os sites. Você pode obter certificados SSL/TLS gratuitos através de serviços como o Let’s Encrypt.

b) Configuração de SSL no Apache

<VirtualHost *:443>
ServerName www.seusite.com
DocumentRoot /var/www/html

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/seusite.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/seusite.com/privkey.pem
SSLCACertificateFile /etc/letsencrypt/live/seusite.com/chain.pem

# Headers de Segurança
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</VirtualHost>

c) Configuração de SSL no Nginx

server {
listen 443 ssl;
server_name seusite.com;

ssl_certificate /etc/letsencrypt/live/seusite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seusite.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/seusite.com/chain.pem;

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

4. Proteções Contra Ataques de Denial of Service (DoS/DDoS)

a) Limitar Taxa de Solicitações

Configurar limites de taxa (rate limiting) pode ajudar a mitigar ataques DoS e DDoS.

Configuração para Apache usando mod_evasive:

<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSBlockingPeriod 10
</IfModule>

Configuração para Nginx:

http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
}

server {
location / {
limit_req zone=one burst=5 nodelay;
}
}

b) Firewall de Aplicação Web (WAF)

Implementar um WAF pode ajudar a filtrar tráfego malicioso antes que ele chegue à sua aplicação.

  • ModSecurity: Um dos WAFs mais utilizados para servidores Apache e Nginx. Ele pode ser configurado para bloquear solicitações maliciosas automaticamente com base em regras predefinidas.

5. Monitoramento e Log de Atividades

a) Configuração de Logs de Acesso e Erro

Configurar logs detalhados de acesso e erro permite monitorar a atividade no servidor e detectar padrões suspeitos.

Configuração de Logs no Apache:

apacheCopiar códigoCustomLog ${APACHE_LOG_DIR}/access.log combined
ErrorLog ${APACHE_LOG_DIR}/error.log

Configuração de Logs no Nginx:

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

b) Análise e Monitoramento

Ferramentas como o Fail2Ban podem ser configuradas para analisar logs de servidor e bloquear automaticamente endereços IP que mostram comportamento suspeito (ex.: várias tentativas de login falhadas).


Referências

  1. OWASP Secure Headers Project
  2. Apache Security Tips
  3. Nginx Security Recommendations
  4. Let’s Encrypt

    Esse guia abrange as principais práticas de segurança e tuning para servidores web Apache e Nginx. Com essas configurações implementadas, sua aplicação estará muito mais protegida contra ataques comuns e possíveis vulnerabilidades. Além disso, o monitoramento contínuo e a atualização frequente dos seus sistemas são essenciais para manter a segurança sempre atualizada.