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.
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.
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';";
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";
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";
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";
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";
Além dos headers de segurança, é importante ajustar as configurações do servidor web para otimizar seu desempenho e segurança.
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;
}
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
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;
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;
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.
<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>
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";
}
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;
}
}
Implementar um WAF pode ajudar a filtrar tráfego malicioso antes que ele chegue à sua aplicação.
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;
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).
Falha permite que invasores manipulem o agente de um usuário por meio de um problema…
Um exploit de dia zero, dirigido aos firewalls FortiGate da Fortinet, foi descoberto à venda…
A família SHELBY mostra um exemplo preocupante de malware moderno com design modular, sofisticado e…
Hackers estão explorando o diretório mu-plugins do WordPress para injetar códigos maliciosos que não aparecem…
O Google implementou uma nova funcionalidade de "Detecção de Golpes" com inteligência artificial no aplicativo…
O grupo APT28, ligado à Rússia, está utilizando técnicas avançadas de ofuscação em seus ataques…