Автоматизация проверки своего IP по спам базам


Anonymous - Posted on 18 Ноябрь 2008

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

Работа скрипта проста:
spam-check 22.22.22.22
В результате мы увидим следующее:
[OK] - spamcop.net - 22.22.22.22 not listed in bl.spamcop.net.
[OK] - njabl.org - 22.22.22.22 not found in the list.
[OK] - www.five-ten-sg.com - 22.22.22.22 is not listed here.
[-No Lookup-] - junkemailfilter.com - ERROR - Reverse DNS Lookup Failed for [22.22.22.22]. 22.22.22.22 is NOT LISTED in any Hostkarma list.
[OK] - mail-abuse.com - The IP address entered was not found on any database managed by Trend Micro's Network Reputation Services.
[OK] - apews.org - We found no entry matching your search.
[OK] - psbl.surriel.com - The host 22.22.22.22 has never been listed in PSBL.
[OK] - psbl.surriel.com - We have no spamtrap mail on record for 22.22.22.22.
[OK] - wpbl.info - 22.22.22.22 not found in database.

Поле [-No Lookup-] - junkemailfilter.com - ERROR - Reverse DNS Lookup Failed for [22.22.22.22]. 22.22.22.22 is NOT LISTED in any Hostkarma list. говорит о том, что сервер не смог разрешить IP в доменное имя. Это единственный сервер из этого списка, который делает такую проверку, поэтому я ее включил.

Если же IP в спам базе, то мы увидим следующее:
$ spam-check 90.217.35.79
[+++SPAM+++] - spamcop.net - 90.217.35.79 listed in bl.spamcop.net (127.0.0.2).
[OK] - njabl.org - 90.217.35.79 not found in the list.
[OK] - www.five-ten-sg.com - 90.217.35.79 is not listed here.
[+++SPAM+++] - junkemailfilter.com - Your reverse DNS is correct! - 5ad9234f.bb.sky.com. 90.217.35.79 is Black listed.
[+++SPAM+++] - mail-abuse.com - The IP address 90.217.35.79 does appear on the following databases managed by Trend Micro's Network Reputation Services.
[OK] - apews.org - We found no entry matching your search.
[+++SPAM+++] - psbl.surriel.com - Currently listed in PSBL? Yes.
[+++SPAM+++] - psbl.surriel.com - Received spamtrap mail for 90.217.35.79.
[+++SPAM+++] - wpbl.info - Total spam sightings (last 90 days) - 4.

Возможно, некоторые удивлятся, что в этом списке нет довольно известной спам базы http://www.spamhaus.org/, но дело в том, что у меня не получилось сделать работу с ней через скрипт. Дело в том, что сервер http://www.spamhaus.org/, скорее всего, проверяет поле UserAgent браузера, я пробовал воспользоваться параметром -U утилиты wget, но результат это не дало. Буду очень признателен, если кто-нибудь поможет и с ним разобраться.

Ну и конечно-же сам скрипт, как же без него :)

Вот и все, чем я хотел поделиться с вами на этот раз, коллеги :)

Источник: мой блог

ЗЫ: Если кто найдет ошибки, прошу меня уведомить, в комментах или по мылу на saimon.ghost [гав-гав] Гмыл0 [тут_точка] ком (защита от спама :-Р ).

0
Ваша оценка: Ничего

UPD: Сделал новый скрипт. Подробности на ЛинСовет или в моем блоге.

Всем привет!!!
Зачем же так все усугублять и усложнять?!
Мы вот с корешем софтину замутили, которая в автоматическом режиме проверяет и снимает блокировку с IP )) работает на ура)))
Если кому интересно, пишите)))

С таким же успехом я могу сказать: "Я вчера Бритни поимел" И что? Кто поверит?
Так чтож лучше бы выложили вашу софтину куда-нить и линк дали...

Ну если хотите узнать более детальную и интересную инфу пиши на скайп sinys_r или на !!! Всем и с радостью отвечу!!!

Ты уже задрал... Да и вообщем, нахер спамить... Уже и в блог мне насрать успел!
Я тебе ответил мылом и повторою еще раз: Пока утилита не выложена в общий доступ и код ее не открыт она мне не интересна, впрочем, как и большинству тут зареганных!

куда писать? на стенку? :)
выложил бы уже тут или где еще и линку дал

Ну если хотите узнать более детальную и интересную инфу пиши на скайп sinys_r или на !!! Всем и с радостью отвечу!!!

Кто-нибудь может подсказать как правильно вывести текст по колонкам?


Вот так:

[OK]		- dialups.visi.com		- Host 79.35.217.90.dialups.visi.com not found: 3(NXDOMAIN)
[+++SPAM+++]	- dnsbl-1.uceprotect.net	- 79.35.217.90.dnsbl-IP 90.217.35.79 is UCEPROTECT-Level 1 listed. See 
						http://www.uceprotect.net/rblcheck.php?ipr=90.217.35.79




Табами получается так, что не красиво :) :

[OK]		- dialups.visi.com		- Host 79.35.217.90.dialups.visi.com not found: 3(NXDOMAIN)
[+++SPAM+++]		- dnsbl-1.uceprotect.net		- 79.35.217.90.dnsbl-IP 90.217.35.79 is UCEPROTECT-Level 1 listed. See http://www.uceprotect.net/rblcheck.php?ipr=90.217.35.79

такое обычно решается с помощью printf. там в моей переделке есть пример

printf  "[-No Lookup-]  - "%-30s"   - $RESULT\n" junkemailfilter.com

junkemailfilter.com будет дополнен до 30 символов и выравнено по левому краю

Мега РЕСПЕКТ!!! =))) Что-то я совсем позабыл про существование printf :( Надо будет доки на днях почитать :)

Во как красиво теперь =)


$ [b]spam-check -v -p 90.217.35.79
Результат       Сервер                             Ответ сервера
--------------------------------------------------------------------------------------90.217.35.79------------
[OK]          - blacklist.sci.kun.nl             - Host 79.35.217.90.blacklist.sci.kun.nl not found: 3(NXDOMAIN)
[OK]          - blacklist.woody.ch               - Host 79.35.217.90.blacklist.woody.ch not found: 3(NXDOMAIN)
[OK]          - bl.emailbasura.org               - Host 79.35.217.90.bl.emailbasura.org not found: 3(NXDOMAIN)
[OK]          - block.dnsbl.sorbs.net            - Host 79.35.217.90.block.dnsbl.sorbs.net not found: 3(NXDOMAIN)
[OK]          - bl.redhatgate.com                - Host 79.35.217.90.bl.redhatgate.com not found: 3(NXDOMAIN)
[OK]          - bl.spamcannibal.org              - Host 79.35.217.90.bl.spamcannibal.org not found: 3(NXDOMAIN)
[+++SPAM+++]  - bl.spamcop.net                   - Blocked - see http://www.spamcop.net/bl.shtml?90.217.35.79
[OK]          - bl.technovision.dk               - Host 79.35.217.90.bl.technovision.dk not found: 3(NXDOMAIN)
[ERROR]       - c10.rbl.hk                       - 79.35.217.90.c10.rbl.hk has no TXT record
[+++SPAM+++]  - cbl.abuseat.org                  - Blocked - see http://cbl.abuseat.org/lookup.cgi?ip=90.217.35.79
[+++SPAM+++]  - cbl.anti-spam.org.cn             - 79.35.217.90.cbl.anti-Mail from 90.217.35.79 refused, see http://anti-spam.org.cn/Rbl/Query/Result?IP=90.217.35.79
[+++SPAM+++]  - cblless.anti-spam.org.cn         - 79.35.217.90.cblless.anti-Mail from 90.217.35.79 refused, see http://anti-spam.org.cn/Rbl/Query/Result?IP=90.217.35.79
[/strong]

wget --header='Accept: text/html' --referer="http://www.spamhaus.org/sbl/index.lasso" --user-agent="Opera/9.62 (X11; Linux x86_64; U; ru) Presto/2.1.1" http://www.spamhaus.org/query/bl?ip=1.1.1.1

p.s. а OpenID тут не работает? (O_o)

Спасибо, это действительно проходит. :)
Будем биться за него теперь :)

$  wget -O - --header='Accept: text/html' --user-agent="hi :)" http://www.spamhaus.org/query/bl\?ip\=1.1.1.1

похоже режет конкретно wget и если принимают */*.

PS
скрипт посмотрел. хорошо сделано. но много дублирующего кода наводит на мысли что это можно как то оптимизировать..
запускать все проверки паралельно

Кстати, ramok, тебя тут спецом в sed считают, подскажи, плиз, как мне тут быть, никак не могу составить запрос:

Выполни:
wget -q -O - --header='Accept: text/html' --user-agent="hi :)" http://www.spamhaus.org/query/bl\?ip\=1.1.1.1 | grep '1.1.1.1'

и

wget -q -O - --header='Accept: text/html' --user-agent="hi :)" http://www.spamhaus.org/query/bl\?ip\=90.217.35.79 | grep '90.217.35.79'

В результате получишь только самое важное, но вот как выдрать оттуда только нужное, я так и не понял.
Пробовал так
sed -e 's/<.\{1,2\}>//g;s/<FONT color="\(green\|red\)">//g;s/<\/FONT> \?//g;s/XBL.*$/XBL/;s/,.*: //'
это работает, но если только нет не в одной базе этого ИП, а если есть, тогда уже побочный эффект. Т.е. например для ИП 1.1.1.1 все проходит как надо, а для 90.217.35.79 - лишнее есть.
Получается, что sed только в жадном режиме работает. Прогуглил, говорят, что для не жадного режима надо делать типа того:
sed -e 's/^<.*?>//g'
по идее это должно удалить все хтмл теги из строки, но вообщем ничего не находит.

Как тут быть? Есть идеи?

не жадных .* в sed нет. но с этим можно боротся так

sed -e 's/^<[^>]*>//g'

для скрипта у меня получилось так:

sed -e /$IP' is/!d;s/.*\('$IP'[^<]*\).*/\1/'

и со spamhaus-а фильтрует три строки

Спасибо, но у меня это почему-то не прошло :(

$ wget -q -O - --header='Accept: text/html' --user-agent="hi :)" http://www.spamhaus.org/query/bl\?ip\=90.217.35.79 |
    sed -e /90.217.35.79' is/!d;s/.*\('90.217.35.79'[^<]*\).*/\1/'
90.217.35.79 is not listed in the SBL
90.217.35.79 is listed in the PBL
90.217.35.79 is listed in the XBL

можно одним s///

$ wget -q -O - --header='Accept: text/html' --user-agent="hi :)" http://www.spamhaus.org/query/bl\?ip\=90.217.35.79 |
     sed -ne 's/.*\('90.217.35.79' is[^<]*\).*/\1/p

Ага.... Надо будет проверить :) Спасибо за инфу.
ЗЫ: Оптимизировать то можно, но это будет слишком геморно, т.к. sed'ится почти всегда по разному все. Я вначале хотел было функцию сделать и потом ей все долбить, да вот потом понял, что не прокатит, за исключением, если ей запросы для sed'а передавать (помимо всего прочего).

Сейчас рассматриваю вариант работы напрямую через dnsbl (как почтовый сервер), это будет гораздо лучше :)

Фильтры на sed можно задавать для каждого сайта через переменную.

Я уже сделал предварительную версию со специальной функцией которая обрабатывает семь сайтов. Для оставшихся надо думать как расширить ее функционал. Если интересно то могу выложить хотя еще и сыровато (как пример что можно вытворять на шеле Ж:-).

Насчет проверки через dns это самое правильное. Идея в том что на этих серверах настроены dns сервера, и если ресолвить специально сформированное доменное имя и если IP заблокирован, то он результатом будет 127.0.0.x, а в секции TXT можно посмотреть текст.

Сформировать правильное доменное имя для нужного IP

$ echo 90.217.35.79 | sed -e 's/$/\n/;:z;s/\([0-9]\{1,3\}\)\([^\n]*\n\)/\2\1./;tz;s/.*\n//;s/.$//' -e 's/$/.bl.spamcop.net/'
79.35.217.90.bl.spamcop.net

Проверяем с помощью dig

$ dig 79.35.217.90.bl.spamcop.net TXT
...
79.35.217.90.bl.spamcop.net. 1829 IN    A   127.0.0.2
...
$ dig 79.35.217.90.bl.spamcop.net TXT
...
79.35.217.90.bl.spamcop.net. 1832 IN    TXT "Blocked - see http://www.spamcop.net/bl.shtml?90.217.35.79"

PS
есть есть специальный софт для этого (надеюсь это не отобьет тебе охоту сделать свой Ж:-)

$ rblcheck -s bl.spamcop.net 90.217.35.79
90.217.35.79 not listed by sbl.spamhaus.org
90.217.35.79 listed by xbl.spamhaus.org
90.217.35.79 listed by pbl.spamhaus.org
90.217.35.79 not listed by list.dsbl.org
90.217.35.79 not listed by dnsbl.njabl.org
90.217.35.79 not listed by dul.dnsbl.sorbs.net

Смотрю ты прям АС! :))) Спасибо за советы!

Про утилиту rblcheck не знал, за нее отдельное спасибо. Желание свой сделать она у меня не отбивает, а наоборот добавляет и "подстрекает" сделать лучше, чем эта утилита :) + я всего-лишь еще новичек в мире *nix'ов и написать свое значит получить новые знания и опыт. Еще года нет, с тех пор как с линуксом начал работать, но уже без него не могу.
К тому же я считаю, что скрипт лучше чем программа. Его просто открыл и посмотрел и не надо знать ни какие C/C++, чтобы понять как работает. Да и для изучения хорош. :)

В общем скрипт новый уже готов, работает через dnsbl напрямую. На данный момент 104 спам базы опрашивает. Скорость большая. Осталось только несколько наворотов для удобства добавить и все готово будет.
Завтра-послезавтра выложу. Сделаю новый совет. :)

ЗЫ: Отдельное тебе большое спасибо за эту строчку:
echo 90.217.35.79 | sed -e 's/$/\n/;:z;s/\([0-9]\{1,3\}\)\([^\n]*\n\)/\2\1./;tz;s/.*\n//;s/.$//' -e 's/$/.bl.spamcop.net/'
Избавил меня от лишнего копания в манах :))))))))))))))))))))))

> Я уже сделал предварительную версию со специальной функцией которая обрабатывает семь сайтов. Для оставшихся надо
> думать как расширить ее функционал. Если интересно то могу выложить хотя еще и сыровато (как пример что можно
> вытворять на шеле Ж:-).
Выложи, если не влом, интересно взглянуть :) Да и новые знания/опыт всегда полезны :)

да для получение опыта - самое то Ж:-)

http://core.org.ua/tmp/spam-check
там надо все TODO доделать, но думаю идея понятна.
если интересно что как сделано - спрашивай.

Классный скриптег :)))
Вопросов даже не возникло, все понятно сразу :)))

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

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.