DISCLAIMER|ВНИМАНИЕ: Нужно понимать что описываемые ниже приёмы и механизмы вынуждают web-сервер вести себя не так как предусматривает стандарт HTTP, например RFC 9110 описанный Internet Engineering Task Force (IETF). В следствии чего, поисковые системы могут исключить ваш сайт из индексации или произойти прочие не приятные инциденты, будьте внимательны) А так же в статье используется любительский проект с GitHub, неизвестно сколько времени он будет поддерживаться и развиваться, какие в нём имеются уязвимости и\или закладки.
Введение
Сегодня хочу рассказать об установке и минимальной (для меня) настройке ловушки для web сайта, HoneyPot или медовый горшочек. Смысл таких ловушек, притворится легитимной службой\сервисом, приманив тем самым ботов которые собирают информацию в автоматическом режиме или пытаются взломать сервис на вашем сервере. Принцип работы заключается в том что бы бот, максимально «увяз» пытаясь получить доступ или собрать информацию, наш медовый горшочек будет бесконечно имитировать загрузку сайта.
Приступаем
За основу был взят проект с github, реализация написана на Go, в оригинале нам предлагают скачать проект, скомпилировать, с генерировать конфиг файл или же ЙОЛО метод) скачать готовый бинарный файл, положить\создать конфиг файл в директории по умолчанию. Необходимо будет выполнить минимальные настройки\пререквесты сервера, установить golang, включить модули Apache (mod_proxy, mod_proxy_http, mod_ratelimit), в рамках данной статьи мы это рассматривать не будем. Мы пойдём вторым путём:
- Идём на страницу с скомпилированными релизами и скачиваем для нашей архитектуры, в нашем случае нас интересует — HellPot-v0.3.9-linux-amd64.tar.gz
- Создаем конфиг файл:
nano $HOME/.config/HellPot/config.toml
Содержимое файла следующее, здесь я слегка изменил оригинальное содержимое, будьте внимательны, возможно будет необходима доработка под себя:
[deception]
# Used as "Server" HTTP header. Note that reverse proxies may hide this.
server_name = "Apache"
[http]
# TCP Listener (default)
bind_addr = "127.0.0.1"
bind_port = "8081"
# header name containing clients real IP, for reverse proxy deployments
real_ip_header = 'X-Real-IP'
# this contains a list of blacklisted useragent strings. (case sensitive)
# clients with useragents containing any of these strings will receive "Not found" for any requests.
uagent_string_blacklist = ["Cloudflare-Traffic-Manager", "curl"]
# Unix Socket Listener (will override default)
unix_socket_path = "/var/run/hellpot"
unix_socket_permissions = "0666"
use_unix_socket = false
[http.router]
# Toggling this to true will cause all GET requests to match. Forces makerobots = false.
catchall = true
# Toggling this to false will prevent creation of robots.txt handler.
makerobots = true
# Handlers will be created for these paths, as well as robots.txt entries. Only valid if catchall = false.
paths = ["wp-login.php", "wp-login"]
[logger]
# verbose (-v)
debug = true
# extra verbose (-vv)
trace = false
# JSON log files will be stored in the below directory.
#directory = "/home/kayos/.local/share/HellPot/logs/"
# disable all color in console output. when using Windows this will default to true.
nocolor = false
# toggles the use of the current date as the names for new log files.
use_date_filename = true
[performance]
# max_workers is only valid if restrict_concurrency is true
max_workers = 256
restrict_concurrency = true
3. Подготавливаем web-сервер, создаем фейковый каталог /content в корне нашего сайта, создаём в нём пустые файлы 400,403,404,500, создаём файл robot.txt запрещаем индексировать этот каталог и его содержимое.
4. Дописываем параметры в VirtualHost нашего сайта, пример для Apache:
<VirtualHost yourserver>
....
ProxyPreserveHost on
ProxyPass "/content/" "http://localhost:8081/"
ProxyPassReverse "/content/" "http://localhost:8081/"
<Location "/content/">
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 5
</Location>
</VirtualHost>
5. Разархивируем скачанный архив и запускаем, я использую screen:
tar –xvzf HellPot-v0.3.9-linux-amd64.tar.gz
screen
./HellPot
После запуска в консоли увидим вывод:
Видим сообщение что сервер запустился и принимает соединения на порту 8081.
Следующим шагом, я слегка изменил стандартный файлы wordpress, таким образом что бы все несуществующие страницы так же редиректились в /content/404. Идём в раздел «Внешний вид» — «Редактор тем», меняем содержимое файла 404.php, родное содержимое скопируем в надёжное место, вставим следующий код:
<?php wp_redirect( 'https://iamninja.ru/content/404', 301 ); exit; ?>
Заключение
На этом базовая настройка закончена. По итогу получаем конфигурацию сайта, при которой клиенты которые игнорируют содержимое robot.txt получают бесконечный поток, напоминающих загрузку реального веб-сайта. Предполагается что такая загрузка будет идти «вечно». В конфигурации виртуального хоста Apache, мы так же указали лимит скорости в 5 кб\с, в конфигурации самого HellPot’a ограничили колличество клиентов — 256.