Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu: Skills Rozpocznij
Sekcja
Bezpieczeństwo Linux Serwery Wirtualne

Zbuduj Własnego Bota Telegram do Monitorowania Czarnych List IPv4 na VPS

Utrzymanie adresu IP poza listami spamu jest krytyczne dla dostarczalności poczty e-mail, reputacji usługi i niezakłóconego działania. Niezależnie od tego, czy prowadzisz serwer pocztowy, platformę SaaS czy aplikację internetową, pojedynczy wpis na liście czarnej może w ciszy zablokować wychodzące e-maile i podważyć zaufanie klientów z dnia na dzień. W tym kompleksowym przewodniku dowiesz się, jak zbudować i wdrożyć w pełni funkcjonalnego bota Telegram, który automatycznie sprawdza dowolny adres IPv4 względem głównych baz danych spamu — wszystko działające na niezawodnym VPS.

Dlaczego automatyzować monitorowanie czarnej listy IPv4?

Ręczne sprawdzanie czarnych list jest żmudne i łatwo zapomnieć. Automatyzując proces za pomocą bota Telegram, otrzymujesz:

  • Natychmiastowe sprawdzenia na żądanie — zapytaj o dowolny IP bezpośrednio z telefonu lub komputera
  • Informacje zwrotne w czasie rzeczywistym — wyniki dostarczone w Telegram w ciągu sekund
  • Zero narzutu infrastruktury — bot działa trwale na twoim serwerze w tle
  • Skalowalność — rozszerz bota później o zaplanowane alerty, integracje webhook lub sprawdzanie wielu IP w partii

IP umieszczony w bazach danych takich jak Spamhaus, SpamCop, StopForumSpam lub Blocklist.de może spowodować błędy dostarczania poczty e-mail, zawieszenie usług i uszkodzenie reputacji. Proaktywne monitorowanie jest znacznie tańsze niż reaktywna kontrola szkód.

Dlaczego wdrażać na VPS AlexHost?

Uruchomienie bota Telegram wymaga serwera, który pozostaje online 24/7, szybko reaguje i zapewnia pełny dostęp root do instalacji niestandardowych zależności. AlexHost VPS Hosting zapewnia dokładnie to — magazyn NVMe SSD dla szybkiego I/O, ochronę DDoS na poziomie przedsiębiorstwa i pełny dostęp root, dzięki czemu możesz instalować Python, Selenium, sterowniki przeglądarki i inne narzędzia bez ograniczeń.

W przeciwieństwie do środowisk współdzielonych, gdzie limity zasobów mogą ograniczać wydajność bota, dedykowany VPS zapewnia spójną alokację CPU i RAM dla aplikacji. Jeśli wolisz zarządzane doświadczenie panelu sterowania, dostępny jest również VPS z cPanel, co czyni zarządzanie serwerem dostępnym nawet dla osób mniej zaznajomionych z linią poleceń.

Wymagania wstępne

Przed napisaniem choćby jednej linii kodu upewnij się, że na Twoim serwerze znajduje się:

Wymagania systemowe

WymaganieMinimalna wersja
Python3.7 lub wyższa
pipNajnowsza stabilna
Google ChromeNajnowsza stabilna
ChromeDriverPasująca wersja Chrome
OSUbuntu 20.04+ / Debian 11+

Zainstaluj biblioteki Python

Połącz się z Twoim VPS przez SSH i uruchom następujące polecenia, aby zainstalować wymagane pakiety Python:

pip install selenium
pip install aiogram==3.4.1
  • Selenium — automatyzuje interakcje przeglądarki w celu pobrania wyników sprawdzenia czarnej listy z MXToolbox
  • aiogram 3.4.1 — nowoczesny, asynchroniczny framework Python dla Telegram Bot API

Zainstaluj Google Chrome i ChromeDriver (Headless)

Selenium wymaga prawdziwej przeglądarki do renderowania stron obciążonych JavaScript. Zainstaluj Chrome w trybie headless na Twoim serwerze 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

Następnie zainstaluj pasujący 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

Krok 1 — Utwórz swojego bota Telegram za pomocą BotFather

Każdy bot Telegram zaczyna się od BotFather — oficjalnego bota Telegram do rejestracji i zarządzania botami.

1.1 Otwórz Telegram i wyszukaj @BotFather (szukaj zweryfikowanego niebieskiego znacznika).

1.2 Rozpocznij rozmowę i wyślij polecenie:

/newbot

1.3 Postępuj zgodnie z instrukcjami:

  • Wpisz nazwę wyświetlaną dla swojego bota (np. IP Blacklist Monitor)
  • Wpisz unikalną nazwę użytkownika kończącą się na bot (np. ip_blacklist_monitor_bot)

1.4 BotFather odpowie wiadomością potwierdzającą podobną do:

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.

Skopiuj i bezpiecznie zapisz ten token API. Będziesz go potrzebować w następnym kroku. Nigdy nie commituj go do publicznego repozytorium.

Krok 2 — Napisz kod bota

Na swoim VPS utwórz nowy plik Python:

nano ~/my_bot.py

Wklej następujący kompletny, gotowy do produkcji kod:

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())

Zapisz i wyjdź (Ctrl+O, Enter, Ctrl+X w nano).

Krok 3 — Bezpieczne skonfigurowanie tokenu bota

Zastąp YOUR_BOT_TOKEN_HERE w skrypcie tokenem otrzymanym od BotFather. W przypadku wdrożeń produkcyjnych zdecydowanie zaleca się używanie zmiennej środowiskowej zamiast hardkodowania tokenu:

export TELEGRAM_BOT_TOKEN="7123456789:AAFxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Następnie zaktualizuj wiersz kodu na:

import os
BOT_TOKEN = os.environ.get('TELEGRAM_BOT_TOKEN')

Zapobiega to przypadkowemu ujawnieniu tokenu, jeśli Twój kod będzie kiedykolwiek udostępniony lub przechowywany w kontroli wersji.

Krok 4 — Uruchomienie Bota jako Usługi w Tle

Aby bot działał stale nawet po zamknięciu sesji SSH, skonfiguruj go jako usługę systemd:

sudo nano /etc/systemd/system/ipblacklist-bot.service

Wklej następującą konfigurację:

[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

Włącz i uruchom usługę:

sudo systemctl daemon-reload
sudo systemctl enable ipblacklist-bot
sudo systemctl start ipblacklist-bot

# Verify it is running
sudo systemctl status ipblacklist-bot

Twój bot będzie teraz automatycznie restartować się w przypadku awarii i uruchamiać się przy każdym restarcie serwera.

Krok 5 — Testowanie bota

  1. Otwórz Telegram i wyszukaj swojego bota po nazwie użytkownika
  2. Wyślij /start — powinieneś otrzymać wiadomość powitalną
  3. Wyślij dowolny adres IPv4 (np. 8.8.8.8)
  4. W ciągu 15–20 sekund otrzymasz sformatowaną listę pokazującą, na których czarnych listach znajduje się IP (❌) i które przeszły (✅)

Przegląd architektury kodu

KomponentRola
aiogramAsynchroniczny framework API Telegram Bot — obsługuje routing wiadomości i polling
Selenium + ChromeHeadless browser, który renderuje i scrape’uje wyniki MXToolbox
get_chrome_driver()Konfiguruje Chrome do operacji headless na serwerze
get_results(ip)Główna funkcja scrapingu — nawiguje MXToolbox i wyodrębnia dane statusu
handle_start()Odpowiada na /start z instrukcjami użytkowania
handle_ip_check()Otrzymuje dane wejściowe IP, uruchamia sprawdzenie asynchronicznie, zwraca sformatowane dane wyjściowe
run_in_executor()Przenosi blokujące wywołanie Selenium do puli wątków, utrzymując responsywność pętli asynchronicznej
systemd serviceZapewnia, że bot działa trwale i automatycznie restartuje się w przypadku awarii

Zagadnienia bezpieczeństwa i zgodności

Uruchamianie bota, który wchodzi w interakcję z usługami zewnętrznymi z VPS wiąże się z odpowiedzialnością:

  • Chroń token swojego bota — traktuj go jak hasło. Zmień go natychmiast za pośrednictwem BotFather w przypadku kompromitacji.
  • Waliduj dane wejściowe użytkownika — dodaj walidację formatu adresu IP przed przekazaniem danych wejściowych użytkownika do Selenium, aby zapobiec nieoczekiwanym zachowaniom.
  • Ograniczanie szybkości — rozważ dodanie limitów szybkości dla każdego użytkownika, aby zapobiec nadużyciu Twojego bota i zasobów serwera.
  • Utrzymuj zależności w aktualnym stanie — regularnie aktualizuj aiogram, selenium i Chrome, aby załatać luki w bezpieczeństwie.
  • Zabezpiecz VPS zaporą sieciową — ogranicz porty przychodzące tylko do niezbędnych (SSH i połączenia wychodzące Twojego bota).

Jeśli Twoja infrastruktura obsługuje również pocztę elektroniczną, sparowanie tego bota z prawidłowo zabezpieczonym środowiskiem pocztowym jest niezbędne. AlexHost Email Hosting zapewnia zarządzane, zgodne z polityką antyspamową środowisko, które zmniejsza ryzyko pojawienia się Twoich adresów IP na czarnych listach.

W przypadku projektów wymagających domeny zabezpieczonej SSL obok infrastruktury bota, AlexHost SSL Certificates i Domain Registration ułatwiają ustanowienie w pełni zaufanej obecności w sieci.

Polityka antyspamowa i czarna lista AlexHost

AlexHost egzekwuje ścisłą politykę zakazu spamu w całej swojej sieci. Każda aktywność, która powoduje umieszczenie IP na czarnej liście — w tym masowe niechciane wiadomości e-mail, spam na forach lub nadużycia flagowane przez Spamhaus, SpamCop, StopForumSpam, Blocklist.de lub podobne bazy danych — jest ściśle zabroniona. Usługi naruszające te zasady są niezwłocznie zawieszone w celu ochrony integralności infrastruktury sieci współdzielonej i reputacji wszystkich klientów.

To sprawia, że proaktywne monitorowanie za pomocą narzędzia takiego jak bot opisany w tym przewodniku jest nie tylko przydatne, ale niezbędne do odpowiedzialnej obsługi serwera.

Rozszerzanie bota — Pomysły na przyszły rozwój

Gdy Twój podstawowy bot będzie już działać, rozważ te ulepszenia:

  • Monitorowanie zaplanowane — użyj apscheduler aby automatycznie sprawdzać adresy IP Twojego serwera co 6 lub 24 godzin i alertować Cię tylko gdy zostanie wykryta nowa lista
  • Sprawdzanie wielu adresów IP w partii — akceptuj listę adresów IP oddzielonych przecinkami w jednej wiadomości
  • Trwałe logowanie — przechowuj wyniki sprawdzeń w bazie danych SQLite lub PostgreSQL do analizy trendów historycznych
  • Tryb webhook — przejdź z długiego sondowania na webhooks dla mniejszego opóźnienia i zmniejszonego obciążenia serwera
  • Dodatkowe źródła danych — integruj API z AbuseIPDB lub Spamhaus bezpośrednio dla bardziej wiarygodnych wyników bez automatyzacji przeglądarki

Podsumowanie

Budowanie bota Telegram do monitorowania czarnych list IPv4 to praktyczny projekt automatyzacji o wysokiej wartości, który każdy administrator systemu lub programista może ukończyć w ciągu popołudnia. Dzięki Python, aiogram i Selenium działającym na AlexHost VPS, otrzymujesz trwałe, responsywne narzędzie monitorowania, które dostarcza wyniki bezpośrednio do Twojego klienta Telegram — bez pulpitów do sprawdzenia, bez ręcznych wyszukiwań.

Proaktywne zarządzanie reputacją IP chroni dostarczalność Twoich wiadomości e-mail, zaufanie Twoich klientów i czas działania Twojej usługi. Wdróż tego bota dzisiaj, utrzymuj swoje zależności zaktualizowane i rozszerzaj go w miarę upływu czasu, gdy Twoje potrzeby monitorowania rosną.