Система Orphus

четверг, 20 ноября 2008 г.

Автоматизация проверки своего IP по спам базам. Вершин ту.


Не так давно я выкладывал собственноручный скрипт для автоматической проверки своего IP по спам базам. Там было всего 11 баз. Да и работал он через http, что естественно не очень хорошо...
Но есть способ получше =)


И заключается он в том, чтобы обращаться к 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/

Похожие статьи

20 коммент.:

Анонимный комментирует... среда, 17 декабря 2008 г., 19:28:00 GMT+2

ай спасибо, оченно полезный скриптик ты придумал.

Angel 2S2 комментирует... четверг, 18 декабря 2008 г., 14:02:00 GMT+2

Не за что.
Рад что понравилось :)

yarik комментирует... понедельник, 12 января 2009 г., 11:42:00 GMT+2

Респект. Спасибо, очень полезный скрипт.

Angel 2S2 комментирует... понедельник, 12 января 2009 г., 11:51:00 GMT+2

Не за что :)
Ждите, скоро будет новая версия :)

MaximuS комментирует... понедельник, 6 апреля 2009 г., 0:15:00 GMT+3

Доброго времени суток
помогоите что я делаю не так

/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 >

заранее спасибо

Angel 2S2 комментирует... понедельник, 6 апреля 2009 г., 10:31:00 GMT+3

Судя по всему, вы пытаетесь запустить spam-check на *BSD системе. Вероятнее всего у вас установлена не GNU либо старая версия sed. Попробуйте поставить GNU версию. У меня в лиунксе это - GNU sed версия 4.1.5. С GNU версией 4.1 и выше скрипт должен работать без проблем, если мне не изменяет память.

ЗЫ: сообщите пожалуйста получилось у вас или нет, спасибо.

MaximuS комментирует... понедельник, 6 апреля 2009 г., 13:53:00 GMT+3

Да Вы правы действительно пробовал на FreeBSD сегодня попытабсь сделать на Линуксе

И кста было бы очень удобно еслибы скрип был запущен на машине постоянно и проверял скажем каждый час список ip адресов и в случае блока отсылал инфу на мыло с инфой кто и где попал в блок)

Angel 2S2 комментирует... понедельник, 6 апреля 2009 г., 15:21:00 GMT+3

Возможно вы не совсем правильно поняли для чего скрипт... Он для того, чтобы проверять свои сервера. Т.е. не попали ли мой почтовый сервер в спам-базу какую-нибудь. И как следствие, для быстрого реагирования.

Скрипту вовсе не надо работать постоянно, его достаточно запускать по расписанию 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.

MaximuS комментирует... понедельник, 6 апреля 2009 г., 23:43:00 GMT+3

да я то понял в чем идея скрипта)
это как раз то что я искал)
ближе к делу) за идею с кроном спасибо
на линухе скрипт заработал.
на счет идеи быстрого реагирования - серверов у меня несколько поэтому и надо чтоб проверялся список ip каждый час и присылал на мыло инфу что мол сервер 12.23.34.45 попал туда-то

Angel 2S2 комментирует... вторник, 7 апреля 2009 г., 12:10:00 GMT+3

Тогда можете изменить немного запись в кроне на одну из следующих (я это все не проверял, но вроде все верно):

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", чтобы правильнее было.

Анонимный комментирует... четверг, 23 июля 2009 г., 8:04:00 GMT+3

"Если будут просьбы, сделаю порт для винды"

Очень хотелось использовать Ваш сккрипт и в винде. Выложите пожалуйста вариант скрипта для винды.

Angel 2S2 комментирует... вторник, 28 июля 2009 г., 12:07:00 GMT+3

По возможности и наличии свободного времени постараюсь сделать.

superstarsik комментирует... пятница, 11 декабря 2009 г., 10:24:00 GMT+2

Может темка уже и устарела но все же до сих пор хотелось бы под винду на ящичег sgilgenberg@carec.kz

Angel 2S2 комментирует... пятница, 11 декабря 2009 г., 11:10:00 GMT+2

Да, я помню. Просто времени на него все никак не найду. Работы много да и в жизни событий разных. Сорри.
Постараюсь до НГ сделать :)

Если сильно хочется/не терпится запустить его, то можете попробовать поставить CygWin и в нем уже запускать скрипт. Понадобятся (для полноценной работы): bash, host, basename, rm, printf, awk (лучше gawk), sed (лучше gnu sed), grep, wget, mktemp. Вроде ничего не забыл/не упустил. Правда я не знаю как он себя поведет. Да и на сервер CygWin ставить, имхо, не желательно.

Под "портом" я подразумевал перепись скрипта на чистый shell (sh) и проверка + подгонка работы под UnxUtils.

dan1005 комментирует... понедельник, 8 февраля 2010 г., 14:14:00 GMT+2

Спасибо за скрипт!
А российские почтовики, например mail.ru, туда можно добавить?

Angel 2S2 комментирует... понедельник, 8 февраля 2010 г., 14:21:00 GMT+2

Вы скорее всего не верно поняли принцип скрипта.
Скрипту указывается доменное имя либо ip адрес, а он (скрипт) проверяет есть ли этот адрес в черных списках (DNSBL). Российские почтовики тут не причем.

Уже есть более свежая версия (на данный момент 0.3.4) на офф. странице скрипта. Сейчас пишу документацию по нему.

Andrey Boyko комментирует... суббота, 26 января 2013 г., 18:20:00 GMT+3

Интересный скрипт,но не хочет у меня работа,по

$ ./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 изменил которое с примера

Roman Shagrov комментирует... воскресенье, 27 января 2013 г., 19:10:00 GMT+3

У меня на 10 машинах проблем не возникает. linux, bash 4.x. Может вы его на солярке и *bsd запускаете, или на старом bash, или и вовсе sh?

Михаил комментирует... четверг, 11 июля 2013 г., 9:53:00 GMT+3

тоже похожая ошибка:
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

Михаил комментирует... четверг, 11 июля 2013 г., 10:38:00 GMT+3

PS.
Проблема исчезает при запуске с файлом списка))
./spam-check.sh -i dnsbl.list -p 77.88.21.3

автору большой рэспект за труд!

Отправить комментарий