Сегодня я расскажу, как защитить сайт с помощью Nginx. Интернет — место, где всегда есть риск наткнуться на хакеров, DDoS-атаки или просто недоброжелательных пользователей. Но не волнуйся, Nginx способен стать твоим щитом.
В этой статье ты научишься:
- Блокировать подозрительные IP-адреса.
- Ограничивать частоту запросов.
- Прятать сервер от автоматических сканеров.
- Настраивать базовую защиту от DDoS-атак.
Зачем защищать сайт?
Веб-приложения подвержены множеству угроз:
- DDoS-атаки: сервер перегружают большим количеством запросов.
- Брутфорс: хакеры подбирают пароли или ключи API.
- Сканирование: злоумышленники ищут уязвимости.
Наша задача — минимизировать эти риски и не допустить сбоев.
Шаг 1: Блокируем IP-адреса
Почему это важно? Если ты заметил подозрительную активность с конкретного IP-адреса, проще всего его заблокировать.
Настройка в Nginx
http {
deny 192.168.1.1;
allow 192.168.1.2;
deny all;
}
- deny: блокирует доступ с указанного IP.
- allow: разрешает доступ.
- deny all: запрещает всё остальное.
Альтернативный подход:
Создай отдельный файл с заблокированными IP:
sudo nano /etc/nginx/blocked_ips.conf
Добавь IP-адреса:
deny 192.168.1.1;
deny 10.0.0.2;
Подключи файл в конфигурацию:
http {
include /etc/nginx/blocked_ips.conf;
}
Теперь ты можешь легко добавлять новые адреса в список.
Шаг 2: Ограничиваем частоту запросов
Зачем это нужно? Ограничение запросов помогает предотвратить злоупотребления, например, когда бот отправляет сотни запросов в секунду.
Настройка
Добавь блок для лимита запросов:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location /api/ {
limit_req zone=one burst=20 nodelay;
proxy_pass http://backend;
}
}
}
- limit_req_zone: создаёт зону лимитов (в нашем случае 10 МБ).
- rate=10r/s: разрешает 10 запросов в секунду.
- burst=20: допускает «всплеск» до 20 запросов.
- nodelay: отправляет лишние запросы немедленно в очередь.
Теперь бот, который пытается отправить 100 запросов в секунду, будет ограничен.
Шаг 3: Прячем сервер
Автоматические сканеры ищут версии серверов, уязвимости и открытые порты. Давай усложним им задачу.
Скрываем информацию о сервере
Отключи заголовок Server:
http {
server_tokens off;
}
Теперь Nginx не будет сообщать, какая версия сервера используется.
Скрываем директории
Если у тебя на сервере есть открытые директории, закрой их доступ с помощью:
location / {
autoindex off;
}
Теперь пользователи не смогут просматривать содержимое папок.
Шаг 4: Базовая защита от DDoS
DDoS-атаки направлены на перегрузку сервера. Вот несколько базовых приёмов, которые помогут снизить риски.
Ограничиваем количество соединений
Добавь ограничение на количество одновременных соединений:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_conn addr 10;
}
}
}
- limit_conn_zone: создаёт зону для отслеживания соединений.
- limit_conn addr 10: ограничивает до 10 одновременных соединений с одного IP.
Настраиваем таймауты
Если бот открывает соединение, но не завершает его, сервер тратит ресурсы впустую. Настрой таймауты:
http {
client_body_timeout 10s;
client_header_timeout 10s;
send_timeout 10s;
}
Теперь соединения будут завершаться, если пользователь не отвечает в течение 10 секунд.
Шаг 5: Используем рекапчу и WAF
- Google reCAPTCHA Для страниц входа или регистрации добавь защиту с помощью Google reCAPTCHA.
- Web Application Firewall (WAF) Подключи ModSecurity или другой WAF для блокировки подозрительных запросов.
Шаг 6: Мониторинг и логи
Без мониторинга сложно понять, кто атакует сервер и как часто.
Включаем логи:
http {
log_format custom '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log custom;
}
Теперь ты будешь видеть подробные данные о каждом запросе.
Задание для самостоятельной практики
- Создай список заблокированных IP-адресов и подключи его к серверу.
- Настрой лимиты на частоту запросов и количество соединений.
- Отключи отображение версии сервера и закрой директории.
- Настрой таймауты для обработки соединений.
- Проверь, как сервер реагирует на частые запросы с одного IP.
Итоги
Теперь ты знаешь, как защитить свой сайт от нежелательной активности с помощью Nginx. Эти простые настройки помогут тебе избежать множества проблем и сделают сервер более устойчивым. В следующей статье мы поговорим о перенаправлениях и rewrite-правилах в Nginx.