Создайте собственного бота Telegram для мониторинга IPv4 чёрных списков на VPS
Защита вашего IP-адреса от попадания в спам-листы критически важна для доставляемости электронной почты, репутации сервиса и бесперебойной работы. Независимо от того, управляете ли вы почтовым сервером, SaaS-платформой или веб-приложением, одна запись в черном списке может молча заблокировать исходящие письма и подорвать доверие клиентов за одну ночь. В этом подробном руководстве вы узнаете, как создать и развернуть полнофункциональный бот Telegram, который автоматически проверяет любой IPv4-адрес в крупных базах данных спама — все это работает на надежном VPS.
Зачем автоматизировать мониторинг черного списка IPv4?
Ручные проверки черного списка утомительны и легко забыть. Автоматизируя процесс через бота Telegram, вы получаете:
- Мгновенные проверки по требованию — запрашивайте любой IP прямо со своего телефона или компьютера
- Обратная связь в реальном времени — результаты доставляются в Telegram за секунды
- Нулевые накладные расходы на инфраструктуру — бот работает постоянно на вашем сервере в фоновом режиме
- Масштабируемость — позже расширьте бота запланированными оповещениями, интеграциями webhook или пакетными проверками нескольких IP
IP, занесенный в базы данных Spamhaus, SpamCop, StopForumSpam или Blocklist.de, может привести к сбоям доставки электронной почты, приостановке услуг и репутационному ущербу. Упреждающий мониторинг намного дешевле, чем реактивный контроль ущерба.
Почему развертывать на AlexHost VPS?
Запуск Telegram-бота требует сервера, который работает 24/7, быстро реагирует и предоставляет полный root-доступ для установки пользовательских зависимостей. AlexHost VPS Hosting обеспечивает именно это — хранилище NVMe SSD для быстрого ввода-вывода, защиту от DDoS корпоративного уровня и полный root-доступ, чтобы вы могли устанавливать Python, Selenium, драйверы браузера и любые другие инструменты без ограничений.
В отличие от общих сред, где ограничения ресурсов могут замедлить производительность вашего бота, выделенный VPS обеспечивает постоянное выделение CPU и RAM для вашего приложения. Если вы предпочитаете управляемый интерфейс панели управления, VPS с cPanel также доступен, что делает управление сервером доступным даже для тех, кто менее комфортно чувствует себя с командной строкой.
Предварительные требования
Перед написанием первой строки кода убедитесь, что на вашем сервере установлено следующее:
Системные требования
| Требование | Минимальная версия |
|---|---|
| Python | 3.7 или выше |
| pip | Последняя стабильная |
| Google Chrome | Последняя стабильная |
| ChromeDriver | Соответствующая версия Chrome |
| ОС | Ubuntu 20.04+ / Debian 11+ |
Установка библиотек Python
Подключитесь к вашему VPS через SSH и выполните следующие команды для установки необходимых пакетов Python:
pip install selenium
pip install aiogram==3.4.1- Selenium — автоматизирует взаимодействие с браузером для получения результатов проверки черного списка из MXToolbox
- aiogram 3.4.1 — современный асинхронный фреймворк Python для Telegram Bot API
Установка Google Chrome и ChromeDriver (Headless)
Selenium требует реальный браузер для отрисовки страниц с интенсивным использованием JavaScript. Установите Chrome в режиме headless на вашем Linux сервере:
# Install dependencies
sudo apt update
sudo apt install -y wget curl unzip fonts-liberation libappindicator3-1 libasound2
libatk-bridge2.0-0 libatk1.0-0 libcups2 libdbus-1-3 libgdk-pixbuf2.0-0
libnspr4 libnss3 libx11-xcb1 libxcomposite1 libxdamage1 libxrandr2
xdg-utils libgbm1
# Download and install Chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
sudo apt --fix-broken install -y
# Verify installation
google-chrome --versionЗатем установите соответствующий ChromeDriver:
# Get your Chrome version number first
CHROME_VERSION=$(google-chrome --version | grep -oP 'd+.d+.d+.d+')
CHROME_MAJOR=$(echo $CHROME_VERSION | cut -d. -f1)
# Download matching ChromeDriver
wget "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_MAJOR}" -O latest_release
DRIVER_VERSION=$(cat latest_release)
wget "https://chromedriver.storage.googleapis.com/${DRIVER_VERSION}/chromedriver_linux64.zip"
unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/local/bin/
sudo chmod +x /usr/local/bin/chromedriverШаг 1 — Создайте своего бота Telegram с помощью BotFather
Каждый бот Telegram начинается с BotFather — официального бота Telegram для регистрации и управления ботами.
1.1 Откройте Telegram и найдите @BotFather (ищите проверенную синюю галочку).
1.2 Начните разговор и отправьте команду:
/newbot1.3 Следуйте подсказкам:
- Введите отображаемое имя для вашего бота (например,
IP Blacklist Monitor) - Введите уникальное имя пользователя, заканчивающееся на
bot(например,ip_blacklist_monitor_bot)
1.4 BotFather ответит сообщением подтверждения, похожим на:
Done! Congratulations on your new bot.
You will find it at t.me/ip_blacklist_monitor_bot.
Use this token to access the HTTP API:
7123456789:AAFxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Keep your token secure and store it safely — it can be used by anyone to control your bot.Скопируйте и сохраните этот API токен в безопасном месте. Он понадобится вам на следующем шаге. Никогда не добавляйте его в открытый репозиторий.
Step 2 — Write the Bot Code
На вашем VPS создайте новый файл Python:
nano ~/my_bot.pyВставьте следующий полный, готовый к производству код:
import asyncio
import time
from aiogram import Bot, Dispatcher, F
from aiogram.filters import CommandStart
from aiogram.types import Message
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
# ─── Configuration ────────────────────────────────────────────────────────────
BOT_TOKEN = 'YOUR_BOT_TOKEN_HERE' # Replace with your BotFather token
# ──────────────────────────────────────────────────────────────────────────────
bot = Bot(BOT_TOKEN)
dp = Dispatcher()
def get_chrome_driver():
"""Initialize a headless Chrome driver for server environments."""
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--window-size=1920,1080')
return webdriver.Chrome(options=chrome_options)
def get_results(ip: str) -> list:
"""
Use Selenium to check an IPv4 address against blacklists via MXToolbox.
Returns a list of [status, blacklist_name] pairs.
"""
results = []
driver = get_chrome_driver()
try:
# Navigate to MXToolbox blacklist checker
url = f"https://mxtoolbox.com/SuperTool.aspx?action=blacklist%3a{ip}&run=toolpage"
driver.get(url)
time.sleep(6) # Allow the page and results to fully load
# Locate the IP input field and submit the query
input_field = driver.find_element(By.NAME, 'ctl00$ContentPlaceHolder1$txtInput2')
input_field.clear()
input_field.send_keys(ip)
time.sleep(3)
search_button = driver.find_element(By.ID, 'btnAction3')
search_button.click()
time.sleep(6) # Wait for results to render
# Scrape up to 60 status and name columns
status_results = driver.find_elements(By.CLASS_NAME, 'table-column-Status')[:60]
name_results = driver.find_elements(By.CLASS_NAME, 'table-column-Name')[:60]
if len(status_results) == len(name_results):
for status, name in zip(status_results, name_results):
results.append([status.text, name.text])
else:
print(f"[WARNING] Status/name count mismatch for IP: {ip}")
except Exception as e:
print(f"[ERROR] Failed to retrieve results for {ip}: {e}")
finally:
driver.quit()
return results
@dp.message(CommandStart())
async def handle_start(message: Message):
"""Handle the /start command — greet the user and explain usage."""
await message.answer(
f"👋 Hello, {message.from_user.first_name}!nn"
f"Send me any IPv4 address and I will check it against major spam blacklists.nn"
f"Example: <code>192.168.1.1</code>",
parse_mode="HTML"
)
@dp.message(F.text)
async def handle_ip_check(message: Message):
"""Receive an IP address, run the blacklist check, and return formatted results."""
ip = message.text.strip()
await message.answer(f"🔍 Checking <code>{ip}</code> against blacklists. Please wait...", parse_mode="HTML")
loop = asyncio.get_event_loop()
# Run the blocking Selenium call in a thread pool to avoid blocking the event loop
raw_results = await loop.run_in_executor(None, get_results, ip)
if not raw_results:
await message.answer("⚠️ No results returned. Please verify the IP address and try again.")
return
output_lines = []
blacklisted_count = 0
for status, name in raw_results:
if status.strip().upper() == 'OK':
output_lines.append(f"✅ {name}")
else:
output_lines.append(f"❌ {name}")
blacklisted_count += 1
summary = f"📊 <b>Results for {ip}</b>n"
summary += f"🚫 Listed on {blacklisted_count} blacklist(s)nn"
summary += "n".join(output_lines)
# Telegram messages have a 4096-character limit — split if necessary
if len(summary) > 4096:
for i in range(0, len(summary), 4096):
await message.answer(summary[i:i+4096], parse_mode="HTML")
else:
await message.answer(summary, parse_mode="HTML")
async def main():
print("✅ Bot is running. Listening for messages...")
await dp.start_polling(bot)
if __name__ == '__main__':
asyncio.run(main())Сохраните и выйдите (Ctrl+O, Enter, Ctrl+X в nano).
Шаг 3 — Безопасная настройка токена бота
Замените YOUR_BOT_TOKEN_HERE в скрипте на токен, полученный от BotFather. Для production-развертываний настоятельно рекомендуется использовать переменную окружения вместо жесткого кодирования токена:
export TELEGRAM_BOT_TOKEN="7123456789:AAFxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Затем обновите строку кода на:
import os
BOT_TOKEN = os.environ.get('TELEGRAM_BOT_TOKEN')Это предотвращает случайное раскрытие токена, если ваш код когда-либо будет общим или версионирован.
Шаг 4 — Запуск бота как фонового сервиса
Чтобы бот продолжал работать после закрытия SSH сессии, настройте его как systemd сервис:
sudo nano /etc/systemd/system/ipblacklist-bot.serviceВставьте следующую конфигурацию:
[Unit]
Description=IPv4 Blacklist Monitor Telegram Bot
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root
ExecStart=/usr/bin/python3 /root/my_bot.py
Restart=on-failure
RestartSec=10
Environment="TELEGRAM_BOT_TOKEN=YOUR_BOT_TOKEN_HERE"
[Install]
WantedBy=multi-user.targetВключите и запустите сервис:
sudo systemctl daemon-reload
sudo systemctl enable ipblacklist-bot
sudo systemctl start ipblacklist-bot
# Verify it is running
sudo systemctl status ipblacklist-botВаш бот теперь будет автоматически перезапускаться при сбое и запускаться при каждой перезагрузке сервера.
Шаг 5 — Протестируйте бота
- Откройте Telegram и найдите своего бота по его имени пользователя
- Отправьте
/start— вы должны получить приветственное сообщение - Отправьте любой IPv4 адрес (например,
8.8.8.8) - В течение 15–20 секунд вы получите отформатированный список, показывающий, в каких черных списках указан IP (❌) и какие он прошел (✅)
Обзор архитектуры кода
| Компонент | Роль |
|---|---|
aiogram | Асинхронный фреймворк Telegram Bot API — обрабатывает маршрутизацию сообщений и опрос |
Selenium + Chrome | Headless браузер, который отображает и парсит результаты MXToolbox |
get_chrome_driver() | Настраивает Chrome для работы в режиме headless на сервере |
get_results(ip) | Основная функция скрейпинга — переходит на MXToolbox и извлекает данные статуса |
handle_start() | Отвечает на /start с инструкциями по использованию |
handle_ip_check() | Получает ввод IP, запускает проверку асинхронно, возвращает отформатированный результат |
run_in_executor() | Переносит блокирующий вызов Selenium в пул потоков, сохраняя асинхронный цикл отзывчивым |
systemd сервис | Обеспечивает постоянное выполнение бота и автоматический перезапуск при сбое |
Соображения безопасности и соответствия
Запуск бота, взаимодействующего с внешними сервисами с VPS, несет определенные обязательства:
- Защитите токен вашего бота — относитесь к нему как к паролю. Немедленно замените его через BotFather в случае компрометации.
- Проверяйте пользовательский ввод — добавьте проверку формата IP-адреса перед передачей пользовательского ввода в Selenium, чтобы предотвратить неожиданное поведение.
- Ограничение частоты запросов — рассмотрите возможность добавления ограничений частоты запросов для каждого пользователя, чтобы предотвратить злоупотребление вашим ботом и ресурсами сервера.
- Поддерживайте зависимости в актуальном состоянии — регулярно обновляйте
aiogram,seleniumи Chrome для устранения уязвимостей безопасности. - Защитите VPS брандмауэром — ограничьте входящие порты только необходимыми (SSH и исходящие соединения вашего бота).
Если ваша инфраструктура также обрабатывает электронную почту, сочетание этого бота с надлежащим образом защищенной почтовой средой является обязательным. AlexHost Email Hosting предоставляет управляемую среду, соответствующую политике защиты от спама, которая снижает риск попадания ваших IP-адресов отправки в черные списки с самого начала.
Для проектов, требующих SSL-защищенного домена наряду с инфраструктурой вашего бота, AlexHost SSL Certificates и Domain Registration упрощают установку полностью доверенного веб-присутствия.
Политика AlexHost в отношении спама и черных списков
AlexHost применяет строгую политику запрета спама во всей своей сети. Любая деятельность, приводящая к добавлению IP в черный список — включая массовые нежелательные письма, спам на форумах или злоупотребления, отмеченные Spamhaus, SpamCop, StopForumSpam, Blocklist.de или аналогичными базами данных — строго запрещена. Услуги, нарушающие эту политику, немедленно приостанавливаются для защиты целостности инфраструктуры общей сети и репутации всех клиентов.
Это делает активный мониторинг с помощью инструмента, описанного в этом руководстве, не просто полезным, а необходимым для ответственной работы сервера.
Расширение бота — идеи для будущего развития
После того как ваш базовый бот запущен, рассмотрите эти улучшения:
- Запланированный мониторинг — используйте
apschedulerдля автоматической проверки IP-адресов вашего сервера каждые 6 или 24 часа и оповещения вас только при обнаружении нового листинга - Пакетные проверки нескольких IP — принимайте список IP-адресов, разделённых запятыми, в одном сообщении
- Постоянное логирование — сохраняйте результаты проверок в базе данных SQLite или PostgreSQL для анализа исторических тенденций
- Режим webhook — переключитесь с долгого опроса на webhooks для снижения задержки и уменьшения нагрузки на сервер
- Дополнительные источники данных — интегрируйте API от AbuseIPDB или Spamhaus напрямую для получения более авторитетных результатов без автоматизации браузера
Заключение
Создание Telegram-бота для мониторинга IPv4 черных списков — это практичный проект автоматизации высокой ценности, который любой системный администратор или разработчик может завершить за один день. С Python, aiogram и Selenium на AlexHost VPS вы получаете постоянный, отзывчивый инструмент мониторинга, который доставляет результаты прямо на ваш Telegram-клиент — никаких панелей управления для проверки, никаких ручных поисков не требуется.
Проактивное управление репутацией IP защищает доставляемость вашей электронной почты, доверие ваших клиентов и бесперебойность работы вашего сервиса. Разверните этого бота сегодня, держите ваши зависимости в актуальном состоянии и расширяйте его со временем по мере роста ваших потребностей в мониторинге.
на всех хостинговых услугах