DevOps и Контейнеризация 11 мин чтения 2026-09-02

Telegram-бот для мониторинга доступности сайтов и срока SSL на VDS: архитектура, защита от DDoS и пошаговый запуск в 2026 году

Полный обзор архитектуры и руководство по развертыванию собственного легковесного Telegram-бота для мониторинга доступности сайтов и срока действия SSL/TLS сертификатов на KVM VDS. Разбираем защиту от SSRF-атак и сканирования внутренней сети, асинхронные сокетные проверки, удобный Telegram UI, панель администратора с живыми системными метриками хоста и запуск через hardened systemd юнит.

Инженерная редакция SysKit Проверено инженерами SysKit.ru

В эпоху высокой конкуренции в веб-индустрии даже 5–10 минут недоступности интернет-магазина, медиа-портала или корпоративного API приводят к прямым финансовым потерям, срыву рекламных кампаний и проседанию позиций в поисковой выдаче Яндекса и Google. Не менее коварна проблема внезапно истекших SSL/TLS сертификатов: современные браузеры мгновенно блокируют доступ пользователей к сайту пугающим красным экраном с предупреждением об угрозе безопасности.

Большинство вебмастеров и системных администраторов начинают со сторонних бесплатных сервисов мониторинга (UptimeRobot, Pingdom, BetterUptime). Однако бесплатные тарифы облачных SaaS-платформ имеют существенные ограничения: жесткий лимит на 5–10 сайтов, задержка оповещений до 5–15 минут, отсутствие контроля за хранением данных и дорогостоящие подписки на SMS/Telegram алерты. В ответ на это инженерная команда SysKit.ru разработала автономный, производительный и надежно защищенный Telegram-бот SysKit Uptime & SSL Monitor, способный работать на любом недорогом Linux VDS.

💡
Главное преимущество собственного бота: Полная независимость от сторонних ограничений, моментальные оповещения прямо в ваш Telegram-мессенджер, гибкая настройка интервалов от 1 минуты, поддержка до 20+ сайтов на пользователя и нулевая абонентская плата (требуется лишь базовый сервер за 150–250 руб/мес).

1. Зачем нужен собственный бот мониторинга вместо сторонних SaaS

Сравним ключевые параметры собственного Telegram-бота, развернутого на VDS, с популярными облачными сервисами:

Параметр Облачные SaaS (Бесплатные тарифы) SysKit Telegram Monitor на VDS
Минимальный интервал проверки 5 – 15 минут От 1 до 5 минут (Настраивается)
Лимит сайтов на аккаунт До 5 – 10 штук 20 сайтов (До 500 через админку)
Контроль SSL-сертификатов Часто только в платных тарифах ($15+/мес) Встроен (Алерты за 30, 14, 7, 3, 1 день)
Канал уведомлений Email (Telegram платно) Мгновенный Telegram со статусами и кнопками
Конфиденциальность данных Данные хранятся на сторонних серверах 100% приватность на вашей собственной VDS

2. Архитектура SysKit Bot: Aiogram 3, SQLite WAL и семафоры

При проектировании бота мы заложили стандарты высокой производительности и масштабируемости, чтобы бот мог одновременно обслуживать сотни пользователей и мониторить тысячи доменов, потребляя менее 100 МБ оперативной памяти:

  • Фреймворк Aiogram 3.x: Полностью асинхронный движок на Python 3.10+ с маршрутизацией через роутеры, контекстными FSM-машинами состояний и гибкой системой Middleware.
  • База данных SQLite в режиме WAL (Write-Ahead Logging): Позволяет производить одновременное неблокирующее чтение и запись без риска блокировки базы данных при параллельных проверках.
  • Асинхронный планировщик на Concurrency-семафорах: Пакетные проверки запускаются через asyncio.Semaphore(25). Это защищает процессор и сетевые сокеты VDS от перегрузки (Socket Exhaustion).
  • Интерактивный UI на Inline-кнопках: Полноценный интерфейс дашборда с пагинацией, статусными бейджами (🟢 Онлайн, 🔴 Недоступен, ⏸ На паузе), ручным тестированием в 1 клик и журналом инцидентов.

3. Безопасность и Anti-DDoS: надежная защита от SSRF и спама

Сервисы мониторинга, принимающие произвольные URL от пользователей, традиционно подвержены критической уязвимости SSRF (Server-Side Request Forgery). Если злоумышленник добавит адрес http://127.0.0.1:8080 или http://169.254.169.254 (метаданные облачных провайдеров), сервер мониторинга превратится в инструмент сканирования локальной инфраструктуры хоста.

В боте SysKit реализован многоуровневый модуль безопасности security.py:

# Защита от SSRF: проверка запрещенных приватных сетей
FORBIDDEN_NETWORKS = [
    ipaddress.ip_network("127.0.0.0/8"),       # Loopback хоста
    ipaddress.ip_network("10.0.0.0/8"),        # Приватная сеть Class A
    ipaddress.ip_network("172.16.0.0/12"),     # Приватная сеть Class B
    ipaddress.ip_network("192.168.0.0/16"),    # Приватная сеть Class C
    ipaddress.ip_network("169.254.0.0/16"),    # Link-Local & Cloud Metadata
    ipaddress.ip_network("::1/128"),           # IPv6 Loopback
    ipaddress.ip_network("fc00::/7"),          # IPv6 Unique Local
]

Как работает эшелонированная защита:

  1. DNS Rebinding & IP-валидация: Перед отправкой запроса домен резолвится через сокет. Если хотя бы один из полученных IP-адресов принадлежит приватной или loopback подсети, запрос немедленно отклоняется с ошибкой.
  2. Ограничение протоколов: Разрешены строго протоколы http:// и https:// (попытки обратиться к file://, dict://, gopher:// блокируются парсером).
  3. Throttling Middleware (Anti-Flood): Ограничение частоты команд от одного пользователя методом скользящего окна (Sliding Window), отсекающее спам-ботов.
  4. Экранирование HTML: Все пользовательские названия и URL экранируются через html.escape(), исключая XSS и сбои форматирования сообщений Telegram API.

4. Движок проверок: неблокирующий HTTP/HTTPS и X.509 инспектор

Модуль проверки checker.py объединяет замер времени отклика (TTFB) по протоколу HTTP и низкоуровневый сокетный анализ X.509 сертификатов:

# Пример извлечения даты окончания SSL сертификата
reader, writer = await asyncio.open_connection(hostname, 443, ssl=ssl_context, server_hostname=hostname)
ssl_obj = writer.get_extra_info('ssl_object')
cert = ssl_obj.getpeercert()
expires_dt = datetime.strptime(cert['notAfter'], "%b %d %H:%M:%S %Y %Z")
days_left = (expires_dt.replace(tzinfo=timezone.utc) - datetime.now(timezone.utc)).days

Проверить текущее состояние сертификата любого сайта прямо сейчас можно через наш онлайн-инструмент Проверка SSL-сертификата SysKit, а оценить задержку отклика — через Пинг и замер TTFB.

5. Панель администратора: живые метрики VDS, рассылки и лимиты

Для администраторов предусмотрена закрытая панель управления /admin с широким функционалом:

  • Живой мониторинг хоста: Загрузка CPU, утилизация RAM (МБ/ГБ), заполнение SSD/NVMe диска и системный аптайм VDS через библиотеку psutil.
  • Массовая рассылка (Broadcast): Отправка форматированных новостей и объявлений всем активным пользователям с автоматической обработкой TelegramRetryAfter.
  • Управление лимитами: Возможность гибко увеличивать квоту сайтов для доверенных пользователей (например, до 50 или 100 сайтов командой /setlimit <user_id> 50).
  • Мгновенный триггер проверок и VACUUM: Принудительный запуск сканирования всех сайтов и оптимизация базы данных в 1 клик.

6. Рекомендуемые VDS-провайдеры для надежного хостинга Telegram-ботов

Для бесперебойной работы бота мониторинга требуется стабильный KVM VDS с низким пингом к дата-центрам Telegram (Амстердам, Франкфурт, Дубай) и надежной защитой от сетевых атак. Ниже представлены проверенные хостинг-провайдеры:

Рекомендуемые VDS-провайдеры

Отказоустойчивые сервера с быстрыми NVMe и каналом до 1 Гбит/с

Выбор инженеров под ботов

Timeweb Cloud VDS

Сверхбыстрые NVMe-диски, моментальное развертывание Ubuntu 24.04 / Debian 12, удобный REST API, поминутная оплата и стабильные каналы связи 1 Гбит/с.

Конфигурация
от 1 vCPU / 2 GB RAM / 30 GB NVMe
Надежность Enterprise Tier III
🔷

Selectel Cloud VPS

Премиальная сетевая связность, выделенные аппаратные ресурсы без оверселлинга, изоляция приватных сетей и круглосуточная инженерная поддержка.

Конфигурация
от 2 vCPU / 4 GB RAM / 50 GB NVMe
Идеально для быстрого старта
🟠

Beget VPS

Предустановленный Docker в 1 клик, автоматические ежедневные бэкапы всей виртуальной машины и отличный пинг по России и СНГ.

Конфигурация
от 1 vCPU / 2 GB RAM / 35 GB NVMe

7. Пошаговое развертывание на VDS через изолированный Systemd юнит

Для продакшен-запуска бота на операционных системах Ubuntu 22.04 / 24.04 или Debian 12 выполните следующие шаги:

Шаг 1: Установка Python и создание виртуального окружения:

# Обновляем репозитории и ставим базовые утилиты
sudo apt update && sudo apt install -y python3 python3-venv python3-pip

# Создаем рабочую папку и переходим в нее
sudo mkdir -p /var/www/syskit.ru/telegram_bot
cd /var/www/syskit.ru/telegram_bot

# Создаем изолированное виртуальное окружение
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

Шаг 2: Настройка файла переменных .env:

cat << 'EOF' > .env
BOT_TOKEN=123456789:AAFgHjKlMnOpQrStUvWxYz
ADMIN_IDS=123456789
DB_PATH=data/syskit_bot.db
DEFAULT_MAX_MONITORS=20
DEFAULT_CHECK_INTERVAL=300
MAX_CONCURRENT_CHECKS=25
SSRF_PROTECTION=True
EOF

Шаг 3: Создание защищенного Systemd-сервиса (Hardened Sandbox):
Создадим файл /etc/systemd/system/syskit-bot.service с включенной изоляцией системных директорий:

[Unit]
Description=SysKit Telegram Uptime & SSL Monitor Bot
After=network.target network-online.target
Wants=network-online.target

[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/www/syskit.ru/telegram_bot
Environment="PYTHONPATH=/var/www/syskit.ru"
EnvironmentFile=/var/www/syskit.ru/telegram_bot/.env
ExecStart=/var/www/syskit.ru/telegram_bot/venv/bin/python -m telegram_bot.bot

Restart=always
RestartSec=5s

# Харденинг безопасности
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/www/syskit.ru/telegram_bot/data /var/www/syskit.ru/telegram_bot/logs

[Install]
WantedBy=multi-user.target

Шаг 4: Активация и запуск службы:

# Выставляем корректные права для пользователя www-data
sudo chown -R www-data:www-data /var/www/syskit.ru/telegram_bot

# Перечитываем конфигурацию systemd и запускаем бота
sudo systemctl daemon-reload
sudo systemctl enable syskit-bot
sudo systemctl start syskit-bot

# Проверяем статус работы
sudo systemctl status syskit-bot

Для настройки сетевого экрана сервера используйте готовый шаблон Настройка межсетевого экрана UFW, а для защиты SSH — Харденинг SSH и sshd_config.

8. Альтернативный запуск в изолированном Docker Compose контейнере

Если на вашем VDS уже развернут Docker, запустить бота можно одной командой через docker-compose.yml:

services:
  syskit-bot:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: syskit_uptime_bot
    restart: unless-stopped
    env_file:
      - .env
    volumes:
      - ./data:/app/telegram_bot/data
      - ./logs:/app/telegram_bot/logs
    deploy:
      resources:
        limits:
          cpus: '0.75'
          memory: 384M
# Запуск контейнера в фоновом режиме
docker compose up -d --build

# Просмотр логов в реальном времени
docker compose logs -f

9. Резюме и готовый чек-лист развертывания

Развертывание собственного Telegram-бота для мониторинга сайтов на KVM VDS обеспечивает максимальную надежность контроля за веб-проектами без ежемесячных платежей сторонним облачным платформам.

Готовы развернуть собственный мониторинг сайтов?

Арендуйте производительный VDS сервер с быстрыми NVMe дисками и разверните бота SysKit Uptime & SSL Monitor всего за 5 минут!

Вопросы и ответы (FAQ)

Популярные вопросы вебмастеров и сисадминов по данной теме

Сколько ресурсов VDS потребляет Telegram-бот мониторинга?
Бот написан на асинхронном стеке Python 3 + Aiogram 3 + aiohttp и потребляет всего около 60–80 МБ оперативной памяти и менее 1–2% одного ядра CPU при регулярном мониторинге сотен сайтов.
Как бот защищен от ложных срабатываний при кратковременных лагах сети?
В настройках каждого монитора настраивается тайм-аут ожидания ответа (по умолчанию 10 секунд). Кроме того, планировщик отслеживает счетчик последовательных сбоев перед эскалацией тревоги.
За сколько дней бот начинает предупреждать об истечении срока действия SSL сертификата?
Уведомления отправляются заблаговременно по эшелонированной шкале: за 30, 14, 7, 3 и 1 день до окончания срока, а также в момент полного истечения сертификата.

Читайте также в блоге SysKit

Смежные руководства и полезные технические статьи