Немного теории
Публичные спам-базы или «черные списки» IP адресов содержат информацию об IP, которые по каким-либо причинам были признаны недружественными по отношению к пользователям. Не будем углубляться в технологические тонкости; важно, что почтовые программы и сервисы используют информацию из этих и собственных баз для того, чтобы защищать электронные ящики получателей от нежелательной рассылки, от спама.
Суть проблемы
Если ваш IP адрес попал в черный список – адресаты не будут получать ваши электронные письма.
Попадание IP в публичные спам-базы грозит наступлением корпоративного почтового коллапса. Это неприятно, даже если e-mail адресов на домене всего 5 и всех пользователей можно временно «пересадить» на «обычную» почту на Яндексе или Mail.ru. Но, когда к внутреннему почтовому серверу «приколочены» более 50 ящиков, интегрированных с CRM-системой, проблема приобретает катастрофический характер.
Решение
«Знать, чтобы предвидеть; предвидеть, чтобы управлять». О. Конт
Вычислить надвигающуюся угрозу можно и нужно до того, как клиент ощутит на себе карательные меры почтовых серверов, а отдел продаж в панике совершит коллективное линчевание местного админа. Для этого мы создали скрипт автоматического мониторинга IP, оповещающий пользователя о возможных проблемах. В качестве платформы мониторинга выбрали Powershell, а для оповещения использовали zabbix 2.4.
Немного о создании скрипта
Наиболее очевидным вариантом казался парсинг веб страниц известных поисковых систем IP в базах mxtoolbox и 2ip.ru. Для решения этой задачи – использовались технологии .NET и XPATH – наиболее эффективное средство для парсинга XML и WEB, особенно для ненавистников регулярных выражений. Первый блин, в некотором роде, получился комом и после долгого и изнурительного тестирования мы решили отказаться от этого решения. Причиной послужила, прежде всего, зависимость от стороннего сервиса: если создатели площадки поменяют структуру кода, то в лучшем случае нужно будет заново тестировать ПО, в худшем – переписывать код.
После тщательного анализа существующих в данной области технологий и наработок мы пришли к более интересному и практичному решению. Разработка ПО на базе powershell 3.0, которое будет самостоятельно проверять наличие IP в публичных спам-базах.
Как работает?
Проверка IP адреса на факт наличия в черном списке (DNSBL) проводится следующим образом: указывается проверяемый IP в нотации DNS PTR (то есть наоборот «спереди назад») и добавляется имя домена DNSBL сервера. Если ответ от сервера получен, то проверяемый адрес заблокирован: то есть IP замечен в одном или нескольких черных списках. Вне зависимости от специфики ответа (он может быть любым), сам его факт говорит о том, что IP находится в спам-базе.
<#
Функция zabbix для отправки данных. Данная функция принимает на вход параметры:
Key - имя ключа, который создается в элементе данных zabbix
Также необходимо задать переменные
$Zabbix_send = указать где находится утилита zabbix_sender
$zabbix_port = порт zabbix сервера
$zabbix_server = адрес zabbix сервера
$zabbix_host = Имя созданого узла сети в zabbix (чувствителен к регистру)
#>
Function Send_Zabbix {
param (
[parameter(mandatory=$true)]
$key,
[parameter(mandatory=$true)]
[int64]$value
)
$Zabbix_send = "C:\zabbix_sender.exe"
$zabbix_port = "10051"
$zabbix_server = "10.0.33.31"
$zabbix_host = "Blacklistcheck"
echo "$key : $value"
$cmd = "$Zabbix_send -z $zabbix_server -p $zabbix_port -s $zabbix_host -k `"$key`" -o $value"
echo "$cmd"
Invoke-Expression $cmd
}
# Место хранения списка адресов для проверки, в формате name,ip
$FilePath = "D:\powershell\blacklist.csv"
# импортируем список в текстовый массив
$iparr = Import-Csv $FilePath
foreach ($ipaddr in $iparr)
{
[string]$IP = $ipaddr.adress
[string]$organization = $ipaddr.organization
$reversedIP = ($IP -split '\.')[3..0] -join '.'
# заготовленый список спамбаз, по которым будет проходить проверка
$blacklistServers = @(
"b.barracudacentral.org";
"bl.deadbeef.com";
"bl.emailbasura.org";
"bl.spamcannibal.org";
"bl.spamcop.net";
"blackholes.five-ten-sg.com";
"blacklist.woody.ch";
"bogons.cymru.com";
"cbl.abuseat.org";
"cdl.anti-spam.org.cn";
"combined.abuse.ch";
"combined.rbl.msrbl.net";
"db.wpbl.info";
"dnsbl-1.uceprotect.net";
"dnsbl-2.uceprotect.net";
"dnsbl-3.uceprotect.net";
"dnsbl.cyberlogic.net";
"dnsbl.inps.de";
"dnsbl.njabl.org";
"dnsbl.sorbs.net";
"drone.abuse.ch";
"drone.abuse.ch";
"duinv.aupads.org";
"dul.dnsbl.sorbs.net";
"dul.ru";
"dyna.spamrats.com";
"dynip.rothen.com";
"http.dnsbl.sorbs.net";
"images.rbl.msrbl.net";
"ips.backscatterer.org";
"ix.dnsbl.manitu.net";
"korea.services.net";
"misc.dnsbl.sorbs.net";
"noptr.spamrats.com";
"ohps.dnsbl.net.au";
"omrs.dnsbl.net.au";
"orvedb.aupads.org";
"osps.dnsbl.net.au";
"osrs.dnsbl.net.au";
"owfs.dnsbl.net.au";
"owps.dnsbl.net.au";
"pbl.spamhaus.org";
"phishing.rbl.msrbl.net";
"probes.dnsbl.net.au";
"proxy.bl.gweep.ca";
"proxy.block.transip.nl";
"psbl.surriel.com";
"rbl.interserver.net";
"rdts.dnsbl.net.au";
"relays.bl.gweep.ca";
"relays.bl.kundenserver.de";
"relays.nether.net";
"residential.block.transip.nl";
"ricn.dnsbl.net.au";
"rmst.dnsbl.net.au";
"sbl.spamhaus.org";
"short.rbl.jp";
"smtp.dnsbl.sorbs.net";
"socks.dnsbl.sorbs.net";
"spam.abuse.ch";
"spam.dnsbl.sorbs.net";
"spam.rbl.msrbl.net";
"spam.spamrats.com";
"spamlist.or.kr";
"spamrbl.imp.ch";
"t3direct.dnsbl.net.au";
"tor.dnsbl.sectoor.de";
"torserver.tor.dnsbl.sectoor.de";
"ubl.lashback.com";
"ubl.unsubscore.com";
"virbl.bit.nl";
"virus.rbl.jp";
"virus.rbl.msrbl.net";
"web.dnsbl.sorbs.net";
"wormrbl.imp.ch";
"xbl.spamhaus.org";
"zen.spamhaus.org";
"zombie.dnsbl.sorbs.net"
)
$blacklistedOn = @()
foreach ($server in $blacklistServers)
{
$fqdn = "$reversedIP.$server"
try
{
$null = [System.Net.Dns]::GetHostEntry($fqdn)
$blacklistedOn += $server
}
catch { }
}
if ($blacklistedOn.Count -gt 0)
{
Write-Host "$organization is blacklisted on the following servers: $($blacklistedOn -join ', ')"
send_zabbix -key $organization -value 1
}
else
{
Write-Host "$organization is not currently blacklisted on any server."
send_zabbix -key $organization -value 0
}
}
В zabbix данные передаются через траппер. Для использования элемента данных траппера мы должны:
— иметь в Zabbix настроенный элемент данных траппер
— отправлять данные в Zabbix.
Создадим хост blacklistcheck:
Теперь необходимо настроить траппер:
Создаем элемент данных.
Имя – может быть любым
Ключ – основной элемент при создании траппера, данный элемент имеет зависимость от регистра. Ключ KEY и key это два разных ключа.
Тип информации: есть 3 варианта, подходящие под нашу задачу: число, символ или текст. Но, поскольку мы исключили регулярные выражения, то текстовым массивам предпочли целочисленное значение.
Тип данных – логический; нам важно 2 значения IP: присутствует (1), либо не присутствует в спам-листах (0).
Отображение значений можно оставить как есть, а можно создать свое преобразование, примерно следующего содержания: 1= ip is listing, 0 = ip isn`t listing – на работу скрипта данные значения не влияют, зато визуализация информации в zabbix получается интересной.
После этого элемент данных готов принимать значения. Можно выполнить проверку через программу zabbix_sender.
В случае корректной работы будет получен подобный результат:
zabbix_sender.exe [14276]: DEBUG: answer [{«response»:«success»,«info»:«processe
d: 1; failed: 0; total: 1; seconds spent: 0.000066»}]
info from server: «processed: 1; failed: 0; total: 1; seconds spent: 0.000066»
sent: 1; skipped: 0; total: 1
Для просмотра диагностических данных используется параметр –vv.
Скорость проверки одного IP составляет не более 3-х минут.
Далее необходимо настроить триггер для оповещения.
Имя можно задать любое. Выражение соответствует изменению состояния элемента данных с 0 на 1. В случае срабатывания триггера в основной панели zabbix появится оповещение.
Практика использования
Мы создали компактный, хорошо работающий скрипт, который автоматически оповещает клиента о возможных проблемах в работе почтовой системы. Согласитесь, что профилактика этого вопроса куда приятнее и спокойнее по сравнению с необходимостью решать задачу «отвалившейся» почты в условиях цейтнота.
Мы внедрили данное решение у наших клиентов, и оно хорошо себя показывает – особенно в компаниях, где отдел продаж работает через рассылку коммерческих. Данный скрипт позволяет быстро локализовать проблему, вызвавшую попадание IP в спам-базу, и без ущерба продолжить работу.
Желаем, чтобы количество взлётов электронных писем совпадало с количеством приземлений!
Комментарии (8)
TaHKucT
20.09.2015 04:50+3Почти тоже самое, но на bash#!/usr/bin/env bash if [ -z $1 ]; then echo -e "IP is unset\nrun \"$0 ip\""; exit 1 ; fi IFS='.' read -ra ADDR <<< $1 Blacklist=("b.barracudacentral.org" "bl.deadbeef.com" "bl.emailbasura.org" "bl.spamcannibal.org" "bl.spamcop.net" "blackholes.five-ten-sg.com" "blacklist.woody.ch" "bogons.cymru.com" "cbl.abuseat.org" "cdl.anti-spam.org.cn" "combined.abuse.ch" "combined.rbl.msrbl.net" "db.wpbl.info" "dnsbl-1.uceprotect.net" "dnsbl-2.uceprotect.net" "dnsbl-3.uceprotect.net" "dnsbl.cyberlogic.net" "dnsbl.inps.de" "dnsbl.njabl.org" "dnsbl.sorbs.net" "drone.abuse.ch" "drone.abuse.ch" "duinv.aupads.org" "dul.dnsbl.sorbs.net" "dul.ru" "dyna.spamrats.com" "dynip.rothen.com" "http.dnsbl.sorbs.net" "images.rbl.msrbl.net" "ips.backscatterer.org" "ix.dnsbl.manitu.net" "korea.services.net" "misc.dnsbl.sorbs.net" "noptr.spamrats.com" "ohps.dnsbl.net.au" "omrs.dnsbl.net.au" "orvedb.aupads.org" "osps.dnsbl.net.au" "osrs.dnsbl.net.au" "owfs.dnsbl.net.au" "owps.dnsbl.net.au" "pbl.spamhaus.org" "phishing.rbl.msrbl.net" "probes.dnsbl.net.au" "proxy.bl.gweep.ca" "proxy.block.transip.nl" "psbl.surriel.com" "rbl.interserver.net" "rdts.dnsbl.net.au" "relays.bl.gweep.ca" "relays.bl.kundenserver.de" "relays.nether.net" "residential.block.transip.nl" "ricn.dnsbl.net.au" "rmst.dnsbl.net.au" "sbl.spamhaus.org" "short.rbl.jp" "smtp.dnsbl.sorbs.net" "socks.dnsbl.sorbs.net" "spam.abuse.ch" "spam.dnsbl.sorbs.net" "spam.rbl.msrbl.net" "spam.spamrats.com" "spamlist.or.kr" "spamrbl.imp.ch" "t3direct.dnsbl.net.au" "tor.dnsbl.sectoor.de" "torserver.tor.dnsbl.sectoor.de" "ubl.lashback.com" "ubl.unsubscore.com" "virbl.bit.nl" "virus.rbl.jp" "virus.rbl.msrbl.net" "web.dnsbl.sorbs.net" "wormrbl.imp.ch" "xbl.spamhaus.org" "zen.spamhaus.org" "zombie.dnsbl.sorbs.net") for i in "${Blacklist[@]}"; do echo ${ADDR[3]}.${ADDR[2]}.${ADDR[1]}.${ADDR[0]}.$i ; done | xargs -L1 -P${#Blacklist[@]} host -W5 | grep -v 'not found\|connection timed out' | wc -l
TaHKucT
20.09.2015 05:36+1Я вспомнил за что я не люблю баш, и почему я обычно не пишу на нем больше 5 строк. Вариант выше я тестировал на убунте, а zabbix-server у меня на centos6, и там все сломалось в районе 3тей строки кода.
Исправленный вариант, проверенный на Centos6(bash 4.1.2) и mint17.1(bash 4.3.11)#!/usr/bin/env bash if [ -z $1 ]; then echo -e "IP is unset\nrun \"$0 ip\""; exit 1 ; fi IFS='.' ADDR=($1) IFS=' ' Blacklist=("b.barracudacentral.org" "bl.deadbeef.com" "bl.emailbasura.org" "bl.spamcannibal.org" "bl.spamcop.net" "blackholes.five-ten-sg.com" "blacklist.woody.ch" "bogons.cymru.com" "cbl.abuseat.org" "cdl.anti-spam.org.cn" "combined.abuse.ch" "combined.rbl.msrbl.net" "db.wpbl.info" "dnsbl-1.uceprotect.net" "dnsbl-2.uceprotect.net" "dnsbl-3.uceprotect.net" "dnsbl.cyberlogic.net" "dnsbl.inps.de" "dnsbl.njabl.org" "dnsbl.sorbs.net" "drone.abuse.ch" "drone.abuse.ch" "duinv.aupads.org" "dul.dnsbl.sorbs.net" "dul.ru" "dyna.spamrats.com" "dynip.rothen.com" "http.dnsbl.sorbs.net" "images.rbl.msrbl.net" "ips.backscatterer.org" "ix.dnsbl.manitu.net" "korea.services.net" "misc.dnsbl.sorbs.net" "noptr.spamrats.com" "ohps.dnsbl.net.au" "omrs.dnsbl.net.au" "orvedb.aupads.org" "osps.dnsbl.net.au" "osrs.dnsbl.net.au" "owfs.dnsbl.net.au" "owps.dnsbl.net.au" "pbl.spamhaus.org" "phishing.rbl.msrbl.net" "probes.dnsbl.net.au" "proxy.bl.gweep.ca" "proxy.block.transip.nl" "psbl.surriel.com" "rbl.interserver.net" "rdts.dnsbl.net.au" "relays.bl.gweep.ca" "relays.bl.kundenserver.de" "relays.nether.net" "residential.block.transip.nl" "ricn.dnsbl.net.au" "rmst.dnsbl.net.au" "sbl.spamhaus.org" "short.rbl.jp" "smtp.dnsbl.sorbs.net" "socks.dnsbl.sorbs.net" "spam.abuse.ch" "spam.dnsbl.sorbs.net" "spam.rbl.msrbl.net" "spam.spamrats.com" "spamlist.or.kr" "spamrbl.imp.ch" "t3direct.dnsbl.net.au" "tor.dnsbl.sectoor.de" "torserver.tor.dnsbl.sectoor.de" "ubl.lashback.com" "ubl.unsubscore.com" "virbl.bit.nl" "virus.rbl.jp" "virus.rbl.msrbl.net" "web.dnsbl.sorbs.net" "wormrbl.imp.ch" "xbl.spamhaus.org" "zen.spamhaus.org" "zombie.dnsbl.sorbs.net") for i in "${Blacklist[@]}"; do echo ${ADDR[3]}.${ADDR[2]}.${ADDR[1]}.${ADDR[0]}.$i ; done | xargs -L1 -P${#Blacklist[@]} host -W5 | grep -v 'not found\|connection timed out' | wc -l
socialfnby
22.09.2015 15:12Вариант написанный на bash так же есть, ваш метод немного элегантней. Почему оставили у себя на powershell есть несколько причин:
1. Огромное количество ресурсов которые мониторятся в zabbix, дополнительной нагрузки решили по возможности избегать
2. Есть пара компьютеров которые выполняют систематические работы и находятся под наблюдением, выполняют данный скрипт и отправляют данные в zabbix
3. Банальная любовь к powershell.
Так же опубликовали метод с PS для простого и понятного принципа работы трапера.TaHKucT
22.09.2015 19:46- Там 80 dns-запросов на 1 проверяемый ip. Допустим у нас стоит проверка каждого ip раз в час, а адресов у нас всего 1000, тогда это вызовет дополнительно ~22 dns-запроса в секунду, причем не рекурсивых, а к локальному резолверу. Если это создаст заметную нагрузку на zabbix-server, то где то раньше что то пошло не так и оптимизировать нужно «там», а не «тут»
- К сожалению не у всех владельцев zabbix'а есть дополнительный windows сервере, на который можно было бы повесить эту проверку.
nefelim4ag
24.09.2015 15:42+1Полноценный скрипт, с автодискавери и прочими плюшками, должно работать на всём где есть bash
Опрашивает 100500 хостов, можно руками указывать у какого DNS спрашивать, встроенный balance RR по DNS серверам и т.п.
Шаблон в заббиксе придумать можно самому
Заголовок спойлера#!/bin/bash
blacklist_servers_fast=(
zen.spamhaus.org dnsbl-0.uceprotect.net
dnsbl-1.uceprotect.net dnsbl-2.uceprotect.net
dnsbl-3.uceprotect.net bl.blocklist.de
)
blacklist_servers_full=(
${blacklist_servers_fast[@]}
0spam.fusionzero.com 0spam-killlist.fusionzero.com
0spamtrust.fusionzero.com 0spamurl.fusionzero.com
abuse.rfc-clueless.org access.redhawk.org
accredit.habeas.com all.dnsbl.bit.nl
all.rbl.jp all.s5h.net
all.spamrats.com aspews.ext.sorbs.net
backscatter.spameatingmonkey.net badconf.rhsbl.sorbs.net
badhost.stopspam.org badnets.spameatingmonkey.net
bad.psky.me b.barracudacentral.org bb.barracudacentral.org
bitonly.dnsbl.bit.nl blacklist.sci.kun.nl
bl.drmx.org bl.emailbasura.org
bl.konstant.no bl.mailspike.net
bl.mav.com.br bl.nszones.com
block.dnsbl.sorbs.net block.stopspam.org
bl.scientificspam.net bl.score.senderscore.com
bl.spamcannibal.org bl.spamcop.net
bl.spameatingmonkey.net bl.spamstinks.com
bl.suomispam.net bogons.cymru.com
bogusmx.rfc-clueless.org bsb.empty.us
bsb.spamlookup.net cbl.abuseat.org
cbl.anti-spam.org.cn cblless.anti-spam.org.cn
cblplus.anti-spam.org.cn cdl.anti-spam.org.cn
cidr.bl.mcafee.com cml.anti-spam.org.cn
combined.rbl.msrbl.net contacts.abuse.net
dnsbl.anticaptcha.net dnsbl.aspnet.hu
dnsblchile.org dnsbl.cobion.com
dnsbl.dronebl.org dnsbl.inps.de
dnsbl.justspam.org dnsbl.kempt.net
dnsbl.madavi.de dnsbl.net.ua
dnsbl.openresolvers.org dnsbl.othello.ch
dnsbl.proxybl.org dnsbl.rizon.net
dnsbl.rv-soft.info dnsbl.rymsho.ru
dnsbl.sorbs.net dnsbl.spam-champuru.livedoor.com
dnsbl.stopspam.org dnsbl.tornevall.org
dnsbl.webequipped.com dnsbl.zapbl.net
dnsrbl.org dnsrbl.swinog.ch
dnswl.inps.de dob.sibl.support-intelligence.net
dsn.rfc-clueless.org dul.dnsbl.sorbs.net
dul.pacifier.net dyna.spamrats.com
dyndns.rbl.jp dynip.rothen.com
dyn.nszones.com elitist.rfc-clueless.org
escalations.dnsbl.sorbs.net eswlrev.dnsbl.rediris.es
ex.dnsbl.org exitnodes.tor.dnsbl.sectoor.de
feb.spamlab.com fnrbl.fast.net forbidden.icm.edu.pl
free.v4bl.org fresh10.spameatingmonkey.net
fresh15.spameatingmonkey.net fresh.spameatingmonkey.net
fulldom.rfc-clueless.org gl.suomispam.net
hil.habeas.com blacklist.woody.ch
http.dnsbl.sorbs.net hul.habeas.com
iadb2.isipp.com iadb.isipp.com
iddb.isipp.com images.rbl.msrbl.net
in.dnsbl.org ipbl.zeustracker.abuse.ch
ips.backscatterer.org ips.whitelisted.org
ip.v4bl.org ispmx.pofon.foobar.hu
ix.dnsbl.manitu.net korea.services.net
l1.apews.org l1.bbfh.ext.sorbs.net
l2.bbfh.ext.sorbs.net l3.bbfh.ext.sorbs.net
l4.bbfh.ext.sorbs.net list.anonwhois.net list.bbfh.org
list.blogspambl.com list.dnswl.org list.quorum.to
lookup.dnsbl.iip.lu mail-abuse.blacklist.jippg.org
misc.dnsbl.sorbs.net mtawlrev.dnsbl.rediris.es
netblockbl.spamgrouper.to netbl.spameatingmonkey.net
netscan.rbl.blockedservers.com new.spam.dnsbl.sorbs.net
nobl.junkemailfilter.com nomail.rhsbl.sorbs.net
no-more-funn.moensted.dk noptr.spamrats.com
old.spam.dnsbl.sorbs.net orvedb.aupads.org
phishing.rbl.msrbl.net db.wpbl.info
plus.bondedsender.org pofon.foobar.hu
postmaster.rfc-clueless.org problems.dnsbl.sorbs.net
proxies.dnsbl.sorbs.net psbl.surriel.com
public.sarbl.org query.bondedsender.org
rbl2.triumf.ca rbl.abuse.ro rbl.blockedservers.com
rbl.dns-servicios.com rbl.efnet.org rbl.efnetrbl.org
rbl.fasthosts.co.uk rbl.interserver.net
rbl.iprange.net rbl.lugh.ch
rbl.megarbl.net rbl.rbldns.ru
rbl.schulte.org rbl.spamlab.com
rbl.talkactive.net recent.spam.dnsbl.sorbs.net
relays.bl.kundenserver.de multi.surbl.org
relays.dnsbl.sorbs.net relays.nether.net
rep.mailspike.net reputation-domain.rbl.scrolloutf1.com
reputation-ip.rbl.scrolloutf1.com reputation-ns.rbl.scrolloutf1.com
rhsbl.rymsho.ru rhsbl.scientificspam.net
rhsbl.sorbs.net rhsbl.zapbl.net
rsbl.aupads.org sa-accredit.habeas.com
safe.dnsbl.sorbs.net sbl.nszones.com
service.mailblacklist.com whitelist.surriel.com
service.mailwhitelist.com short.rbl.jp singlebl.spamgrouper.com
singular.ttk.pte.hu smtp.dnsbl.sorbs.net
socks.dnsbl.sorbs.net sohul.habeas.com
spam.dnsbl.anonmails.de spam.dnsbl.sorbs.net
spamguard.leadmon.net spamlist.or.kr
spam.pedantic.org spam.rbl.blockedservers.com
spamrbl.imp.ch spam.rbl.msrbl.net
spamsources.fabel.dk spam.spamrats.com
srn.surgate.net st.technovision.dk
tor.dan.me.uk tor.dnsbl.sectoor.de
tor.efnet.org torexit.dan.me.uk
truncate.gbudb.net trusted.nether.net
ubl.nszones.com ubl.unsubscore.com
unsure.nether.net uribl.abuse.ro
uri.blacklist.woody.ch uribl.pofon.foobar.hu
uribl.spameatingmonkey.net uribl.swinog.ch
uribl.zeustracker.abuse.ch urired.spameatingmonkey.net
url.rbl.jp v4.fullbogons.cymru.com
virbl.dnsbl.bit.nl virus.rbl.jp
virus.rbl.msrbl.net vote.drbl.caravan.ru
vote.drbldf.dsbl.ru vote.drbl.gremlin.ru
wadb.isipp.com wbl.triumf.ca
web.dnsbl.sorbs.net zombie.dnsbl.sorbs.net
web.rbl.msrbl.net whitelist.sci.kun.nl
whois.rfc-clueless.org wl.mailspike.net
wl.nszones.com work.drbl.caravan.ru
work.drbldf.dsbl.ru work.drbl.gremlin.ru
wormrbl.imp.ch z.mailspike.net
)
# Initialization
export action=$1
export ip=$2
# Use random DNS server, or use 4th arg as dns
DNS=(8.8.8.8 8.8.4.4)
num=$[$RANDOM%${#DNS[@]}]
export DNS=${4:-${DNS[$num]}}
a=$(echo $ip | cut -d'.' -f4) b=$(echo $ip | cut -d'.' -f3)
c=$(echo $ip | cut -d'.' -f2) d=$(echo $ip | cut -d'.' -f1)
export rev_ip="$a.$b.$c.$d"
WORK_DIR=/tmp/.zabbix.$(basename $0)/$ip/
mkdir -p $WORK_DIR
# 0 — server not in blacklist, 1 — if listened
in_blacklist(){
rev_ip=$1
blacklist_server=$2
ns_answer=$WORK_DIR/$rev_ip.$blacklist_server
host -W1 $rev_ip.$blacklist_server $DNS &> $ns_answer
echo $blacklist_server 0 > $ns_answer.status
grep 127.0.0.0 $ns_answer > /dev/null && return
grep 127. $ns_answer > /dev/null &&
echo $blacklist_server 1 > $ns_answer.status
}
get_alerted_blacklist_servers(){
for i in ${blacklist_servers[@]}; do
grep ' 1' $WORK_DIR/$rev_ip.$i.status | cut -d' ' -f1
done
}
cleanup_workdir(){ find $WORK_DIR/ -type f -delete; }
foreach(){ for i in $@; do echo $i; done }
DISCOVERY_STATUS=$WORK_DIR/.discovered
# General blacklists
if [ $action == «discovery» ]; then
mode=${3:-fast}
blacklist_servers=($(foreach ${blacklist_servers_fast[@]} | sort -u))
[ "$mode" == «full» ] &&
blacklist_servers=($(foreach ${blacklist_servers_full[@]} | sort -u))
cleanup_workdir
for blacklist_server in ${blacklist_servers[@]}; do
in_blacklist $rev_ip $blacklist_server &
done
wait
{
echo { \«data\»:[
for i in $(get_alerted_
ToxoT
dnsbl.ahbl.org, tor.ahbl.org
вот эти два думаю можно убрать из списка спам листов т.к на любой ip они возвращают результат.
socialfnby
Спасибо, исправил.