Desktop Software · Music · Open Development
Satoru Player
Настольный музыкальный компаньон: показывает, что вы слушаете, в Discord Rich Presence.
Project 08Бета 1.0.0
Security · Monitoring · Telegram Bot · Self-hosted
ScanGuard следит за логами nginx, Caddy и SSH, находит сканеры и присылает в Telegram карточку: страна, хост, ASN, провайдер и теги. Под карточкой кнопки «Забанить» и «Скип». Есть админ-панель прямо в боте, свои правила для проверок РКН и ГРЧЦ, белый список и автобан. Ставится одной командой на VPS, открытый код под MIT.
5b4306b479f95c13c896b494866dcf65cfc499043b109401ba5c4357372208bbОдин небольшой сервис на Python и бот в Telegram. Он работает на вашем сервере, а геоданные запрашивает только по IP сканеров.
Читает access-логи nginx, JSON-логи Caddy и события SSH из auth.log, secure или journald. Переживает ротацию логов и отсутствие файла.
Пути сканеров (.env, .git, wp-login, phpmyadmin), боты по User-Agent (zgrab, masscan, nuclei), ответы 4xx и подбор паролей SSH дают очки. Алерт приходит, когда IP набрал порог за окно времени.
Страна и город, хост (rDNS), ASN, провайдер, организация и теги: хостинг или дата-центр, прокси или VPN, мобильная сеть.
Кнопка «Забанить» вызывает ufw, nftables, iptables или вашу команду, например fail2ban. Баны хранятся в базе и восстанавливаются после перезагрузки для nft и iptables.
Команда /menu: статистика за 24 часа, 7 и 30 дней, списки банов и пропущенных, проверка любого IP, настройки порога и окна кнопками, автобан, пауза, управление админами.
Вы задаёте свои CIDR, ASN и ключевые слова. Запрос с адреса из CIDR даёт алерт сразу, без порога. Официального списка проверок у РКН нет, поэтому правила добавляете вы.
Приватные адреса, IP самого сервера, ваш SSH-адрес на момент установки и белый список никогда не банятся и не алертятся.
Не больше 20 алертов в минуту, пауза между алертами по одному IP, кэш геоданных. Скрытые алерты считаются и добавляются в следующую карточку.
Очки по одному IP суммируются в окне времени (по умолчанию 5 минут). Порог по умолчанию 5, его можно менять в боте.
| Сигнал | Очки | Пример |
|---|---|---|
| Путь сканера | 3 | GET /.env, /wp-login.php, /phpmyadmin/ |
| Плохой User-Agent | 2 | zgrab, masscan, nuclei, sqlmap |
| Ответ 400, 401, 403, 404, 405 или 444 | 1 | Запрос несуществующей страницы |
| Пустой User-Agent | 1 | Запрос без заголовка |
| Неудачный вход по SSH | 1 | Failed password, Invalid user |
| Ошибка согласования SSH | 2 | Unable to negotiate |
| Адрес из ваших РКН-CIDR | сразу алерт | Любой запрос с подсети из правил |
От токена бота до первой карточки в Telegram. Установщик задаёт два вопроса: токен и ваш Telegram ID. Остальное он определяет сам и показывает для подтверждения.
Выберите сценарий, и лишние шаги будут приглушены. Без выбора показаны все шаги.
В Telegram откройте @BotFather, отправьте /newbot и сохраните токен. Свой числовой ID покажет @userinfobot. Он понадобится установщику: только этот пользователь сможет управлять ботом.
Токен даёт полный доступ к боту. Не публикуйте его и не вставляйте в чаты. Если он утёк, отзовите его в @BotFather командой /revoke.
Зайдите на VPS по SSH под root. Если вы вошли обычным пользователем, перейдите в root командой sudo -i и запускайте установку уже оттуда.
ssh root@IP_СЕРВЕРАКоманда скачивает бандл, сверяет SHA-256 и запускает установщик. Он проверит токен через Telegram, найдёт логи nginx, Caddy и SSH, выберет фаервол (ufw, nft или iptables) и добавит ваш текущий SSH-адрес в белый список.
bash <(curl -Ls https://1344.pl/downloads/scanguard/get.sh)Тот же установщик, но без вопросов. Необязательные переменные: NGINX_LOGS, CADDY_LOGS, SSH_LOGS, BAN_BACKEND (ufw, nft, iptables, custom), WHITELIST, THRESHOLD.
BOT_TOKEN=123456:ABC... ADMIN_IDS=111111111 bash <(curl -Ls https://1344.pl/downloads/scanguard/get.sh) --yesНесколько админов передаются через запятую: ADMIN_IDS=111,222.
Скачайте архив по кнопке выше, сверьте контрольную сумму, распакуйте и просмотрите код. Затем запустите install.sh: он копирует проект в /opt/scanguard, создаёт виртуальное окружение и службу.
sha256sum scanguard-*-all.tar.gz
tar xzf scanguard-*-all.tar.gz && cd scanguard-*
bash install.sh0,0 МБ · SHA-256 5b4306b479f95c13c896b494866dcf65cfc499043b109401ba5c4357372208bb
Если вы используете Caddy, добавьте в Caddyfile запись access-лога в формате JSON и перезагрузите Caddy. Для nginx ничего менять не нужно: подойдёт стандартный формат combined.
log {
output file /var/log/caddy/access.log
format json
}Если сервер стоит за Cloudflare или другим прокси, настройте в nginx реальный IP клиента (real_ip_header), иначе бот увидит адрес прокси.
После установки бот пришлёт вам сообщение «ScanGuard запущен». Отправьте ему /menu: откроется панель со статистикой, списками и настройками. Для проверки командой /check 8.8.8.8 можно посмотреть карточку любого IP.
Установщик добавляет команду scanguard. Конфиг лежит в /etc/scanguard/scanguard.env, база в /var/lib/scanguard, код в /opt/scanguard.
scanguard status
scanguard logs
scanguard config
scanguard update
scanguard uninstallПорог, окно, автобан и источники меняются прямо в боте: /menu, затем Настройки. Значения из бота в базе важнее значений из конфига.
Версия 1.0.0 — бета. Мы отдельно отмечаем, что уже проверено, а что ещё нет.
| Область | Статус |
|---|---|
| Разбор логов nginx, Caddy и SSH, скоринг, правила РКН, белый список и статистика: 11 автоматических тестов | Тесты проходят |
| Бот и админ-панель с настоящим токеном Telegram: алерты, кнопки бана и скипа, списки | Проверено в тестовом запуске |
| Установщик get.sh и install.sh на реальном VPS | Ещё не прогонялся на сервере |
| Баны через ufw, nftables и iptables, восстановление после перезагрузки | Команды написаны, на сервере не проверялись |
| SSH-события из journald и JSON-логи Caddy на реальных логах | Проверено только на тестовых строках |
Telegram-бот для администратора VPS. Он читает логи nginx, Caddy и SSH, находит сканеры и присылает карточку с расшифровкой IP: страна, хост, ASN, провайдер, теги. Под карточкой кнопки «Забанить», «Скип» и «В белый список». Работает на вашем сервере, открытый код под лицензией MIT.
Подключитесь к VPS по SSH под root и выполните одну команду: bash <(curl -Ls https://1344.pl/downloads/scanguard/get.sh). Установщик спросит токен бота и ваш Telegram ID, найдёт логи и фаервол, создаст службу и запустит её. После этого напишите боту /menu.
Токен выдаёт @BotFather после команды /newbot. Числовой ID покажет бот @userinfobot. Установщик проверяет токен запросом к Telegram, поэтому неверный токен он не примет.
Ставит Python, venv, git и curl через пакетный менеджер системы, копирует проект в /opt/scanguard и ставит зависимости в виртуальное окружение. Записывает конфиг в /etc/scanguard/scanguard.env с правами 600, создаёт службу systemd scanguard и команду scanguard. Ваш SSH-адрес он добавляет в белый список, чтобы вы не забанили себя.
Да. Передайте токен и ID переменными и добавьте ключ --yes: BOT_TOKEN=... ADMIN_IDS=... bash <(curl -Ls https://1344.pl/downloads/scanguard/get.sh) --yes. Это удобно для скриптов и для нескольких серверов.
На Linux с systemd: Ubuntu, Debian, Fedora, RHEL-семейство, Arch и Alpine. Нужен Python 3.9 и новее. Установщик рассчитан на эти системы, но на реальном сервере пока не прогонялся, поэтому о проблемах сообщайте.
nginx читается в стандартном формате combined (/var/log/nginx/access.log). Для Caddy нужен JSON-лог: добавьте в Caddyfile блок log с output file и format json. SSH читается из /var/log/auth.log или /var/log/secure, а если файла нет, из journald. Пути можно изменить в /etc/scanguard/scanguard.env.
Через ufw, nftables или iptables, на выбор при установке. Можно задать свою команду, например fail2ban-client set sshd banip {ip}. Бан закрывает все порты для этого IP. Для nft и iptables бот восстанавливает баны из базы после перезагрузки сервера.
Нет. Приватные и локальные адреса, IP самого сервера, ваш SSH-адрес на момент установки и всё из белого списка бот не банит и не показывает в алертах. Белый список пополняется кнопкой под карточкой или в меню.
Вы добавляете в боте свои CIDR, ASN и ключевые слова (меню «РКН-правила»). Запрос с адреса из CIDR даёт алерт сразу. Совпадение по ASN или слову в названии провайдера добавляет метку «РКН/ГРЧЦ» в карточку. Официального публичного списка адресов проверок нет, поэтому диапазоны вы подбираете сами по своим логам.
Выполните scanguard status и scanguard logs. Частые причины: неверный токен или ID в /etc/scanguard/scanguard.env, вы не нажали /start у бота, в настройках выключен нужный источник, пути к логам указаны неверно, либо мониторинг стоит на паузе. После правки конфига выполните scanguard restart.
Бот общается с Telegram, чтобы присылать вам сообщения. Для расшифровки IP он отправляет адрес сканера на ip-api.com по HTTP, лимит бесплатного плана 45 запросов в минуту. Остальное остаётся на вашем сервере. Логи и содержимое запросов никуда не отправляются.
Да, но у каждого сервера своя установка и свой бот. Один токен нельзя использовать на двух серверах: Telegram позволяет только одному процессу получать сообщения. Создайте по боту на сервер у @BotFather и укажите свой ID для каждого.
Владельцы указываются при установке (ADMIN_IDS). Дополнительных админов владелец добавляет в боте: /menu, «Админы», «Добавить админа», затем числовой Telegram ID. Остальные пользователи бота игнорируются.
Выполните scanguard update. Команда скачивает свежий бандл с 1344.pl, проверяет SHA-256, обновляет код и перезапускает службу. Конфиг и база сохраняются.
Команда scanguard uninstall останавливает службу и удаляет код и команду. Конфиг, базу и таблицу nft она удаляет только после вашего подтверждения. Правила ufw и iptables, добавленные ботом, остаются: снимите их вручную, если нужно.
MIT. Исходный код входит в архив, который вы скачиваете, и вы можете просмотреть его перед установкой.
1344 PROJECT
Desktop Software · Music · Open Development
Настольный музыкальный компаньон: показывает, что вы слушаете, в Discord Rich Presence.
Web Development · Infrastructure · Digital Solutions
Веб-разработка и цифровая инфраструктура: сайты, интерфейсы, домены, серверы и поддержка.
Infrastructure · Network Management · Self-hosted
Панель управления VPS и VPN-инфраструктурой: серверы по SSH, пользователи, ссылки, маршрутизация Xray.
Telegram Bot · Access Keys · Community
Telegram-бот, который бесплатно выдаёт ключи доступа для WDTT, qWDTT, PWDTT и iOS VK Turn Proxy за подписку на канал.
Client · sing-box · Xray · Community project
Клиент sing-box и Xray для компьютера и Android с поддержкой qWDTT, CSQTT, olcRTC, OpenFlux, DNSTT, SlipStream, MasterDNS и S3 Bypass.
Community · Forum · Web
Русскоязычный форум на собственном движке: разделы и темы, профили, личные сообщения, подписки и модерация.
Infrastructure · DNS · Free Service
Бесплатные поддомены на semqka.xyz с редактором DNS и DuckDNS-совместимым обновлением IP.
Infrastructure · DNS · Free Service
Публичный зашифрованный DNS (DoH и DoT) с DNSSEC, без логов и с подменой для выбранных сервисов.