Knowledge Base
Базовая защита Nginx
nginx.conf — базовые настройки безопасности
Категория: Server Hardening · Риск: low
nginx.conf — базовые настройки безопасности
http {
# Скрыть версию
server_tokens off;
# Ограничения
client_max_body_size 10m;
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;
# Rate limiting зоны
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
limit_conn_zone $binary_remote_addr zone=addr:10m;
}
Security Headers (добавить в server блок)
# HSTS — принудительный HTTPS на 1 год
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Запрет встраивания в iframe с чужих сайтов
add_header X-Frame-Options "SAMEORIGIN" always;
# Запрет MIME-sniffing
add_header X-Content-Type-Options "nosniff" always;
# Базовый CSP
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none';" always;
# Referrer Policy
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# Permissions Policy
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
Rate Limiting для эндпоинтов
location /api/ {
limit_req zone=api burst=20 nodelay;
limit_conn addr 10;
proxy_pass http://backend;
}
location /login {
limit_req zone=login burst=3 nodelay;
proxy_pass http://backend;
}
Отключить лишние HTTP-методы
if ($request_method !~ ^(GET|POST|HEAD)$) {
return 405;
}
Блокировка доступа к скрытым файлам
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
Проверка результата
# Проверить все security headers онлайн
# https://securityheaders.com/?q=example.com
# Локальная проверка
curl -sI https://example.com | grep -iE \
'strict-transport|x-frame|x-content|content-security|referrer|permissions'
Права на конфигурационные файлы
chown root:root /etc/nginx/nginx.conf
chmod 644 /etc/nginx/nginx.conf
# Приватный ключ TLS
chown root:root /etc/ssl/private/example.key
chmod 600 /etc/ssl/private/example.key