Борьба с ботами (fail2ban или?..)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21520
Статус: nulla salus bello
ОС: Debian GNU/Linux

Борьба с ботами

Сообщение Bizdelnick »

Дано: nginx, за ним - метапоисковик (публичная нода seeks), очень любимый неким бразильским ботнетом.
Требуется: банить ботов.

Попробую заюзать fail2ban, натравив его на access.log nginx'а. Однако трудность заключается в том, что запросы от ботов трудно отличить от обычных поисковых запросов. При этом невооружённым глазом ботов сразу видно, поскольку от них приходят только запросы одного вида, в то время как браузеры делают по нескольку разных запросов за раз (подгружают картинки, css, js и всё такое). Задачу решила бы возможность динамически добавлять хосты в белый список на какое-то время при обнаружении запросов, нетипичных для ботов, но, как я понимаю, fail2ban этого не умеет. Посоветуйте, каким образом такое можно было бы провернуть.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Борьба с ботами

Сообщение IMB »

Bizdelnick писал(а):
27.02.2013 12:08
Дано: nginx, за ним - метапоисковик (публичная нода seeks), очень любимый неким бразильским ботнетом.
Требуется: банить ботов.

Если в Бразилии нет ваших пользователей, то, как пример, geoip, но это конечно не самый изящный способ.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21520
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Борьба с ботами

Сообщение Bizdelnick »

У меня нет полной уверенности, что ботнет ограничен территорией Бразилии. Да и банить страну с двухсотмиллионным населением не хочется.
Потом, сегодня - бразильцы, завтра китайцы подтянутся, а там и наши набегут.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
dobs
Сообщения: 175
ОС: Fedora

Re: Борьба с ботами

Сообщение dobs »

Как вариант ограничить число коннектов с подсети
+ 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
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21520
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Борьба с ботами

Сообщение Bizdelnick »

dobs писал(а):
27.02.2013 17:39
Как вариант ограничить число коннектов с подсети
+ http://habrahabr.ru/post/139931/

Беда в том, что в силу описанных выше причин браузер устанавливает больше соединений, чем бот.
А ссылка интересная, спасибо. Я думал поискать какие-нибудь модули к nginx'у, но остановила природная лень, вошедшая в конфликт с потребностью пересобирать nginx. Возможно, таки прибегну к этому варианту.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Борьба с ботами

Сообщение drBatty »

Bizdelnick писал(а):
27.02.2013 12:08
Попробую заюзать fail2ban

ИМХО это же тривиальный скрипт, вся ценность которого вовсе НЕ в самом скрипте, а в богатом наборе определённых правил. Если у вас какое-то особое правило, что вам стоит написать подобный скрипт самостоятельно? ИМХО быстродействия даже у bash'а хватит.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21520
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Борьба с ботами

Сообщение Bizdelnick »

drBatty писал(а):
28.02.2013 07:47
Если у вас какое-то особое правило, что вам стоит написать подобный скрипт самостоятельно?

Мешает главным образом джастфофанность проекта и большая загрузка на основной работе. Будет время - может и напишу, или fail2ban допилю.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
dobs
Сообщения: 175
ОС: Fedora

Re: Борьба с ботами

Сообщение dobs »

Дет встречал в каком то описании модулей толи просто против ботов толи модулей под nginx в общем там была тема что умеет банить если юзер агент часто меняется, но прикол в том что если с офиса сидят то попадут в бан... вообще надо не банить ИМХО, а выводить капчу...
Home server
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: Борьба с ботами

Сообщение Bizdelnick »

dobs писал(а):
28.02.2013 13:23
Дет встречал в каком то описании модулей толи просто против ботов толи модулей под nginx в общем там была тема что умеет банить если юзер агент часто меняется

Вариант, хотя нет гарантии, что в будущем не появятся более тупые боты, не меняющие UA. Или, наоборот, более хитрые...

dobs писал(а):
28.02.2013 13:23
вообще надо не банить ИМХО, а выводить капчу...

А кому на фиг нужен поисковик с капчей?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
dobs
Сообщения: 175
ОС: Fedora

Re: Борьба с ботами

Сообщение dobs »

Не ну не всем выводить а только подозреваемых в "ботовстве", дабы у него была возможность разблокировать себя :)
Home server
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: Борьба с ботами

Сообщение McSim »

Bizdelnick
Может натолкнет на мысль...
Для защиты от ботов по 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: Борьба с ботами

Сообщение Bizdelnick »

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
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: