Настройка сервера Nginx с учетом безопасности, на проекте CRYSTAL v1.0
25 февраля 2025
обн: 13 января
Содержание:
Данная инструкция подразумевает, что у вас уже установлен SSL-сертификат.
1. Описание правил безопасности
server_tokens off; - Отключает отображение версии Nginx в заголовках ответа. Это предотвращает утечку информации о сервере, усложняя работу для потенциальных атакующих.
add_header X-XSS-Protection "1; mode=block" always; - Включает защиту от XSS-атак (встроенную в браузеры). При попытке внедрить вредоносный JavaScript, браузер блокирует выполнение страницы.
add_header X-Content-Type-Options "nosniff" always; - Запрещает браузеру "угадывать" тип содержимого, если заголовок Content-Type отсутствует или неправильный. Это помогает избежать MIME-атак.
add_header Referrer-Policy "no-referrer-when-downgrade" always; - Управляет тем, какие данные передаются в заголовке Referer. В этом случае реферер отправляется только при переходе с HTTPS на HTTPS, но не с HTTPS на HTTP.
add_header Permissions-Policy "interest-cohort=()" always; - Отключает FLoC (Federated Learning of Cohorts) — спорную технологию Google для таргетинга рекламы. Защищает конфиденциальность пользователя.
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - Принуждает браузер использовать HTTPS для всех последующих подключений на протяжении 1 года. Также включает поддомены.
add_header X-Frame-Options "DENY"; - Запрещает загрузку сайта внутри фреймов/айфреймов, предотвращая атаки clickjacking.
add_header Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval' blob: https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/; frame-ancestors 'self' https://www.google.com/ https://www.gstatic.com/; img-src 'self' data: blob:; style-src 'self'; script-src 'self' blob: https://www.google.com/ https://www.gstatic.com/;" always;
- Разрешает загрузку ресурсов только с текущего домена ('self'), Google ReCAPTCHA и blob: URL.
- Блокирует загрузку внешних скриптов и стилей (если они, не указаны явно).
- Запрещает загрузку сайта во фрейме с чужого домена, кроме google.com.
- Разрешает изображения только из self, data: и blob:.
- CSP помогает предотвратить XSS, загрузку вредоносных ресурсов и iframe-атаки.
2. Создание директории - 'nginxconf', в которой будут правила безопасности - 'security.conf'
⚠️ Примечание по безопасности
В данной инструкции и в других пунктах документации, используется команда sudo -i, для перехода в режим
суперпользователя (root). Это сделано для ускорения процесса и сокращения команд.
В production-среде, постоянная работа из-под root, не
рекомендуется, так как это нарушает принцип наименьших привилегий и существенно снижает безопасность
сервера.
Включите sudo:
sudo -i
Введите команду:
mkdir /etc/nginx/nginxconf
Затем:
nano /etc/nginx/nginxconf/security.conf
Добавьте в открывшиеся окно, код ниже:
server_tokens off;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Permissions-Policy "interest-cohort=()" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "DENY";
add_header Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval' blob: https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/; frame-ancestors 'self' https://www.google.com/ https://www.gstatic.com/; img-src 'self' data: blob:; style-src 'self'; script-src 'self' blob: https://www.google.com/ https://www.gstatic.com/;" always;
После добавления кода, нажмите последовательно - 'ctrl + x', 'y', 'Enter'.
3. Подключение 'security.conf' к серверу
Введите код:
nano /etc/nginx/sites-available/crystal
Добавьте в открывшимся окне, код ниже, после второй строки сверху - 'server_name ВашДомен www.ВашДомен;':
# security
include /etc/nginx/nginxconf/security.conf;
# /security
Пример:
server {
server_name crysty.ru www.crysty.ru;
# security
include /etc/nginx/nginxconf/security.conf;
# /security
location /
{
root /var/www/crystal/frontend/dist;
try_files $uri $uri /index.html;
}.....
После добавления кода, нажмите последовательно - 'ctrl + x', 'y', 'Enter'.
Затем перезагрузите nginx, командой:
systemctl restart nginx
Чтобы обезопасить сайт от ботов, вы можете установить - reCAPTCHA v3, которая будет срабатывать при регистрации нового пользователя, для этого воспользуйтесь следующей инструкцией.
Поделиться
USDT (TRON (TRC20)): TTvJdwtL3VAZKSHbYi8B2eQEQDxbHUD4Ka
POL (Polygon PoS): 0x97377684b9a589eca92e2c6c8430e6dcf2bae8c2
ETH (Base Mainnet): 0x97377684b9a589eca92e2c6c8430e6dcf2bae8c2
ETH (ERC20): 0x97377684b9a589eca92e2c6c8430e6dcf2bae8c2
BTC (BTC): 12GkhJZWrdn23PUerGerN7nSZXHwWGm59U





Прокомментировать в