Настройка сервера Nginx с учетом безопасности, на проекте CRYSTAL v1.0
25.02.2025
Содержание:
Данная инструкция подразумевает, что у вас уже установлен 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'.
Введите команду:
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, которая будет срабатывать при регистрации нового пользователя, для этого воспользуйтесь следующей инструкцией.
Поделиться
BTC (Network BTC) - 1C2EWWeEXVhg93hJA9KovpkSd3Rn3BkcYm
Ethereum (Network ERC20) - 0x05037ecbd8bcd15631d780c95c3799861182e6b8
Прокомментировать в