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
| Wymaganie | Minimalna wersja |
|---|---|
| Python | 3.7 lub wyższa |
| pip | Najnowsza stabilna |
| Google Chrome | Najnowsza stabilna |
| ChromeDriver | Pasująca wersja Chrome |
| OS | Ubuntu 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 --versionNastę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/chromedriverKrok 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:
/newbot1.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.pyWklej 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.serviceWklej 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.targetWłą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-botTwój bot będzie teraz automatycznie restartować się w przypadku awarii i uruchamiać się przy każdym restarcie serwera.
Krok 5 — Testowanie bota
- Otwórz Telegram i wyszukaj swojego bota po nazwie użytkownika
- Wyślij
/start— powinieneś otrzymać wiadomość powitalną - Wyślij dowolny adres IPv4 (np.
8.8.8.8) - 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
| Komponent | Rola |
|---|---|
aiogram | Asynchroniczny framework API Telegram Bot — obsługuje routing wiadomości i polling |
Selenium + Chrome | Headless 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 service | Zapewnia, ż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,seleniumi 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
apscheduleraby 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ą.
na wszystkich usługach hostingowych