spam-chek 0.3: Быстрее, больше, сильнее
Я уже выкладывал и писал предыдущие версии скрипта spam-check. Сегодня же, в преддверии Нового 2010 года, хочу поделиться новой, третьей версией данного скрипта.
Напомню, скрипт предназначен для проверки своих (и не только) серверов на их наличие в черных списках (DNSBL).
В этой версии не мало новшеств. Скрипт переписан полностью с нуля и теперь работает быстрее и качественнее, а так же теперь используется sh вместо bash, как в предыдущих версиях. Теперь не нужна опция "-p" и можно указывать не только ip-адреса, но и доменные имена, правда с одной оговоркой: если доменное имя разрешается в другое доменное имя (alias), то скрипт отработает не верно. Я нарочно не стал проверять, есть ли у домена alias, т.к. считаю, что админ сам должен уметь это делать :) Т.ж. разделен поток ошибок и поток обычного вывода.
Приведу вывод "spam-check --help":
spam-check [-q] [-l] [-d dnsbl | -f filename | -i] [-s dns_server] [-t] [--] [ip or domain-name ...] -q - Ничего не выводить -l - Показать список DNSBL-серверов -d - Проверить по указанному DNSBL -f - Взять список DNSBL-серверов из файла (по одному на строчку) -i - Сграбить список DNSBL с сайта http://myiptest.com/ -s - Указать DNS-сервер, через который будет идти проверка (по умолчанию OpenDNS - 208.67.222.222) -t - Считать Time Out'ы ошибкой -- - Считается, что дальше идут только ip и/или доманные имена [ip or domain-name ...] - ip и/или доменный имена, которые нужно проверить --vesrion, --help, --usage - без комментариев
Немного пояснений...
Порядок опций не имеет значение. Вы можете указывать вперемешку опции, ip-адреса и доменные имена.
Опция -l может работать в сочетании с опциями -f и -l, а по умолчанию она покажет "вшитый" список из 116 DNSBL.
Вся проверка по умолчанию идет через DNS-сервер OpenDNS, что конечно чуток медленнее, но, на мой взгляд, надежнее, т.к. я не очень доверяю DNS-серверам своего провайдера. Если не хотите каждый раз указывать DNS-сервер, то можете открыть скрипт и отредактировать переменную "$DNS_SERVER", чтобы изменить DNS-сервер по умолчанию.
Опция -t выводит сообщение о том, что соединение сервера прервано по time out'у, в поток ошибок и устанавливает код завершения скрипта в 1. А по умолчанию выводы и идет на стандартный поток вывода и не считается ошибкой, т.к. код завершения будет 0, при условии, что ни одного ip-адреса нет ни в одной DNSBL.
ToDo...
В будущем планирую увеличить количество "вшитых" DNSBL.
На этом моя фантазия иссякла. Не знаю, что можно еще добавить. Если у вас есть идеи, пишите, буду добавлять по возможности.
Сам скрипт spam-check 0.3
Страница скрипта на Google Codes
По меньше спама вам и вашим серверам!
И не попадайтесь в черные списки :)
С Новым 2010 годом! До встречи в Новом году :)
- 1633 просмотра
Страница для печати


Собственно было бы не плохо иметь ключ какой либо чтобы вывод скрипта имел вид
----------IP-----------
[+++SPAM+++] бла бла бла
[+++SPAM+++] бла бла бла
[+++SPAM+++] бла бла бла
----------IP-----------
[+++SPAM+++] бла бла бла
[+++SPAM+++] бла бла бла
----------IP-----------
[+++SPAM+++] бла бла бла
[+++SPAM+++] бла бла бла
[+++SPAM+++] бла бла бла
т.е. без [ok] и [error]
и еще было бы не плохо иметь ключ для выборки ip адресов для скана из файла
и картина вида scan --ip ip ip > file
не работает точнее почему то записи [+++SPAM+++] бла бла бла нету, а [ok] и [error] присутствуют
п.с. сам закоментил [ok] и [error] чтобы не мешались при выводе
ну так добавь фунционал через ключики и выложи тут или автору пришли патчик на сайт проекта.
1. например ok и error можно выводить по ключику -v (verbose)
2. -F для файла с IP для скана. хотя можно и обходится
$ cat файл | xargs spam-check --3. +++SPAM+++ выводится в stderr, поэтому и не попадает в файл. можно пофиксить вывод, что бы было более логично
4. на сайте проекта есть версия поновее, править лучше ее
Классный скрипт.
несколько небольших проблем:
1) не во всех системах character set по умолчанию UTF-8, я получил кракозябры на экране
$ echo -ne '\e%G\e[?47h\e%G\e[?47l'2) некорректно отрабатывается скрипт если DNSBL резолвится на 127.0.0.х
3) Сообщение "Странно... Ты не должен был этого видеть... о_О Напиши мне багрепорт, плиз. Мое мыло: " мало информативно, не понятно что нужно делать.
4) БАГ: некорректная обработка " connection timed out "
1) На сколько я понимаю, это из-за того, что сам скрипт сохранен в кодировке utf-8. Я же не могу все возможные кодировки в одном файле сохранить =) Вам проще сделать так (после того, как скачаете скрипт):
А на счет "echo -ne ..." вообщем не пойму... Где вы нашли такое? У меня в скрипте только чистые echo.
2) Не, тут проблема была в другом. Я забыл переменную $2 заменить на $DNSBL =) Уже пофиксено.
Просто вначале только по TXT записи DNS серера смотрел, а потом решил смотреть по А, а ТХТ только в случае необходимости запрашивать.
3) Да, согласен. Добавил дополнительную информацию. Теперь вывод быдет таким: "Странно... Ты не должен был этого видеть... о_О Напиши мне багрепорт, плиз, укажи версии sh, sed, host и самого скрипта, а так же какая у тебя ось и какие параметры были переданы скрипту. Заранее спасибо. Мое мыло: ".
4) Не, это не "connection timed out". Я всегда думал, что DNSBL'ы висят на 127.0.0.X, вот и обламался. Тут он на 206.123.70.50 висит. Уже пофиксено.
ЗЫЖ "Висит" это образно сказано...
Если не ошибаюсь, iconv использует системную кодировку по умолчанию, если не установлена:
$ echo 'тест' | iconv -t cp1251 | iconv -f cp1251angel2s2, держи, чутка подправил, чтоб при большом количестве ип отрабатывал в две команды:
$ host vkontakte.ru | sed -ne '/address/s/^.\+\ \([0-9\.]\+\).*$/\1/g;1p'выдает первый хост, но каждый раз разный, не знаю, может днс такая
как предложение: logger и вызов внешнего скрипта(вот только где вызывать?), вдруг кто захочет мыло себе прислать?
и, angel2s2, как переводится слово vesrion? ;)
> Если не ошибаюсь, iconv использует системную кодировку по умолчанию
Немного ошибаешься... Он ее использует только для "выхода" (выделил жирным):
--from-code, -f encoding Convert characters from encoding. --to-code, -t encoding Convert characters to encoding. If not specified the encoding corresponding to the current locale is used.> angel2s2, держи, чутка подправил, ..........
Там ip'шники выводятся в рандомном порядке, поэтому и каждый раз ip разный, т.к. показывает только первый. Но зачем это нужно, я что-то не врубаюсь, т.е. не пойму, что ты там подправил?..
Мне нужны все ip'шники, которые "привязаны" к домену. У меня это сделано так (и работает как надо):
> как предложение ..................
На счет logger'а не пойму, что имелось ввиду. Чтобы в syslog умел писать чтоли?
А вызов внешнего скрипта... Зачем? Не проще ли мыло отправить, например, так, только если мы есть, хоть в одном черном списке:
Или так, не зависимо от результатов проверки:
Или даже на джаббер:
или
В этом и есть сила никсов :)) Поэтому, ИМХО, это излишне :)
> и, angel2s2, как переводится слово vesrion? ;)
Эммм... Я и сам не знаю :) АписЬкО вышло :))) Пофиксил. Спасибо.
ЗЫЖ(на всякий пожарный) Я писал у себя в блоге, как настроить эти утилитки:
ssmtp - минимальная настройка
SendXMPP: Мониторим сервер с помощью Jabber
>>> 1) не во всех системах character set по умолчанию UTF-8, я получил кракозябры на экране
>> Если не ошибаюсь, iconv использует системную кодировку по умолчанию
> Немного ошибаешься... Он ее использует только для "выхода" (выделил жирным):
а чего надо? правильно! чтоб у человека выводился текст в его кодировке без плясок (хотя там и плясок-то-плясок...) ;)
> На счет logger'а не пойму...
всякая уважающия себя софтина, тем более серверного направления, имхо, должна уметь писать логи :)
и кстати logger может не только в syslog писать.
>>>> если доменное имя разрешается в другое доменное имя (alias), то скрипт отработает не верно.
приведи пример алиаса, пжл, интересно увидать вывод >_> вообще целился сюда, но...
>... т.е. не пойму, что ты там подправил?
... ступил я тут =)
ps ссылочки: довольно кратко и информативно, то что в последнее время встречается все реже и реже. держи в том же духе.
На счет iconv теперь понял, что имелось ввиду, спасибо. Добавлю на днях.
Только вот у меня маленькое сомнение есть... А если системная кодировка не utf-8, а сам скрипт сохранен в utf-8, то будет ли скрипт вообщем работать? Вроде sh пытается прочитать файл в системной кодировке и сам ее не определяет... Или я не прав? Просто не знаю этого.
На счет logger'а теперь понял. А вначале не о том подумал, не понял, что имеется ввиду утилита logger. На днях поищу примеры работы с ней, раньше дела не имел. Поставил в ToDo.
Пример алиаса? Пожалуйста:
Последняя строка... Это я и имел ввиду под алиасом. Просто не знаю как правильно это назвать... :( С DNS маленький опыт.
> ps ссылочки: довольно кратко и информативно, то что в последнее время встречается все реже и реже. держи в том же духе.
Буду стараться :))
ну вот тебе эксперимент(домашняя utf8):
]$ cat << EOF > iconvtest.sh > #!/bin/sh > _echo() { > echo \$@ | iconv -f cp1251 > } > _echo "Эта строка написана в кодировке cp1251" > echo "Эта строка написана в кодировке cp1251" > EOF ]$ iconv -f utf8 -t cp1251 iconvtest.sh > iconvtest1251.sh ]$ chmod u+x iconvtest1251.sh ]$ ./iconvtest1251.sh #в данный момент кодировка текста - cp1251 Эта строка написана в кодировке cp1251 ��� ������ �������� � ��������� cp1251тоже самое можно проделать и с koi8r.
По сути какая разница в какой кодировке находится файл? ведь англицкие буквы(и цифры/знаки тоже) везде(в любой кодировке) имеют одинаковые шестнадцатеричные значения, различие в этом - это уже будет скорее исключение. =) единственное, думаю, что должно быть, utf8 в локалях, ну а куда линь без утф?
зы: у логгера ман в одну страницу. ;)
альтернатива host mail.ru
mxs как я это понял: Mail eXchange Server / http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D1%8C_MX
и кстати вспомнил где увидел про кодировку по умолчанию: http://linsovet.com/iconv-cyrillic-to-translit =)
На счет кодировки... Да, ты прав, спасибо :) У меня что-то вылетело из головы, что англ. симоволы во всех кодировках одинаковые :)))
А вот куда линь без утф я сам не понимаю :))) Да и во фряхе давно пора ее сделать дефолтовой (хотя может уже и сделали, давно не видел фрях и ей подобных)
Ман логгера я уже смотрел, там понятно все. Просто хочу примеров глянуть, всегда так делаю (привычка чтоли) :)
Да, MX - это Mail eXchange Server, но я встречал и не MX записи (алиасы). Если еще раз наткнусь, дам знать.
На счет dig знаю, но использовал host, т.к. первоначально была идея заставить работать этот скрипт и под виндой через нативные утилиты (без CygWin), а dig вроде бы нет (не вспомню щас), т.к. люди просили. А сам вариант очень хороший, скорее всего так и сделаю, спасибо.
На счет винды, думаю всеже через CygWin буду советовать пускать, только не люблю я его на серверах виндовых :(
Я про iconv тоже на линсовете узнал, только не помню уже в каком именно топике :)
ЗЫЖ _gaSh_, дай свой джаббер или стукнись мне на =))
Чувак, спасибо. Поставил на ежедневную проверку всех своих серверов.
Не за что :) Рад, что понравилось и оказалось полезным :)
Не забудь обновить скрипт. Пару багов пофиксил.
Кстати, можешь отслеживать обновления скрипта, например, так (через крон, есесно):
Т.ж. можешь почитать в wiki разделе - "Как узнать, что скрипт обновился"
Отправить комментарий