Перевод статьи: Tomasz Andrzej Nidecki — nginx Security: How To Harden Your Server Configuration
В настоящее время nginx является самым популярным веб-сервером, недавно опередившим Apache. Он легкий, быстрый, надежный и поддерживает все основные операционные системы. Это предпочтительный веб-сервер для Netflix, WordPress.com и других сайтов с высоким трафиком. Сервер nginx может легко обрабатывать 10 000 неактивных HTTP-соединений, имея всего 2,5 МБ памяти. В этой статье мы дадим советы по безопасности сервера nginx, которые покажут вам, как защитить ваш сервер.
После установки nginx вы должны хорошо понимать его параметры конфигурации, которые находятся в файле nginx.conf. Это основной файл конфигурации для nginx, и поэтому большинство проверок безопасности будет выполняться с использованием этого файла. По умолчанию вы можете найти nginx.conf в [каталог установки nginx]/conf в системах Windows и в /etc/nginx или /usr/local/etc/nginx в системах Linux. Вам также может потребоваться внести некоторые изменения в файлы конфигурации виртуального хоста, обычно содержащиеся в подкаталоге sites-available.
Когда вы устанавливаете nginx, он автоматически включает в себя множество модулей. В настоящее время вы не можете выбирать модули во время выполнения. Чтобы отключить определенные модули, вам нужно перекомпилировать nginx. Мы рекомендуем отключить все ненужные модули, так как это минимизирует риск потенциальных атак за счет ограничения разрешенных операций.
Для этого используйте опцию configure во время установки. В приведенном ниже примере мы отключаем модуль autoindex, который генерирует автоматические списки каталогов, а затем перекомпилируем nginx.
# ./configure --without-http_autoindex_module
# make
# make install
По умолчанию директива server_tokens в nginx отображает номер версии nginx. Этот номер непосредственно виден на всех автоматически генерируемых страницах ошибок, и также присутствует во всех ответах HTTP в заголовке сервера.
Это может привести к раскрытию информации — неавторизованный пользователь может получить информацию о используемой вами версии nginx. Вы должны отключить директиву server_tokens в файле конфигурации nginx, установив server_tokens off.
Чтобы предотвратить потенциальные DoS-атаки на nginx, вы можете установить ограничения на размер буфера для всех клиентов. Вы можете сделать это в файле конфигурации nginx, используя следующие директивы:
Примечание. Некоторые источники предполагают, что установка таких ограничений может предотвратить потенциальные атаки переполнения буфера, если такие уязвимости обнаружены в nginx.
Мы предлагаем отключить любые методы HTTP, которые не используются и которые не обязательно должны быть реализованы на веб-сервере. Если вы добавите следующее условие в блок местоположения файла конфигурации виртуального хоста nginx, сервер разрешит только методы GET, HEAD и POST и отфильтрует такие методы, как DELETE и TRACE.
location / {
limit_except GET HEAD POST { deny all; }
}
Другой подход заключается в добавлении следующего условия в раздел server (или блок server). Это более более универсальный способ, но вы должны быть осторожны с инструкциями if в контексте местоположения.
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444; }
ModSecurity — это модуль с открытым исходным кодом, который работает как брандмауэр веб-приложения (WAF). Его функции включают в себя фильтрацию, маскировку идентификатора сервера и предотвращение атак с нулевым байтом. Модуль также позволяет выполнять мониторинг трафика в режиме реального времени. Мы рекомендуем вам следовать руководству ModSecurity, чтобы установить модуль mod_security, чтобы усилить ваши параметры безопасности.
Обратите внимание, что если ModSecurity не отвечает вашим потребностям, вы также можете использовать другие бесплатные решения WAF.
Журналы access и error logs nginx включены по умолчанию и расположены соответственно в logs/error.log и logs/access.log. Если вы хотите изменить местоположение, вы можете использовать директиву error_log в файле конфигурации nginx. Вы также можете использовать эту директиву, чтобы указать журналы, которые будут записываться в соответствии с их уровнем безопасности. Например, уровень crit заставит nginx регистрировать критические проблемы и все проблемы, которые имеют более высокий уровень, чем уровень crit. Чтобы установить уровень crit, установите директиву error_log следующим образом:
error_log logs/error.log crit;
Вы можете найти полный список уровней error_log в официальной документации nginx.
Вы также можете изменить директиву access_log в файле конфигурации nginx, указав расположение не по умолчанию для журналов доступа. Наконец, вы можете использовать директиву log_format для настройки формата записываемых сообщений, как описано в документации по nginx.
Если вы постоянно отслеживаете и управляете лог-файлами nginx, вы можете лучше понимать запросы, отправленные на ваш веб-сервер, а также заметить любые обнаруженные ошибки. Это поможет вам обнаружить любые попытки атаки, а также определить, что вы можете сделать, чтобы оптимизировать производительность сервера.
Вы можете использовать инструменты управления журналами, такие как logrotate, чтобы обновлять и сжимать старые журналы и освобождать дисковое пространство. Кроме того, модуль ngx_http_stub_status_module предоставляет доступ к основной информации о состоянии. Вы также можете использовать nginx Plus, коммерческую версию nginx, которая обеспечивает мониторинг активности трафика, нагрузки и других показателей в режиме реального времени.
Чтобы дополнительно защитить свой веб-сервер nginx, вы можете добавить несколько различных заголовков HTTP. Вот некоторые из вариантов, которые мы рекомендуем.
Заголовок HTTP-ответа X-Frame-Options, используется чтобы указать, разрешено ли браузеру отображать страницу в frame или iframe . Это может предотвратить атаки с помощью clickjacking. Поэтому мы рекомендуем вам включить эту опцию для вашего сервера nginx.
Для этого добавьте следующий параметр в файл конфигурации nginx в разделе server:
add_header X-Frame-Options "SAMEORIGIN";
HTTP Strict Transport Security (HSTS) — это метод, используемый веб-сайтами для объявления того, что доступ к ним должен осуществляться только через безопасное соединение (HTTPS). Если веб-сайт объявляет политику HSTS, браузер должен отклонить все HTTP-соединения и запретить пользователям принимать незащищенные SSL-сертификаты. Чтобы добавить заголовок HSTS на ваш сервер nginx, вы можете добавить следующую директиву в ваш раздел сервера:
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
Политика безопасности контента (CSP) защищает ваш веб-сервер от определенных типов атак, включая атаки с использованием Cross-site Scripting (XSS) и атаки с использованием data injection. Вы можете реализовать CSP, добавив следующий пример заголовка Content-Security-Policy (обратите внимание, что фактический заголовок должен быть настроен в соответствии с вашими уникальными требованиями):
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
Заголовок HTTP X-XSS-Protection поддерживается IE и Safari и не требуется для современных браузеров, если у вас есть строгая политика безопасности содержимого. Однако, чтобы предотвратить XSS в случае более старых браузеров (которые еще не поддерживают CSP), вы можете добавить заголовок X-XSS Protection в раздел вашего сервера:
add_header X-XSS-Protection "1; mode=block";
Конфигурация nginx по умолчанию позволяет использовать небезопасные старые версии протокола TLS (согласно официальной документации: ssl_protocols TLSv1 TLSv1.1 TLSv1.2). Это может привести к таким атакам, как атака BEAST. Поэтому мы рекомендуем вам не использовать старые протоколы TLS и изменять конфигурацию для поддержки только новых, безопасных версий TLS.
Для этого добавьте следующую директиву в раздел server файла конфигурации nginx:
ssl_protocols TLSv1.2 TLSv1.3;
Кроме того, вы должны указать наборы шифров, чтобы убедиться, что уязвимые наборы не поддерживаются. Чтобы выбрать лучшие комплекты шифров, прочитайте нашу статью об усилении шифрования TLS и добавьте директиву ssl_ciphers в раздел сервера для выбора шифров (как предлагается в статье об усилении шифрования). Мы также рекомендуем добавить следующую директиву в раздел сервера:
ssl_prefer_server_ciphers on;
Эта директива позволит принять решение о том, какие шифры использовать, на стороне сервера, а не на стороне клиента.
Как и с любым другим программным обеспечением, мы рекомендуем вам всегда обновлять сервер nginx до последней стабильной версии. Новые обновления часто содержат исправления для уязвимостей, выявленных в предыдущих версиях, таких как уязвимость обхода каталога (CVE-2009-3898), существовавшая в версиях nginx до 0.7.63 и 0.8.x до 0.8.17. Обновления также часто включают новые функции безопасности и улучшения. На сайте nginx.org вы можете найти рекомендации по безопасности в специальном разделе и новости о последних обновлениях на главной странице.
Gixy — это инструмент с открытым исходным кодом, который позволяет вам проверить ваш веб-сервер nginx на наличие типичных ошибок конфигурации. После того, как вы подготовите свою конфигурацию nginx, всегда полезно проверить ее с помощью Gixy.
Вы можете найти Gixy здесь.
Если вы не хотите настраивать nginx вручную, вы можете использовать бесплатный онлайн-инструмент визуальной настройки, предоставляемый DigitalOcean.
Вы можете найти этот инструмент здесь.
Краткий перевод: https://vuejs.org/guide/components/v-model.html Основное использование v-model используется для реализации двусторонней привязки в компоненте. Начиная с Vue…
Сегодня мы рады объявить о выпуске Vue 3.4 «🏀 Slam Dunk»! Этот выпуск включает в…
Vue.js — это универсальный и адаптируемый фреймворк. Благодаря своей отличительной архитектуре и системе реактивности Vue…
Недавно, у меня истек сертификат и пришлось заказывать новый и затем устанавливать на хостинг с…
Каким бы ни было ваше мнение о JavaScript, но всем известно, что работа с датами…
Все, кто следит за последними событиями в мире адаптивного дизайна, согласятся, что введение контейнерных запросов…