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:
В файле subnet-monitor-whitelist.conf можно добавить IP-адреса и диапазоны в whitelist, чтобы на них ограничения не распространялись:
Очистить заблокированные 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:
По умолчанию лимит составляет 200 запросов в минуту на один URL. И 500 запросов в секунду на весь домен. Для обычного пользователя это очень большой запас, а для защиты от перегрузок - это отличный рабочий порог. Если эти лимиты не нужны, то в конфигурационном файле /etc/nginx/nginx.conf все строчки что выделены выше на скрине красным прямоугольником можно закомментировать или увеличить лимиты.
Белый экран браузера с надписью ERR_HTTP2_PROTOCOL_ERROR означает что сработал лимит запросов на URL на уровне Nginx:
Если лимит срабатывает, то это видно в логе NGINX, а браузер покажет ошибку ERR_HTTP2_PROTOCOL_ERROR.
Загружаем свои SSL сертификаты на сервер Килбота
Чтобы подключить свои сертифкаты на сервер килбота, нужно:
- в настройках скрипта в Килботе выставить "самоподписанный сертификат":
- Загрузить файлы сертификата по этому пути:
/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
Скрипт:
- Проверяет возможность использования поддоменов сайта для Reverse Proxy.
- Создает необходимую конфигурацию.
- Проверяет работоспособность созданных прокси.
- Если автоматическая настройка невозможна, сообщает, что необходимо сделать для корректной конфигурации.
Таблица соответствия доменов
Домены, которые 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, но отказ от неё не приводит к нарушению работы сайта или системы анализа трафика.