Попадание IP-адреса в спам-листы может негативно повлиять на доставку писем и репутацию вашего сервера. Чтобы избежать этого, важно своевременно отслеживать статус адресов. В этой статье вы узнаете, как настроить мониторинг IP-адресов в спам-листах с помощью Zabbix, автоматизировать оповещения и защитить свои серверы.
В связи с тем, что Yandex и Mail сделали почтовые ящики для доменов платными, мне пришлось многие компании переводить на свои почтовые сервера. Из-за этого так же возникла необходимость контролировать IP-адреса, на которых расположены почтовые службы, на предмет попадания их в спам-листы. Для этого решил использовать Zabbix и скрипт на Python.
Подготовка скрипта
Создайте папку для внешних скриптов Zabbix (если папка есть, пропускайте этот шаг):
mkdir -p /usr/lib/zabbix/externalscripts
Создайте файл для нашего скрипта:
nano /usr/lib/zabbix/externalscripts/check_dnsbl.py
Далее вставьте код скрипта и сохраните файл:
#!/usr/bin/env python3
import socket
import sys
def check_dnsbl(ip, dnsbl_list):
"""Проверка IP-адреса в заданных DNSBL."""
reversed_ip = '.'.join(reversed(ip.split('.')))
listed_services = []
for dnsbl in dnsbl_list:
query = f"{reversed_ip}.{dnsbl}"
try:
socket.gethostbyname(query)
listed_services.append(dnsbl) # В спам-листе
except socket.gaierror:
pass # Не в спам-листе
return listed_services
def main(ip, dnsbl_list):
"""Основная функция для проверки IP-адреса."""
listed_services = check_dnsbl(ip, dnsbl_list)
if listed_services:
return f"IP {ip} найден в следующих DNSBL: {', '.join(listed_services)}"
else:
return f"IP {ip} не найден в DNSBL."
if __name__ == "__main__":
# Проверка наличия аргумента
if len(sys.argv) < 2:
print("Ошибка: Укажите IP-адрес для проверки.")
sys.exit(1)
# Получение IP из аргументов командной строки
ip_to_check = sys.argv[1]
# Список DNSBL для проверки
dnsbls = [
"zen.spamhaus.org",
"b.barracudacentral.org",
"cbl.abuseat.org",
"dnsbl.fabel.dk",
"hostkarma.junkemailfilter.com",
"bl.kempt.net",
"psbl.surriel.com",
"sbl.spamhaus.org",
"pbl.spamhaus.org",
"xbl.spamhaus.org",
"dnsbl.schulte.org",
"dnsbl.services.net",
"bl.spamcop.net",
"dnsbl-1.uceprotect.net",
"tor.dnsbl.sectoor.de",
"dnsbl.dronebl.org",
"singular.ttk.pte.hu",
"bl.mailspike.net",
"bl.backscatterer.org",
"dnsbl.interserver.net",
"v4.fullbogons.cymru.com",
"v6.fullbogons.cymru.com",
"bogons.cymru.com",
"truncate.gbudb.net",
"dnsbl.pedantic.org",
"all.anonmails.de",
"dyna.spamrats.com",
"noptr.spamrats.com",
"spam.spamrats.com",
"spamgrouper.to",
"dnsbl.abusero.org",
"dnsbl.jippg.org"
]
# Выполнение проверки
print(main(ip_to_check, dnsbls))
Далее даем скрипту права на выполнение:
chmod +x /usr/lib/zabbix/externalscripts/check_dnsbl.py
После этого проверяем его работу, запустив его в ручную:
/usr/lib/zabbix/externalscripts/check_dnsbl.py 203.0.113.1
Указывайте свой IP-адрес, который нужно мониторить
Если IP-адрес будет найден, то вывод будет примерно как на картинке ниже:

Настройка конфигурации Zabbix
Откройте файл конфигурации Zabbix-сервера:
nano /etc/zabbix/zabbix_server.conf
Найдите параметр ExternalScripts и убедитесь, что он указывает на папку со скриптами:
ExternalScripts=/usr/lib/zabbix/externalscripts
Сохраните изменения и перезапустите Zabbix-сервер:
systemctl restart zabbix-server
Создание элемента данных на мониторинг IP
Войдите в веб-интерфейс Zabbix.
Перейдите в Настройка → Узлы сети и выберите хост, на котором будет выполняться проверка (в нашем случае на Zabbix-сервере).
Выберите Элементы данных и нажмите Создать элемент данных:

Заполните элемент данных:
- Имя: Проверка спам-листов
- Тип: Внешняя проверка
- Ключ: check_dnsbl.py[203.0.113.1] — в скобках укажите свой ip-адрес
- Тип информации: Текст
- Интервал обновления: 1h
Должно получиться примерно как на картинке ниже:

Сохраняем наш элемент данных нажав кнопку Добавить и переходим к созданию триггера.
Создание триггера на мониторинг IP
Перейдите в Настройка → Узлы сети и выберите хост, на котором создали новый элемент данных (в нашем случае на Zabbix-сервере).
Выберите Триггеры и нажмите Создать триггер:

Укажите параметры триггера:
- Имя: IP в спам-листе
- Важность: установите какую вам необходимо
- Выражение: {Zabbix server:check_dnsbl.py[203.0.113.1].str(«не найден»)} = 0
Внимание!
Не забудьте в выражении в квадратных скобках указать свой ip-адрес, а вместо Zabbix server указать имя своего хоста
В итоге должно получиться примерно как на картинке ниже:

Для сохранения триггера нажмите Добавить.
Заключение
На этом настройка мониторинга ip-адреса на попадание в спам листы завершена. Теперь если ваш IP-адрес попадет в один из перечисленных в скрипте спам-листов, то вам придет уведомление об этом. Конечно, можно было бы воспользоваться какими-то сторонними сервисами, но зачем, если есть Zabbix? Это решение получилось достаточно простым и гибким: добавил нужные IP, получил автоматические проверки и, самое главное, сразу знаю, если что-то пошло не так. Если у вас тоже почтовый сервер или вы просто хотите держать руку на пульсе репутации своих IP, рекомендую попробовать этот метод.
Помогла статья? Подписывайся на Telegram канал автора.
Анонсы всех статей, много другой полезной и интересной информации, которая не попадает на сайт.
Если у вас имеются вопросы, задавайте их в комментариях.