Возможности и конфигурация своего KillBot сервера

KillBot ставится на чистую Ubuntu 22.04 без предустановленного ПО. Это должен быть отдельный сервер (НЕ тот сервер, на котором лежат файлы вашего сайта).

Можно заказать сервер с уже установленным Килбот, прямо у нас на сайте: https://killbot.ru/vps/create

Или можете рзавернуть свой чистый сервер Ubuntu 22.04 и выполните на нем следующие команды:

sudo apt update
apt-get install wget
wget https://msk.killbot.ru/killbot_dns/kb_install.sh -O kb_install.sh
chmod +x kb_install.sh
yes '' | sudo DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a ./kb_install.sh


/opt/killbot

это папка, куда устанавливает себя Килбот.

папка для установки Киллбот

Килбот при установке разворачивает nginx и apache2 серверы.

И для каждого из этих серверов килбот создаёт свою конфигурацию:

/etc/nginx/sites-enabled/domain.ru.conf - принимает запросы и проксирует их на 8443 порт апач2.

/etc/apache2/sites-enabled/domain.ru-killbot.conf - это конфиг апача, созданный килботом

Конфиги для apache2 и nginx создаются через web интерфейс на сайте killbot.ru, поэтому если вы что-либо измените в этих конифигах, то пересохранение настроек через веб интерфейс килбота все свои изменения затрёт.

Антиддос на своём сервере Kilbot

Если вы ставите Kilbot на свой сервер, вместе с ним разворачивается и анти-DDoS-защита. 

В Kilbot анти-DDoS работает на двух уровнях:

  • через отдельный скрипт /opt/killobt/f2b/subnet-monitor.sh - анализирует лог /var/log/nginx/access.log и банит IP-адреса или подсети через iptables.
  • на уровне NGINX - NGINX ограничивает число запросов к одному URL

 

Блокировка IP через subnet-monitor.sh

Скрипт subnet-monitor.sh блокирует IP и диапазоны от которых много запросов - это скрипт /opt/kilbot/f2b/subnet-monitor.sh
Скрипт запускается раз в минуту по крону. Запуск скрипта прописан в этом файле крона: /etc/cron.d/killbot-cleanup:

крон в килботе

Скрипт анализирует NGINX access log. Если с одного IP-адреса приходит более 1000 запросов в минуту, то IP банится на 1 час через IP tables. То же самое применяется к подсетям /24 и /16, если с них идет слишком много запросов.

Лимиты на блокировку для subnet-monitor.sh задаются в отдельном конфигурационном файле subnet-monitor.conf:

лимиты на блокировку IP

В файле  subnet-monitor-whitelist.conf  можно добавить IP-адреса и диапазоны в whitelist, чтобы на них ограничения не распространялись:

добавление IP в разрешенные

Очистить заблокированные IP и другие команды для subnet-monitor.sh

subnet-monitor.sh show - показывает забаненые IP

subnet-monitor.sh clear - очищает забаненые IP

subnet-monitor.sh run - запуск проверrи лога /etc/nginx/access.log на блокировку IP

subnet-monitor.sh test - выведет тестовые данные - сколько запросов с каждого IP или диапазона

Как отключить subnet-monitor.sh

Если нужно полностью отключить subnet-monitor.sh, достаточно закомментировать его запуск в cron в файле /etc/cron.d/kilbot-cleanup.

Блокировка числа запросов на уровне nginx

На уровне NGINX ограничивается количество запросов к конкретному URL. Это полезно в ситуациях, когда ботнет использует много разных адресов, но атакует один и тот же путь на сайте. В таком случае сам URL может стать временно недоступным, а остальные страницы сайта продолжат работать. Ниже скриншот настроек, ограничивающих число запросов ко всему домену и к конкретному url:

ограничение числа запросов на url в nginx

По умолчанию лимит составляет 200 запросов в минуту на один URL. И 500 запросов в секунду на весь домен.  Для обычного пользователя это очень большой запас, а для защиты от перегрузок - это отличный рабочий порог. Если эти лимиты не нужны, то в конфигурационном файле /etc/nginx/nginx.conf все строчки что выделены выше на скрине красным прямоугольником можно закомментировать или увеличить лимиты.

Белый экран браузера с надписью ERR_HTTP2_PROTOCOL_ERROR означает что сработал лимит запросов на URL на уровне Nginx:

Сработал лимит на URL для nginx - значит на этот url идет ддос


Если лимит срабатывает, то это видно в логе NGINX, а браузер покажет ошибку ERR_HTTP2_PROTOCOL_ERROR.

Загружаем свои SSL сертификаты на сервер Килбота

Чтобы подключить свои сертифкаты на сервер килбота, нужно:

  1. в настройках скрипта в Килботе выставить "самоподписанный сертификат": выбираем самоподписанный серт

     

  2. Загрузить файлы сертификата по этому пути:
    /opt/killbot/ssl/domain.ru/privkey.pem - приватный ключ
    /opt/killbot/ssl/domain.ru/fullchain.pem - цепочка серификатов
    здесь domain.ru замените на название вашего домена, приватный ключ и цепочка сертификатов должны быть названы - как в примере выше.

После этого нужно на killbot.ru в настройках проекта внизу нажать на кнопку "Reload DNS" - килбот смотрит наличиае сертификатов в этой папке и если они там есть, то килбот в конфигурационных файлах apache2 и nginx прописывает пути именно к этим сертификатам.

Обновление Килбота

Для обновления выполните команду:

sudo /opt/killbot/UpdateAll.sh

Свой дизайн Экрана Килбот.

На своем сервере можно изменить надписи на Экране Килбот, его дизайн и Капчу.
Файл Экрана Килбот лежит в файле:
sudo /opt/killbot/html/verification.php

В этом файле можно:

1. Изменить капчу с синусоидной на более простую старую прямую капчу: 

замена капчи килбота с синусоидной на прямую

2. Там же можно изменить логотип, подпись над капчей и дизайн:
 

Изменяем логотип и Дазайн капчи Килбота

Скрытая отправка данных на серверы KillBot через Reverse Proxy

Чтобы в анализе сетевого трафика не были видны домены KillBot, например data.killbot.ru, используется технология Reverse Proxy.

В этом режиме браузер пользователя отправляет данные не напрямую на домены KillBot, а на поддомены защищаемого сайта. Сервер KillBot принимает запрос на таком поддомене и через Reverse Proxy перенаправляет его на нужный внутренний сервер KillBot.

Как это работает

Допустим, защищаемый сайт имеет домен: domain.ru

Если поддомены сайта направлены на сервер KillBot и используется Wildcard SSL-сертификат (*.domain.ru), KillBot может использовать поддомены вида:

r1.domain.ru
r2.domain.ru
...
rN.domain.ru

Каждый такой поддомен соответствует определенному серверу KillBot.

Например:

Браузер пользователя
        ↓
r1.domain.ru
        ↓ Reverse Proxy
data.killbot.ru

Таким образом, со стороны браузера запрос выполняется к: https://r1.domain.ru/... вместо прямого обращения к https://data.killbot.ru/...

При этом фактическая обработка данных продолжает выполняться соответствующим сервером KillBot.

Настройка Reverse Proxy

При сохранении настроек сайта автоматически запускается скрипт:

/opt/killbot/setup_killbot_reverse_proxy.sh domain.ru

Скрипт:

  1. Проверяет возможность использования поддоменов сайта для Reverse Proxy.
  2. Создает необходимую конфигурацию.
  3. Проверяет работоспособность созданных прокси.
  4. Если автоматическая настройка невозможна, сообщает, что необходимо сделать для корректной конфигурации.

Таблица соответствия доменов

Домены, которые KillBot может использовать для Reverse Proxy, сохраняются в файле:

/opt/killbot/settings/domain.ru/killbot_revers

В нем хранится соответствие между поддоменами сайта и серверами KillBot, например:

r1.domain.ru -> data.killbot.ru
r2.domain.ru -> r1.kill-bot.ru
r3.domain.ru -> r2.kill-bot.ru

KillBot использует эти соответствия при формировании адресов для отправки данных.

Автоматическая проверка

Работоспособность Reverse Proxy регулярно проверяется скриптом:

/opt/killbot/check_killbot_reverse_proxy.sh

Проверка выполняется каждую минуту через Cron:

* * * * * root /opt/killbot/check_killbot_reverse_proxy.sh >> /var/log/killbot/check_killbot_reverse_proxy.log 2>&1

Cron-задание находится в файле:

/etc/cron.d/killbot-cleanup

Лог проверки сохраняется в:

/var/log/killbot/check_killbot_reverse_proxy.log

В случае, если регулярная проверка обнаружит, что Reverse Proxy через эти поддомены больше не работает, то  KillBot автоматически перестанет использовать неработающие поддомены и переключится на рабочие домены KillBot для отправки данных.

Таким образом, Reverse Proxy является дополнительным уровнем маскировки инфраструктуры KillBot, но отказ от неё не приводит к нарушению работы сайта или системы анализа трафика.