Skip to content

Latest commit

 

History

History

14_defence

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Домашнее задание к занятию «Организация безопасности сети (часть 1)»

В качестве результата пришлите ответы на вопросы в личном кабинете студента на сайте netology.ru.

Rate Limit

Вводная

Сервер nginx достаточно часто используется не только как веб-сервер, но и как reverse proxy. Что это значит? Это значит, что его ставят перед тяжёлыми веб-приложениями и позволяют ему решать следующие задачи:

  1. Отдавать "статику" (статичные файлы, с чем он справляется достаточно хорошо)
  2. Проксировать запросы на Upstream сервера (т.е. запрос приходит на nginx, nginx его отправляет дальше на сервер с приложением)

Зачем нужна вторая функция? nginx может взять на себя задачи по работе с медленными клиентами, кэшированию и т.д.

А кроме того, может служить программным балансировщиком нагрузки и лимитировать поток входящих запросов (именно это нас и будет интересовать).

Что мы хотим сделать? Мы хотим научиться с помощью nginx ограничивать поток входящих запросов с одного ip-адреса.

Описание выполнения

У вас должно быть две виртуальные машины:

  • Ubuntu с nginx (10.0.0.1)
  • Kali (10.0.0.2)

У вас уже должен быть настроенный nginx, если вдруг так случилось, что его нет, то вернуться к соответствующему уроку.

Без лимита

Ubuntu

1. Удостоверяетесь, что сервис nginx запущен, порт 80 открыт.

2. Если вы не устанавливали nginx, то:

sudo apt update
sudo apt install nginx

3. Редактируете конфигурацию sudo mcedit /etc/nginx/sites-enabled/default, чтобы она выглядела следующим образом:

4. Сохраняете изменения

5. Проверяете корректность конфигурации sudo nginx -t

6. Применяете конфигурацию sudo nginx -s reload

Kali

Для генерации запросов мы будем использовать утилиту Apache Benchmarks.

ab --help

Если у вас выводится сообщение о том, что программа не найдена (bash: ab command not found), то установите её:

sudo apt update
sudo apt install ab

Далее сделаем 1000 запросов по 100 запросов одновременно:

ab -n 1000 -c 100 http://netology.local

Удостоверяемся, что все запросы проходят:

Rate Limit

Ubuntu

Меняем настройки nginx:

sudo mcedit /etc/nginx/sites-enabled/default

Редактируем конфигурацию, чтобы она выглядела следующим образом:

Изменилась только 1-ая и 17-ая строки.

Описание значений
limit_req_zone $binary_remote_addr zone=limit:10m rate=50r/s

Создание зоны по ограничению количества запросов:

  • $binary_remote_addr - на основании ip-адреса запрашивающего
  • zone=limit:10m - зона с именем limit и памятью 10 мегабайт (информация о 16 000 адресах занимает примерно 1 мегабайт)
  • rate=50r/s - 50 запросов в секунду
limit_req zone=limit burst=50 nodelay
  • limit_req zone=limit - включение лимита для определённого сервера.
  • burst=50 - по умолчанию, 50 запросов в секунду значит, что нельзя делать запросы чаще чем раз в 20ms, т.е. если запросы будут приходить чаще, то nginx будет откидывать их с ошибкой 503. burst позволяет указать количество запросов, которые допустимы в рамках окна, установленного rate, при этом первый будет обслужен, а остальные будут дожидаться установленного лимита по времени (те, кто вышел за пределы 50, получат 503)
  • nodelay - позволяет не ждать положенного лимита, а отправлять запрос сразу, если это позволяют установленные лимиты

Тестируем конфигурацию и применяем изменения:

sudo nginx -t
sudo nginx -s reload

Kali

Ещё раз делаем 1000 запросов по 100 запросов одновременно:

ab -n 1000 -c 100 https://netology.local

Удостоверяемся, что часть из них завершается с ошибкой:

Fail2Ban (необязательная часть)

Конечно же, можно пойти дальше и "блочить" IP, в этом нам поможет Fail2Ban, который мы рассмотрели на лекции

Ubuntu

sudo apt update
sudo apt install fail2ban

Удостоверяемся, что сервис запущен:

systemctl status fail2ban

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo mcedit /etc/fail2ban/jail.local

Спускаетесь до записи [nginx-limit-req] и включаете её добавлением строки enabled = true:

Сохраняете файл и применяете конфигурацию:

sudo fail2ban-server reload
sudo fail2ban-server status

Kali

Убедитесь, что после пары запусков ab вас "забанят":

Удостоверяемся, что адрес Kali действительно забанен:

sudo zgrep 'Ban' /var/log/fail2ban.log

Результат

Пришлите следующие скриншоты:

  1. Скриншот с запросами ab до включения limit_req на nginx
  2. Скриншот с запросами ab после включения limit_req на nginx
  3. Скриншот с запросами ab после включения fail2ban (не обязательно)