Программа bruteblock (http://samm.kiev.ua/bruteblock/) позволяет блокировать попытки подбора паролей к сервисам FreeBSD.
Программа анализирует журнал запущенных служб и заносит
ip злоумышленников в таблицу firewall ipfw2. Через некоторое,
определённое пользователем, время программа удаляет их из этой таблицы.
Использование регулярных выражений позволяет использовать утилиту для
практически любой службы. Утилита написана на C и не использует вызова
внешних программ, работая с таблицами IPFW2 через RAW SOCKETS API.URL: http://samm.kiev.ua/bruteblock/
Новость: http://www.opennet.me/opennews/art.shtml?num=7984
МяФ!:) ну прямо как у меня в PF только механизм немного другой, да это хорошо что наконец и IPFW2 научился этому, полезная штука однако...:)))
ахха, основана на маленьком допуске: злоумышленник долбится с одного ip.в гугле поискать что такое ботнет
Очень редко (практически никогда) подбор попыток производится 1 попытка/1 IP. Даже если атакуют сервер ботенетом - это просто несколько сессий одновременно с разных ip, которые чудесно попадают в блек лист. Кроме того чаще всего брутофорс атаки делаются не сознательно на какой либо хост, а просто роботом - трояном, случайно переберающим IP адреса.
Полезная софтина. Скоро быть порту :)
Софтина, конечно, полезная. Но я пользуюсь от подобных пионэров pam_abl. Он и настройки гибкие имеет. И не привязан к конкретному файрволлу. Хотя таки да - при распределённой и интенсивной атаке - bruteblock будет поэффективнее. Только вот в чём дело. А если "враг" влупит атаку от спуфленных IP, где в качестве источника будет значится IP вышестоящего роутера? О последствиях не подумали?
>Софтина, конечно, полезная. Но я пользуюсь от подобных пионэров pam_abl. Он и
>настройки гибкие имеет. И не привязан к конкретному файрволлу. Хотя таки
>да - при распределённой и интенсивной атаке - bruteblock будет поэффективнее.
>Только вот в чём дело. А если "враг" влупит атаку от
>спуфленных IP, где в качестве источника будет значится IP вышестоящего роутера?
>О последствиях не подумали?
1) Я не думаю, что спуфленый IP при атаке из других сетей дойдёт до стадии auth. Это вам не icmp storm где ничего не проверяется.
2) программа работает через firewall. Т.е. никто не мешает (и даже наоборот) сделать до правила deny правило allow с таблицей в которой перечислены все trsuted ip адреса. Возможно, этот момент стоит отразить в доке,я просто думал, что это совершенно очевидно.
http://mbsd.msk.ru/stas/pam_af.html - гораздо лучше, гибче и безопаснее.
Простите, можно узнать аргументацию? особенно по поводу гибче и безопаснее меня заинтересовало ;-)
1) Быстрее, так как не требует дополнительного сканирования логов и работает на уровне PAM
2) Как следствие лучше интегрируется в существующую модель безопасности, так как ничего дополнительного не запускается
3) Работает на любой POSIX-совместимой платформе, так как используются только стандартные
компоненты (ndbm для хранения таблиц и конфигов, например)
4) Lookup hostname'ов происходит на этапе конфигурирования и не требует дополнительных временных задержек впоследствии. Далее поиск правила происходит очень быстро по хешу.
5) Корректно работает с любыми адресами (не только IPv6 и Ipv4), правда маска поддерживается только для последних двух. Т.е. её можно использовать с любыми сетевыми протоколами (даже самопальными, если они корректно интегрированы в стек)
6) Может работать вообще без firewall и с firewall не поддерживающем таблиц
7) Работает с абсолютно любыми сервисами (т.к. через PAM).---------------------------------------------------------------
Пример настройки для FreeBSD:
# pam_af_tool ruleadd -h '*' -a 15 -t 4y
# pam_af_tool ruleadd -h localhost -a unlimited -t 0
# pam_af_tool ruleadd -h 124.45.34.2/21 -a 8 -t 16H23M12S
# pam_af_tool ruleadd -h 207.46.0.0/16 -a 5 -t 15H -l '/sbin/ipfw add
100 deny all from $PAM_RHOST to any'И всё! Никаких демонов etc..
>1) Быстрее, так как не требует дополнительного сканирования логов и работает на
>уровне PAM
Оно не сканирует логи, а слушает pipe в syslogd
>2) Как следствие лучше интегрируется в существующую модель безопасности, так как ничего
>дополнительного не запускается
Оч. спорный вопрос. Требует наличия PAM авторизации в используемом сервисе.
>3) Работает на любой POSIX-совместимой платформе, так как используются только стандартные
>компоненты (ndbm для хранения таблиц и конфигов, например)
Конфиги хранятся в текстовом файле, таблицы - в ipfw. Работа на любой posix (кстати, я не уверен, что pam описан в posix) мне просто не требовалась
>4) Lookup hostname'ов происходит на этапе конфигурирования и не требует дополнительных временных
>задержек впоследствии. Далее поиск правила происходит очень быстро по хешу.
Простите, какой lookup? никакая работа с dns не производится. скорость поиска во внутренних структурах настолько быстр, что делать хеш я не вижу смысла. Как и не вижу проблем его сделать в случае необходимости.
>5) Корректно работает с любыми адресами (не только IPv6 и Ipv4), правда
>маска поддерживается только для последних двух. Т.е. её можно использовать с
>любыми сетевыми протоколами (даже самопальными, если они корректно интегрированы в стек)
Данная задача не была для меня актуальна. Да и что значит "корректно интегрированы в стек"?
>
>6) Может работать вообще без firewall и с firewall не поддерживающем таблиц
>
>7) Работает с абсолютно любыми сервисами (т.к. через PAM).
В случае если сервис обращается к PAM. Вот вам пример ситуаций при которых не происходит обращения к PAM:
http auth, подбор пользователей в rcpt-to, пользователи ssh которых нет в allow users... Уверен, что таких ситуаций превеликое множество
>
>---------------------------------------------------------------
>Пример настройки для FreeBSD:
> # pam_af_tool ruleadd -h '*' -a 15 -t 4y
> # pam_af_tool ruleadd -h localhost -a unlimited -t 0
> # pam_af_tool ruleadd -h 124.45.34.2/21 -a 8 -t 16H23M12S
> # pam_af_tool ruleadd -h 207.46.0.0/16 -a 5 -t 15H -l '/sbin/ipfw
>add
>
>100 deny all from $PAM_RHOST to any'
>
>И всё! Никаких демонов etc..
Я не вижу каким образом правило с ipfw исчезнет через n минут. И кроме того, я считаю, что таблицы в данном случае много уместнее. Дополнительно я хотел бы подчеркнуть, что я совершенно не умаляю достоинст вышеописанной тулзы, просто я считаю, что у них несколько разная идеология, и как следствие - область применения.
>Я не вижу каким образом правило с ipfw исчезнет через n минут.
-t ;-)
>И кроме того, я считаю, что таблицы в данном случае много
>уместнее. Дополнительно я хотел бы подчеркнуть, что я совершенно не умаляю
>достоинст вышеописанной тулзы, просто я считаю, что у них несколько разная
>идеология, и как следствие - область применения.
Согласен.PAM есть в X/Open, что сейчас является POSIX 2004.
PS: мой первый ответ был по поводу pam_abl;-)
Не понятно зачем такое писать на С ...
Попробую обьяснить.
к данной утилите у меня перед написанием были такие требования:
1) По возможности не требовать дополнительного ПО - чтобы иметь возможность ставить его даже на бездисковые роутеры.
2) Чтобы утилита занимала минимум памяти и работала быстро. Часть серверов которые мне приходится администрировать сделаны из весьма и весьма старого железа и перегружать их дополнительно у меня нет желания.
3) Утилита не должна вызывать внешних программ. Собственно, по причине 2). А писать пол RAW_SOCKET на perl или python я бы не рискнул. К тому же так я просто использовал немного модифицированный код ipfw2.c.
4) Утилита должна быть максимально безглючна и крайне проста в отладке. Так тот же security/sshit (perl) через 3-4 дня по невыясненным причинам просто переставал выносить плохие ip из конфигов. Подозреваю, что какой-то leak. В C подобное лично мне проще контролировать.
Собственно, кроме того я не вижу причин почемку подобное не может или не должно писаться на C :)
я вот такой штукой пользуюсь
http://denyhosts.sourceforge.net/index.html
ыы, а ктото еще пароли в ssh юзает? по ключам логониться не судьба?
>ыы, а ктото еще пароли в ssh юзает? по ключам логониться не
>судьба?А почитать описание новости внимательнее - не судьба? Оно, совершенно не только для ssh.
Впрочем, я использую утилиту и на тех хостах, где примению key based auth. Как минимум мне не нравится наблюдать в логах постоянные попытки логинов, да и безполезного трафика/нагрузки на сервер это добавляет. Опять же иногда теже самые ip начинают долбить ftpd/smtpd.
Поставил, потестил. Работает замечательно. Автору спасибо % ))) Какая конкретно нужна помощь ?
Спасибо и Вам за хороший отзыв :) Помощь требуется следующая:
1) доведение до ума howto и перевод их на английский.
2) Написание man`ов.
Ок. На выходных займусь ; ))))
а чем вас sshlockout не устроил ?
>а чем вас sshlockout не устроил ?
Ну честно говоря - всем.1) ssh only. При этом regexp`ы не используются, а шаблоны вкомпилины в исходниках (как и прочие данные, btw).
2) Внешний запуск ipgw.
3) Утилита добавляет правила в firewall, а не адреса в таблицу.
4) При рестарте утилиты все блокировки удаляются.
решпект, надеюсь до стадии порта прога таки дойдет. После отпуска буду ставить/пробовать.
в который раз изобретение велосипеда.
Вам бы только попИсать на форуме?
Да такие решения не новы
но данное решение, с точки зрения юзабилити гораздо лучше
чем оно лучше того же sshit?
Грамотны разработчик перед написанием чего-то нового исследует уже созданное до него и задается вопросом "а чего не хватает? что я могу сделать лучше?" Вот и объясните мне что же здесь лучше: гибкая настройка под используемый фаерволл (pf, ipfw, ipfw2, ...)? возможность "налету" исправить/добавить/изменить регулярное выражение, простота исправления кода и отладки (в перловом скрипте достаточно перзапустить итерпретатор, в C - каждый раз компилировать, об отладке я уж молчу). А уж когда встает вопрос подвесить удаленно - неизвестно что подсоединять на авторизацию очень "нехочется".Вот вы, господин эксперт, и объяните в каких пунктах я не прав.
Давайте попробую ответить. И так, перед написанием этой программы я достаточно долго исследовал уже написанное. В том числе и security/sshit. Более того, именно утилита security/sshit наиболее точно подходила под мои нужды и явилась прототипом bruteblock.После установки security/sshit на нагруженный и постоянно атакуемый сервер через некоторое, причём весьма небольшое, время в системе закончились семафоры! При этом, естетственно, sshit перестал нормально работать угрожая другим сервисам. Через некоторое время я нашёл причину leak`а о чём написал автору и оформил PR - http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/100726 . Автор мне так и не ответил, причём автор патча писал ему и ранее с тем же успехом. Но и это не всё. После данного патча sshit перестал кушать семафоры, но ~ через 3 дня процесс janitor перестал удалять ip из блеклиста.
Причину я так и не понял, полагаю, что проблемы ipc между демоном и сервисом syslog. Учитывая недоступность автора и глюки в работе - я решил отказаться от данной утилиты.Теперь по поводу сравнения sshit/bruteblock - давайте я попробую его сделать:
недостатки bruteblock vs sshit:
* работает только с ipfw2 (в будущем также планирую поддержку pf).преимущества bruteblock vs sshit:
* не требует IPC демона и основного процесса так как время жизни правила хранится непосредственно в таблице ipfw.
* Регулярное выражение хранится в конфигурационном файле, что позволяет быстро его менять и запускать несколько процессов работающих с логами при одном демоне.
* Не запускает внешних скриптов или программ.
* кушает совсем мало памяти, не жрёт разделяемые ресурсы.
* в любой момент можно посмотреть список заблокированых хостов, время жизни блокировки, удалить или добавить блокировку руками.
* просто нормально работает ;-)По поводу отладки C кода - совершенно не вижу в этом никаких проблем, на мой взгляд при системном програмировании как раз C код на порядок улобнее в отладке чем код на интерпретируемых языках.А что ставить на сервер решать только админу, прекрасно помня что автор не несёт ответственности за любые последствия использования утилиты.
>Вот вы, господин эксперт, и объяните в каких пунктах я не прав.
Ну вот блин, в в соседней теме флейм на 90 сообщений php vs *, теперь предлагают от C отказаться. Приехали. Аргумент меня просто убил - `каждый раз компилировать'.
а слова "Bourne Shell" наверное вообще в кому вгоняют
Хочу пожелать автору удачи и сил довести дело до порта! Хорошая штука!
>Хочу пожелать автору удачи и сил довести дело до порта! Хорошая штука!
>спасибо )
Создается впечатление, что самые кульные программеры живут на Украине!
а fail2ban не пробовали?
http://fail2ban.sourceforge.net/
Нет. Меня огорчило требование питона и, кроме того, показалось, что он более для linux.
To Samm: На выходных займусь : ))
fail2ban медленнее.
>[оверквотинг удален]
>ip злоумышленников в таблицу firewall ipfw2. Через некоторое,
>определённое пользователем, время программа удаляет их из этой таблицы.
>
>
>Использование регулярных выражений позволяет использовать утилиту для
>практически любой службы. Утилита написана на C и не использует вызова
>внешних программ, работая с таблицами IPFW2 через RAW SOCKETS API.
>
>URL: http://samm.kiev.ua/bruteblock/
>Новость: http://www.opennet.me/opennews/art.shtml?num=7984поставил на freebsd 6.2 для proftpd - не пашет (ставил из портов)
конфиги не правил, добавил правило в фаер. table\(1\) ниразу не заполнилась
>[оверквотинг удален]
>>Использование регулярных выражений позволяет использовать утилиту для
>>практически любой службы. Утилита написана на C и не использует вызова
>>внешних программ, работая с таблицами IPFW2 через RAW SOCKETS API.
>>
>>URL: http://samm.kiev.ua/bruteblock/
>>Новость: http://www.opennet.me/opennews/art.shtml?num=7984
>
>поставил на freebsd 6.2 для proftpd - не пашет (ставил из портов)
>
>конфиги не правил, добавил правило в фаер. table\(1\) ниразу не заполниласьПоздравляю. Программа отлично работет на 6.2, как и на других версиях BSD
mmisteras, у меня была такая же ситуация, обратился к автору, он указал направление поисков проблемы. В итоге всё просто - было два одинаковых селектора в syslog.conf с разными action'ами :)
(см. забавы ради патч http://lists.freebsd.org/pipermail/freebsd-ports-bugs/2006-O...)Всё заработало, как обещано, но возник такой вопрос: если subj ищет сообщения определённого вида, то бишь соответствующие регулярным выражениям в конфиге, куда деваются остальные? Те, что писались раньше в auth.log теперь просто отбрасываются что ли?..
поставил из портов на 8.1
отличная штука. автору - спасибо