Практические рекомендации по защите сервера 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