Реализация HTTP Strict Transport Security (HSTS) в NGINX
Понимание HSTS
HTTP Strict Transport Security (HSTS) — это важный протокол безопасности веб-сайтов. Он обеспечивает, чтобы соединения с доменом осуществлялись исключительно по HTTPS. Это снижает риски, такие как атаки типа «человек посередине», и обеспечивает целостность и конфиденциальность данных, передаваемых в сети. Когда пользователь пытается получить доступ к сайту через HTTP, HSTS автоматически обновляет соединение до HTTPS.
Настройка HSTS в NGINX
Чтобы настроить HSTS в NGINX, необходимо обновить блок сервера в файле конфигурации NGINX. Этот файл обычно находится в /etc/nginx/nginx.conf
или в конфигурациях, специфичных для сайта, в /etc/nginx/sites-available/
. Обновление включает добавление заголовка, указывающего браузеру всегда использовать HTTPS для указанного домена.
В блоке сервера для вашего домена добавьте следующую строку:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
Эта линия содержит два компонента:
- max-age=31536000: Дайте указание браузеру помнить об использовании HTTPS для вашего сайта в течение следующих 12 месяцев.
- includeSubDomains: применяет политику HSTS ко всем поддоменам вашего сайта для обеспечения комплексной безопасности.
Пример конфигурации NGINX с HSTS
Ваша конфигурация NGINX с заголовком HSTS может выглядеть следующим образом:
upstream my_portal {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name example.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
location / {
proxy_pass http://my_portal;
}
}
После добавления этого заголовка перезагрузите NGINX, чтобы изменения вступили в силу, с помощью sudo systemctl reload nginx
или sudo nginx -s reload
.
Дополнительные примеры конфигурации NGINX
Для разных сценариев ваша конфигурация NGINX с HSTS может отличаться. Вот дополнительные примеры:
Многодоменный сервер
server {
listen 80;
server_name example1.com example2.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
location / {
# Configuration details
}
}
Эта конфигурация применяет HSTS к нескольким доменам, размещенным на одном сервере. Каждый указанный домен будет принудительно использовать HTTPS-соединения.
Сервер с SSL-терминацией
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/certificate;
ssl_certificate_key /path/to/private/key;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
location / {
# Configuration details
}
}
Эта настройка предназначена для серверов, обрабатывающих терминацию SSL. Она настраивает HSTS на защищенном порту (443) с указанными сертификатами SSL, усиливая защищенные соединения.
Настройка Content-Security-Policy
(CSP) в NGINX
Реализация CSP в NGINX
Интеграция Content-Security-Policy
(CSP) в NGINX — это стратегический шаг по повышению безопасности веб-приложений. Он включает добавление определенного заголовка в блок сервера вашего файла конфигурации NGINX. Обычно он находится в /etc/nginx/nginx.conf или в каталоге /etc/nginx/sites-available/
, этот файл требует тщательного редактирования для эффективного применения CSP.
Для базовой настройки CSP добавьте следующую строку в блок сервера:
add_header Content-Security-Policy "default-src 'self';" always;
Эта директива ограничивает загрузку контента доменом веб-сайта («self»), значительно снижая риск выполнения вредоносного внешнего контента.
Пример конфигурации NGINX с CSP
Ваша конфигурация NGINX с базовой директивой CSP может выглядеть следующим образом:
upstream my_portal {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name example.com;
add_header Content-Security-Policy "default-src 'self';" always;
location / {
proxy_pass http://my_portal;
}
}
Перезагрузите NGINX с помощью sudo systemctl reload nginx
или sudo nginx -s reload
после добавления этой директивы.
Настройка CSP для конкретных нужд
CSP может быть адаптирована для решения конкретных потребностей безопасности вашего веб-сайта. Вот расширенные конфигурации для различных сценариев:
Разрешение изображений из любого источника
add_header Content-Security-Policy "default-src 'self'; img-src *;" always;
Такая конфигурация позволяет загружать изображения из любого источника, сохраняя строгий контроль над другими типами контента.
Конфигурация определенных скриптов и стилей
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trustedscript.com; style-src 'self' 'unsafe-inline';";
Этот параметр разрешает использование скриптов из вашего домена и доверенного внешнего источника вместе со встроенными стилями, обеспечивая баланс между функциональностью и безопасностью.
Изучение директив и вариантов CSP
Директивы в CSP
Директивы CSP — это правила, определяющие политику для определенных типов контента. Общие директивы включают:
- default-src: политика по умолчанию, применяемая к большинству типов контента.
- script-src: Управляет источниками ресурсов JavaScript.
- style-src: указывает разрешенные источники для ресурсов CSS.
- img-src: Управляет источниками ресурсов изображений.
- connect-src: устанавливает политики для сетевых подключений, таких как XMLHttpRequest, WebSocket и EventSource.
Исходные выражения в CSP
Исходные выражения определяют допустимые источники для каждой директивы:
- «none»: блокирует все источники.
- «self»: разрешает ресурсы из одного источника.
- ‘unsafe-inline’: разрешает встроенные ресурсы, такие как стили или URL-адреса JavaScript.
- ‘unsafe-eval’: разрешает eval()функции JavaScript и подобные методы.
- https:: Включает ресурсы с любого HTTPS URL.
- Настройка X-XSS-защиты в NGINX
Введение в X-XSS-защиту
X-XSS-Protection
, или заголовок Cross-Site Scripting
, необходим для защиты веб-приложений от атак XSS (Cross-Site Scripting). Поддерживаемый основными веб-браузерами, такими как Chrome, Internet Explorer и Safari, этот заголовок повышает веб-безопасность, предотвращая загрузку страниц при обнаружении отраженных атак XSS.