Поддерживайте Nginx в актуальном состоянии

Одним из самых важных шагов в обеспечении безопасности любого программного обеспечения является его обновление. Разработчики часто исправляют известные уязвимости, и, оставаясь в актуальном состоянии, вы минимизируете риск эксплуатации через устаревший код.

sudo apt update
sudo apt upgrade nginx

Минимизировать информацию о сервере

По умолчанию Nginx раскрывает номера версий на страницах ошибок и в заголовках HTTP, что может предоставить злоумышленникам ценную информацию. Вы можете отключить это, добавив следующую директиву в ваш nginx.conf:

server_tokens off;

Используйте надежную политику SSL/TLS

Шифрование данных между клиентом и сервером имеет жизненно важное значение. Реализуйте надежную политику SSL/TLS, создав надежный параметр DH (Diffie-Hellman):

openssl dhparam -out /etc/nginx/dhparam.pem 4096

Вам также следует настроить свой сервер на использование этого параметра и предпочесть безопасные шифры:

ssl_dhparam /etc/nginx/dhparam.pem;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers on;

Но одного этого будет недостаточно. Нужен ключ минимум на 4096 бит.

certbot certonly --renew-by-default --rsa-key-size 4096 -d example.com -d www.example.com

И другая кривая. В используемой версии OpenSSL можно выбрать только одну. Выберем самую надёжную из популярных.

ssl_ecdh_curve secp384r1;

Для оценки с плюсом добавим HSTS.

add_header Strict-Transport-Security "max-age=31536000";

Наконец, отключим старые протоколы для 100% оценки по графе Protocol Support.

ssl_protocols TLSv1.3;

Полный конфиг получается следующий.

server {
    server_name www.example.com example.com;
    listen 443 ssl default_server;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES256-SHA384;
    ssl_ecdh_curve secp384r1;

    add_header Strict-Transport-Security "max-age=31536000";
    ssl_protocols TLSv1.3;
}

Проверим, что никакой ошибки в настройке шифров и протоколов нет.

$ nmap --script ssl-enum-ciphers -p 443 example.com

Starting Nmap 7.95 ( https://nmap.org ) at 2024-08-04 00:00: UTC
Nmap scan report for example.com (1.2.3.5)
Host is up (0.030s latency).
PORT    STATE SERVICE
443/tcp open  https
| ssl-enum-ciphers: 
|   TLSv1.2: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp384r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp384r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp384r1) - A
|     compressors: 
|       NULL
|     cipher preference: server
|_  least strength: A

Nmap done: 1 IP address (1 host up) scanned in 3.22 seconds

Использование заголовков безопасности HTTP

Добавление заголовков безопасности, таких как Content-Security-Policy, X-Frame-Options и X-Content-Type-Options, может смягчить атаки межсайтового скриптинга (XSS) и внедрения данных.

Контроль доступа

Ограничьте доступ к конфиденциальным разделам вашего веб-сайта с помощью списков контроля доступа (ACL), защиты паролем или ограничений на основе IP-адресов.

location /admin {
    allow 192.168.1.0/24;
    deny all;
}

Права доступа к файлам и права собственности

Убедитесь, что для ваших веб-каталогов установлены правильные права доступа к файлам и права собственности, чтобы предотвратить несанкционированный доступ или вмешательство.

Отключите ненужные модули

Модули Nginx расширяют функциональность, но также могут создавать уязвимости. Отключите все модули, которые вам не нужны.

Регулярное резервное копирование и мониторинг

Регулярно создавайте резервные копии файлов конфигурации Nginx и веб-контента. Кроме того, реализуйте решения для мониторинга, чтобы обнаруживать необычную активность на ранних этапах.

Автоматизируйте аудит безопасности

Используйте такие инструменты, как nmap, Lynis или Nessus, для автоматизации аудита безопасности вашего сервера Nginx с целью выявления потенциальных проблем безопасности.

Заключение

Соблюдение этих рекомендаций может значительно повысить безопасность вашего сервера Nginx.