И заключается он в том, чтобы обращаться к DNSBL напрямую. =)
Делается это просто, вот пример:
host -t TXT 4.3.2.1.xbl.spamhaus.org
тут 4.3.2.1 - это IP адрес задом наперед, а xbl.spamhaus.org - один из многочисленных DNSBL =)
В результате получим ответ:
Host 4.3.2.1.xbl.spamhaus.org not found: 3(NXDOMAIN)что говорит о том, что хост с IP адресом 1.2.3.4 в этой базе не числится.
А если сделаем такой запрос:
host -t TXT 79.35.217.90.xbl.spamhaus.orgто получит ответ:
79.35.217.90.xbl.spamhaus.org descriptive text "http://www.spamhaus.org/query/bl?ip=90.217.35.79"что явно указывает, что это IP адрес числится в спам базе. Даже ссылку дают, куда надо сходить в гости, чтобы тебя пожалели и удалили твой IP из этой спам базы :)
Человек по "имени" darkk (http://darkk.net.ru/) поделился со мной замечательной ссылкой http://www.robtex.com/. Замечательна она тем, что этот сайт знает более 100 DNSBL и, естественно, позволяет проверить свой IP. Но кому будет оходта заходить каждый день на этот сайт, вбивать свой IP и ждать результатов? Естественно хочется этот процесс как можно лучше автоматизировать и забыть про это дело. А вспоминать, только тогда, когда IP, какого-то фига, попал в какую-то спам базу.
Вот для этого я и написал этот скрипт.
Вот что он умеет:
Использование: spam-check [-u] [[-e] [-g] [-s]] | [-v] | [-q] -p IP [IP2 [... [IPn]]] spam-check -i input_file [-u] [[-e] [-g] [-s]] | [-v] | [-q] -p IP [IP2 [... [IPn]]] spam-check -a dnsbl [-u] [[-e] [-g] [-s]] | [-v] | [-q] -p IP [IP2 [... [IPn]]] spam-check -d [-u] -u - Разрешить запуск скрипта от root'а -e - Показывать сообщения об ошибках -g - Показывать успешные проверки (НЕ СПАМ) -s - Не показывать не успешные проверки (СПАМ) -v - Выводить все -q - Ничего не выводить -p - IP адрес (можно указывать несколько IP, через пробел) -i - Файл со списком dnsbl-серверов -a - Проверить по указанному dnsbl -d - Вывести список всех dnsbl-серверов -V - Вывести версию -h - Показать справку Особенности: 1. По умолчанию выводятся только не успешные проверки (СПАМ) 2. -g, -e и -s можно комбинировать. 3. -g, -e и -s нельзя использовать одновременно с -v и -q. 4. -v и -q одновременно использовать нельзя. 5. -p IP [IP2 [... [IPn]]] должен быть последним параметром. 6. -q абсолютно ничего не выводит. 7. Скрипт всегда возвращает следующие коды звершения: 0 - данного IP в спам базе нет; 1 - данный IP присутствует в спам базе; 255 - ошибка в параметре, запрошена справка/версия; ошибки ответов от серверов не влияют на код завершения. 8. Если задано несколько IP и хоть один из них окажется хоть в кой-то спам базе, то код завершения будет равен 1.
В общем думаю тут и так все понятно. Скажу только, что ключ "-i" сделал на случай, если сервер http://www.robtex.com/ по какой-то причине откажется отдавать скрипту список DNSBL-серверов. А сохранить этот список предварительно можно так:
spam-check -d > dnsbl.listили взять тут. А скрипт можно взять тут.
Если будут просьбы, сделаю порт для винды.
ЗЫ: Хочу выразить благодарность:
slash - указал на досадную ошибку с psbl.surriel.com (0.1.x)
Tenno Seremel - помог с правильным запросом для wget (0.1.x)
ramok - помог многими советами (wget, sed, dnsbl, printf) (0.1.x & 0.2.x)
darkk - помог с документацией по dnsbl и поделился ссылкой на сайт http://www.robtex.com/, указал на mktemp (0.2.x)
UPD: Добавил mktemp и защиту от запуска под рутом, а т.ж. опцию -u для разрешения запуска под рутом.
UPD: Последнюю версию скрипта можно взять тут -> https://code.google.com/p/spamcheck/
21 коммент.:
ай спасибо, оченно полезный скриптик ты придумал.
Не за что.
Рад что понравилось :)
Респект. Спасибо, очень полезный скрипт.
Не за что :)
Ждите, скоро будет новая версия :)
Доброго времени суток
помогоите что я делаю не так
/usr/home/max > bash spam-check.sh -i dnsbl.list -p 195.138.84.172 85.238.111.118
Результат Сервер Ответ сервера
sed: 2: "s/$/\n/;:z;s/\([0-9]\{1 ...": unused label 'z;s/\([0-9]\{1,3\}\)\([^\n]*\n\)/\2\1./;tz;s/.*\n//;s/.$//'
--------------------------------------------------------------------------------------195.138.84.172------------
sed: 2: "s/$/\n/;:z;s/\([0-9]\{1 ...": unused label 'z;s/\([0-9]\{1,3\}\)\([^\n]*\n\)/\2\1./;tz;s/.*\n//;s/.$//'
--------------------------------------------------------------------------------------85.238.111.118------------
/usr/home/max >
заранее спасибо
Судя по всему, вы пытаетесь запустить spam-check на *BSD системе. Вероятнее всего у вас установлена не GNU либо старая версия sed. Попробуйте поставить GNU версию. У меня в лиунксе это - GNU sed версия 4.1.5. С GNU версией 4.1 и выше скрипт должен работать без проблем, если мне не изменяет память.
ЗЫ: сообщите пожалуйста получилось у вас или нет, спасибо.
Да Вы правы действительно пробовал на FreeBSD сегодня попытабсь сделать на Линуксе
И кста было бы очень удобно еслибы скрип был запущен на машине постоянно и проверял скажем каждый час список ip адресов и в случае блока отсылал инфу на мыло с инфой кто и где попал в блок)
Возможно вы не совсем правильно поняли для чего скрипт... Он для того, чтобы проверять свои сервера. Т.е. не попали ли мой почтовый сервер в спам-базу какую-нибудь. И как следствие, для быстрого реагирования.
Скрипту вовсе не надо работать постоянно, его достаточно запускать по расписанию cron'ом. Например так:
spam-check.sh -i /path/to/dnsbl.list -p 195.138.84.172 85.238.111.118 || (echo "Subject: WARNING!!! My IP in spam bases found!!!" | ssmtp you@mail.ru)
Если хочешь чтобы текст был не в заголовке письма, а в теле, тогда убери подстроку "Subject:". И не забудь указать полный путь до файла dnsbl.list, а так же для всех других файлов, скриптов и программ. Просто cron не всегда знает пути из $PATH (хотя эту переменную можно прописать в самом файле /etc/crontab).
Как настроить ssmtp я написал тут: http://angel2s2.blogspot.com/2009/04/ssmtp.html
Пример строки из файла /etc/crontab (на всякий пожарный):
59 * * * * support spam-check.sh -i /path/to/dnsbl.list -p 195.138.84.172 85.238.111.118 || (echo "Subject: WARNING!!! My IP in spam bases found!!!" | ssmtp you@mail.ru)
Это заставит запускаться скрипт каждый час в 59 минут с правами юзера support.
да я то понял в чем идея скрипта)
это как раз то что я искал)
ближе к делу) за идею с кроном спасибо
на линухе скрипт заработал.
на счет идеи быстрого реагирования - серверов у меня несколько поэтому и надо чтоб проверялся список ip каждый час и присылал на мыло инфу что мол сервер 12.23.34.45 попал туда-то
Тогда можете изменить немного запись в кроне на одну из следующих (я это все не проверял, но вроде все верно):
59 * * * * support spam-check.sh -i /path/to/dnsbl.list -p 195.138.84.172 85.238.111.118 > /tmp/spam-check.log || metasend -b -s "WARNING!!! My IP in spam bases found!!!" -f /tmp/spam-check.log -m text/plain -t you@mail.ru
или
59 * * * * support spam-check.sh -i /path/to/dnsbl.list -p 195.138.84.172 85.238.111.118 > /tmp/spam-check.log || mpack -s "WARNING!!! My IP in spam bases found!!!" -c application/octet-stream /tmp/spam-check.log you@mail.ru
или
59 * * * * support spam-check.sh -i /path/to/dnsbl.list -p 195.138.84.172 85.238.111.118 > /tmp/spam-check.log || mutt -a /tmp/spam-check.log -s "WARNING!!! My IP in spam bases found!!!" you@mail.ru
или
59 * * * * support spam-check.sh -i /path/to/dnsbl.list -p 195.138.84.172 85.238.111.118 > /tmp/spam-check.log || mutt -s "WARNING!!! My IP in spam bases found!!!" you@mail.ru < /tmp/spam-check.log
Кстати, приведенный в пред. комменте пример не совсем верный, там надо добавить ключ "-q", чтобы правильнее было.
"Если будут просьбы, сделаю порт для винды"
Очень хотелось использовать Ваш сккрипт и в винде. Выложите пожалуйста вариант скрипта для винды.
По возможности и наличии свободного времени постараюсь сделать.
Может темка уже и устарела но все же до сих пор хотелось бы под винду на ящичег sgilgenberg@carec.kz
Да, я помню. Просто времени на него все никак не найду. Работы много да и в жизни событий разных. Сорри.
Постараюсь до НГ сделать :)
Если сильно хочется/не терпится запустить его, то можете попробовать поставить CygWin и в нем уже запускать скрипт. Понадобятся (для полноценной работы): bash, host, basename, rm, printf, awk (лучше gawk), sed (лучше gnu sed), grep, wget, mktemp. Вроде ничего не забыл/не упустил. Правда я не знаю как он себя поведет. Да и на сервер CygWin ставить, имхо, не желательно.
Под "портом" я подразумевал перепись скрипта на чистый shell (sh) и проверка + подгонка работы под UnxUtils.
Спасибо за скрипт!
А российские почтовики, например mail.ru, туда можно добавить?
Вы скорее всего не верно поняли принцип скрипта.
Скрипту указывается доменное имя либо ip адрес, а он (скрипт) проверяет есть ли этот адрес в черных списках (DNSBL). Российские почтовики тут не причем.
Уже есть более свежая версия (на данный момент 0.3.4) на офф. странице скрипта. Сейчас пишу документацию по нему.
Интересный скрипт,но не хочет у меня работа,по
$ ./spam-check -p 78.25.32.49
Результат Сервер Ответ сервера
--------------------------------------------------------------------------------------1.2.3.4------------
/usr/bin/host: '1.2.3.4."clear:both;font-size:12px;line-height:18px;margin:0;padding:0;padding-top:5px;">A' is not a legal name (label too long)
[+++SPAM+++] - "clear:both;font-size:12px;line-height:18px;margin:0;padding:0;padding-top:5px;">A -
тут ip изменил которое с примера
У меня на 10 машинах проблем не возникает. linux, bash 4.x. Может вы его на солярке и *bsd запускаете, или на старом bash, или и вовсе sh?
тоже похожая ошибка:
mihail@mihail-pc ~/Downloads $ ./spam-check -p 77.88.21.3
Результат Сервер Ответ сервера
--------------------------------------------------------------------------------------77.88.21.3------------
/usr/bin/host: '3.21.88.77."font-size:12px;margin:0;padding:0;clear:both;line-height:18px;padding-top:5px">A' is not a legal name (label too long)
[+++SPAM+++] - "font-size:12px;margin:0;padding:0;clear:both;line-height:18px;padding-top:5px">A -
mihail@mihail-pc ~/Downloads $ bash --version
GNU bash, version 4.2.45(1)-release (i686-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
mihail@mihail-pc ~/Downloads $ uname -a
Linux mihail-pc 3.8.0-19-generic #30-Ubuntu SMP Wed May 1 16:36:13 UTC 2013 i686 i686 i686 GNU/Linux
PS.
Проблема исчезает при запуске с файлом списка))
./spam-check.sh -i dnsbl.list -p 77.88.21.3
автору большой рэспект за труд!
Тоже одно время думал об автоматизации, но проще оказалось взять готовый и бесплатный инстумент, чекнуть 1 раз и все
https://dnsbl.smtp.bz
Отправить комментарий