Дано: nginx, за ним - метапоисковик (публичная нода seeks), очень любимый неким бразильским ботнетом.
Требуется: банить ботов.
Попробую заюзать fail2ban, натравив его на access.log nginx'а. Однако трудность заключается в том, что запросы от ботов трудно отличить от обычных поисковых запросов. При этом невооружённым глазом ботов сразу видно, поскольку от них приходят только запросы одного вида, в то время как браузеры делают по нескольку разных запросов за раз (подгружают картинки, css, js и всё такое). Задачу решила бы возможность динамически добавлять хосты в белый список на какое-то время при обнаружении запросов, нетипичных для ботов, но, как я понимаю, fail2ban этого не умеет. Посоветуйте, каким образом такое можно было бы провернуть.
Борьба с ботами (fail2ban или?..)
Модераторы: SLEDopit, Модераторы разделов
-
Bizdelnick
- Модератор
- Сообщения: 21520
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Борьба с ботами
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
IMB
- Сообщения: 2567
- ОС: Debian
Re: Борьба с ботами
Bizdelnick писал(а): ↑27.02.2013 12:08Дано: nginx, за ним - метапоисковик (публичная нода seeks), очень любимый неким бразильским ботнетом.
Требуется: банить ботов.
Если в Бразилии нет ваших пользователей, то, как пример, geoip, но это конечно не самый изящный способ.
-
Bizdelnick
- Модератор
- Сообщения: 21520
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Борьба с ботами
У меня нет полной уверенности, что ботнет ограничен территорией Бразилии. Да и банить страну с двухсотмиллионным населением не хочется.
Потом, сегодня - бразильцы, завтра китайцы подтянутся, а там и наши набегут.
Потом, сегодня - бразильцы, завтра китайцы подтянутся, а там и наши набегут.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
dobs
- Сообщения: 175
- ОС: Fedora
Re: Борьба с ботами
Как вариант ограничить число коннектов с подсети
+ http://habrahabr.ru/post/139931/
+ http://habrahabr.ru/post/139931/
Home server
Latest Fedora
MB Intel BLKD945GCLF2 Atom 330
2 Gb RAM
500 GB RAID 1
Smolts
Linux registered user #545937
Latest Fedora
MB Intel BLKD945GCLF2 Atom 330
2 Gb RAM
500 GB RAID 1
Smolts
Linux registered user #545937
-
Bizdelnick
- Модератор
- Сообщения: 21520
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Борьба с ботами
dobs писал(а): ↑27.02.2013 17:39Как вариант ограничить число коннектов с подсети
+ http://habrahabr.ru/post/139931/
Беда в том, что в силу описанных выше причин браузер устанавливает больше соединений, чем бот.
А ссылка интересная, спасибо. Я думал поискать какие-нибудь модули к nginx'у, но остановила природная лень, вошедшая в конфликт с потребностью пересобирать nginx. Возможно, таки прибегну к этому варианту.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Борьба с ботами
ИМХО это же тривиальный скрипт, вся ценность которого вовсе НЕ в самом скрипте, а в богатом наборе определённых правил. Если у вас какое-то особое правило, что вам стоит написать подобный скрипт самостоятельно? ИМХО быстродействия даже у bash'а хватит.
-
Bizdelnick
- Модератор
- Сообщения: 21520
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Борьба с ботами
Мешает главным образом джастфофанность проекта и большая загрузка на основной работе. Будет время - может и напишу, или fail2ban допилю.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
dobs
- Сообщения: 175
- ОС: Fedora
Re: Борьба с ботами
Дет встречал в каком то описании модулей толи просто против ботов толи модулей под nginx в общем там была тема что умеет банить если юзер агент часто меняется, но прикол в том что если с офиса сидят то попадут в бан... вообще надо не банить ИМХО, а выводить капчу...
Home server
Latest Fedora
MB Intel BLKD945GCLF2 Atom 330
2 Gb RAM
500 GB RAID 1
Smolts
Linux registered user #545937
Latest Fedora
MB Intel BLKD945GCLF2 Atom 330
2 Gb RAM
500 GB RAID 1
Smolts
Linux registered user #545937
-
Bizdelnick
- Модератор
- Сообщения: 21520
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Борьба с ботами
Вариант, хотя нет гарантии, что в будущем не появятся более тупые боты, не меняющие UA. Или, наоборот, более хитрые...
А кому на фиг нужен поисковик с капчей?
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
dobs
- Сообщения: 175
- ОС: Fedora
Re: Борьба с ботами
Не ну не всем выводить а только подозреваемых в "ботовстве", дабы у него была возможность разблокировать себя 
Home server
Latest Fedora
MB Intel BLKD945GCLF2 Atom 330
2 Gb RAM
500 GB RAID 1
Smolts
Linux registered user #545937
Latest Fedora
MB Intel BLKD945GCLF2 Atom 330
2 Gb RAM
500 GB RAID 1
Smolts
Linux registered user #545937
-
McSim
- Сообщения: 419
- Статус: Экспериментатор
- ОС: заGNU/Linux Debian
Re: Борьба с ботами
Bizdelnick
Может натолкнет на мысль...
Для защиты от ботов по ssh имеются такие возможности нетфильтра (по карйней мере я это часто применяю):
Это такой топорный вариант, но думаю, если можно выявить какую-то логику в работе ботов по отношению к обычному клиенту, то можно это описать нетфильтру.
Да, трудоемко это и тяжело траблешутится в случае проблем, да и от fail2ban не далеко отличается, но все же...
Интересные идеи можно встретить тут.
Может натолкнет на мысль...
Для защиты от ботов по ssh имеются такие возможности нетфильтра (по карйней мере я это часто применяю):
Код: Выделить всё
# Создаем цепочку для проверки попыток соединений на защищаемый порт
iptables -N ssh_brute_check
# Если за последние 10 минут (600 секунд) с одного адреса было 4 или более новых соединений — блокируем этот адрес
iptables -A ssh_brute_check -m conntrack --ctstate NEW -m recent --update --seconds 600 --hitcount 4 -j DROP
# В противном случае — разрешаем, и при этом заносим в список
iptables -A ssh_brute_check -m recent --set -j ACCEPT
# Очищаем цепочку INPUT (если необходимо)
iptables -F INPUT
# Разрешаем входящие пакеты по установленным соединениям
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Все попытки открыть новое соединение по порту 22 (ssh) направляем на проверку в созданную цепочку
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 22 -j ssh_brute_chec
# устанавливаем по-умолчанию запрещающую политику
iptables -P INPUT DROPЭто такой топорный вариант, но думаю, если можно выявить какую-то логику в работе ботов по отношению к обычному клиенту, то можно это описать нетфильтру.
Да, трудоемко это и тяжело траблешутится в случае проблем, да и от fail2ban не далеко отличается, но все же...
Интересные идеи можно встретить тут.
-
Bizdelnick
- Модератор
- Сообщения: 21520
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Борьба с ботами
McSim, спасибо, но это не то. Тут надо анализировать HTTP-запросы, одним iptables не обойтись. А что касается ssh, я использую более простой вариант:
Код: Выделить всё
-A INPUT -p tcp -m tcp --dport 22 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m limit --limit 1/min --limit-burst 1 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROPПишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |