Основы
Плагины
300 140

Практические рекомендации по защите сервера Nginx для криптовалютного обменника

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

1. Базовая настройка и обновления

1.1. Актуальные версии

Всегда используйте последнюю стабильную версию Nginx. Устаревшие версии содержат известные уязвимости.

# Для Ubuntu/Debian

sudo apt update && sudo apt upgrade nginx -y

# Для CentOS/RHEL

sudo yum update nginx -y

1.2. Скрытие версии сервера

Скрывайте информацию о версии Nginx и ОС в заголовках ответов, чтобы усложнить жизнь злоумышленникам.

В файл /etc/nginx/nginx.conf в секцию http добавьте:

server_tokens off;

1.3. Защита от информационного сбора

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

В конфигурации вашего сайта (в блоке server) добавьте:

# Блокируем доступ к файлам конфигураций, бэкапов и логинов

location ~ /(\.env|\.git|config|backups|sql|admin|/\.) {

deny all;

return 404;

}

# Блокируем доступ к исполняемым файлам скрипта (php, pl, py) в определенных директориях

location ~* ^/(uploads|images|css|js)/.*\.(php|pl|py|jsp|asp)$ {

deny all;

}

2. Настройка SSL и безопасного соединения

2.1. Использование современных протоколов и шифров

Откажитесь от устаревших и уязвимых протоколов (SSLv2, SSLv3, TLS 1.0, TLS 1.1). Используйте только стойкие шифры.

В файл конфигурации сайта (обычно в блок server для порта 443) добавьте:

ssl_protocols TLSv1.2 TLSv1.3;

ssl_prefer_server_ciphers on;

ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;

ssl_ecdh_curve secp384r1;

ssl_session_timeout 10m;

ssl_session_cache shared:SSL:10m;

ssl_stapling on;

ssl_stapling_verify on;

2.2. Обязательное перенаправление на HTTPS

Весь трафик должен идти только по защищенному протоколу.

Добавьте отдельный блок server для порта 80:

server {

listen 80;

server_name your-exchange.com www.your-exchange.com;

return 301 https://$server_name$request_uri;

}

2.3. HTTP-заголовки безопасности

Добавьте заголовки, которые защитят ваш сайт от распространенных атак, таких как XSS, clickjacking и MIME-sniffing.

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 Content-Security-Policy "default-src 'self' https: data: 'unsafe-inline' 'unsafe-eval';" always;

# Внимание! Настройте CSP под ваш скрипт, он может блокировать легитимные ресурсы.

3. Ограничение запросов и защита от DDoS

3.1. Ограничение частоты запросов (Rate Limiting)

Это критически важно для API-эндпоинтов и форм входа, чтобы предотвратить брутфорс-атаки и часть DDoS.

В секцию http в nginx.conf добавьте зоны:

# Зона для ограничения входа в админку (10 запросов в минуту с одного IP)

limit_req_zone $binary_remote_addr zone=admin:10m rate=10r/m;

# Зона для ограничения запросов к API (60 запросов в минуту)

limit_req_zone $binary_remote_addr zone=api:10m rate=60r/m;

# Зона для всех остальных запросов (более мягкое ограничение)

limit_req_zone $binary_remote_addr zone=general:10m rate=120r/m;

Примените зоны в конфигурации сайта:

location /admin/login.php {

limit_req zone=admin burst=5 nodelay;

# ... остальная конфигурация ...

}

location /api/v1/ {

limit_req zone=api burst=20 nodelay;

# ... остальная конфигурация ...

}

location / {

limit_req zone=general burst=40 nodelay;

# ... остальная конфигурация ...

}

3.2. Ограничение размера запроса

Защититесь от атак, направленных на исчерпание ресурсов сервера.

client_max_body_size 1M;

client_body_timeout 10;

client_header_timeout 10;

4. Контроль доступа и файловая система

4.1. Запрет доступа к чувствительным файлам

Явно запретите доступ ко всем файлам, кроме тех, которые должны быть публичными.

location ~* \.(log|sql|tar|gz|key)$ {

deny all;

}

# Запрещаем доступ к скрытым файлам (начинающимся с точки)

location ~ /\. {

deny all;

access_log off;

log_not_found off;

}

4.2. Настройка правильных прав доступа

  • Владельцем файлов скрипта должен быть непривилегированный пользователь (например, www-data или nginx).
  • Права на файлы: 644, на директории: 755.
  • Корневая директория сайта (root) не должна иметь прав на запись, кроме конкретных папок (например, uploads, tmp, logs).

4.3. Блокировка по IP (опционально, но рекомендуется)

Ограничьте доступ к административной панели только по доверенным IP-адресам.

location /admin/ {

allow 192.0.2.100; # Ваш статический IP

allow 203.0.113.50; # IP вашего сотрудника

deny all;

# ... остальная конфигурация ...

}

5. Мониторинг и логирование

5.1. Настройка формата логов

Добавьте в лог больше информации, включая IP-адрес, время обработки и User-Agent.

В секцию http в nginx.conf:

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for" '

'rt=$request_time uct="$upstream_connect_time"';

access_log /var/log/nginx/access.log main;

error_log /var/log/nginx/error.log warn;

5.2. Регулярный анализ логов

Используйте инструменты вроде fail2ban для автоматического блокирования IP-адресов, которые проявляют подозрительную активность (множественные ошибки 404, попытки брутфорса). Настройте его на мониторинг логов Nginx.

Чек-лист быстрой проверки

  • server_tokens off; активирован.
  • Настроено перенаправление с HTTP на HTTPS.
  • Используются только TLS 1.2/1.3 и современные шифры.
  • Реализовано ограничение частоты запросов (Rate Limiting) для /admin и /api.
  • Добавлены ключевые security-заголовки (X-Content-Type-Options и др.).
  • Доступ к чувствительным файлам (.env, .git, config) явно запрещен.
  • Доступ к админке ограничен по IP (если возможно).
  • Права на файлы в корневой директории сайта установлены правильно.
  • Логи включены и настроены для сбора детальной информации.

Заключение

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

Важно: После внесения любых изменений в конфигурацию всегда проверяйте её на ошибки и только затем перезапускайте Nginx:

sudo nginx -t && sudo systemctl reload nginx
Раздел: Безопасность
Вернуться к Wiki

Для улучшения работы сайта и его взаимодействия с пользователями мы используем файлы coоkie (узнать подробнее).

Продолжая работу с сайтом, Вы разрешаете использование coоkie-файлов. Вы всегда можете отключить файлы coоkie в настройках Вашего браузера.