Изградете собствения си Telegram Bot за наблюдение на IPv4 черни списъци на VPS
Поддържането на вашия IP адрес извън списъците със спам е критично за доставяемостта на имейли, репутацията на услугата и безпрекъснатите операции. Независимо дали управлявате mail server, 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 хранилище за бързо I/O, защита от DDoS на корпоративно ниво и пълен root достъп, така че можете да инсталирате Python, Selenium, браузърни драйвери и всякакви други инструменти без ограничения.
За разлика от споделени среди, където ограниченията на ресурсите могат да намалят производителността на вашия бот, специализиран VPS предоставя на вашето приложение последователно разпределение на CPU и RAM. Ако предпочитате управлявано преживяване с контролен панел, VPS с cPanel е също налично, което прави управлението на сървъра достъпно дори за тези, които не са толкова удобни с командния ред.
Предварителни изисквания
Преди да напишете един ред код, уверете се, че следното е налично на вашия сървър:
Системни изисквания
| Изисквание | Минимална версия |
|---|---|
| Python | 3.7 или по-висока |
| pip | Последна стабилна |
| Google Chrome | Последна стабилна |
| ChromeDriver | Съответстваща версия на Chrome |
| OS | 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 токен безопасно. Ще ви трябва в следващата стъпка. Никога не го публикувайте в публично хранилище.
Стъпка 2 — Напишете кода на бота
На вашия 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 — Конфигурирайте Bot Token Безопасно
Заменете YOUR_BOT_TOKEN_HERE в скрипта с токена, който получихте от BotFather. За production deployments, силно се препоръчва да използвате environment variable вместо да hardcode-вате токена:
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 | Async Telegram Bot API framework — управлява маршрутизацията на съобщения и polling |
Selenium + Chrome | Headless browser който визуализира и скрейпва резултатите от MXToolbox |
get_chrome_driver() | Конфигурира Chrome за headless server операция |
get_results(ip) | Основна функция за скрейпване — навигира MXToolbox и извлича данни за статуса |
handle_start() | Отговаря на /start с инструкции за използване |
handle_ip_check() | Получава IP вход, изпълнява проверката асинхронно, връща форматиран изход |
run_in_executor() | Прехвърля блокиращото Selenium повикване към thread pool, поддържайки async loop отзивчив |
systemd service | Гарантира, че ботът работи постоянно и се рестартира автоматично при неуспех |
Съображения за сигурност и съответствие
Пускането на бот, който взаимодейства с външни услуги от VPS, идва с отговорности:
- Защитете вашия токен на бот — третирайте го като парола. Ротирайте го незабавно чрез BotFather, ако е компрометиран.
- Валидирайте входните данни на потребителя — добавете валидация на формата на IP адреса, преди да предадете входните данни на потребителя на Selenium, за да предотвратите неочаквано поведение.
- Ограничение на честотата — разгледайте добавянето на ограничения на честотата за всеки потребител, за да предотвратите злоупотреба на вашия бот и ресурсите на вашия сървър.
- Поддържайте зависимостите актуални — редовно актуализирайте
aiogram,seleniumи Chrome, за да поправите уязвимости в сигурността. - Защитете вашия VPS с firewall — ограничете входящите портове само на необходимото (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 адресите защитава доставката на вашата електронна поща, доверието на вашите клиенти и времето на работа на вашата услуга. Разгърнете този бот днес, поддържайте вашите зависимости актуални и го разширявайте с течение на времето, докато вашите нужди за мониторинг растат.
от всички хостинг услуги