Обновить

Созданный инженером сайт почти сразу вывели из строя боты-парсеры

Время на прочтение4 мин
Охват и читатели64K
Всего голосов 44: ↑37 и ↓7+43
Комментарии148

Комментарии 148

а передача cat access.log | grep /commit/ | cut -d " " -f 1 для мгновенной блокировки всех

понимаю что не решаю проблему а предлагаю свой костыль.. но почему бы не срать лог в stdout вместо файла и не читать его из journald на лету? так ты не зависишь от скорости записи в /var/log, journald отдаст тебе новую запись даже если не успел ещё её сбросить на диск. ну а journald можно читать не только через journalctl но и по http что ещё немного бустанёт весь пайплайн.

journald отдаст тебе новую запись даже если не успел ещё её сбросить на диск

За счёт какой магии?

являясь посредником между "читателем" и "писателем" получив свежую запись от процесса он конечно же содержит её в памяти, и вне зависимости от того успел он сохранить данные на диск или нет он может эту запись уже отдать по запросу если такой есть. это не магия, это нормальная работа journald. это же не субд чтобы не считать запись валидной до тех пор пока не убедится что она надёжно сохранена на диске.

Как он этот запрос получит-то? У него ж даже сокета для этих целей нет...

Есть, просто выключен по дефолту:

sudo systemctl start systemd-journal-gatewayd.{socket,service}

curl -s http://127.0.0.1:19531/entries

curl -s "http://127.0.0.1:19531/entries?UNIT=sshd.service"

curl -s -H "Accept: application/json" "http://127.0.0.1:19531/entries?UNIT=sshd.service"

В качестве эксперимента я делал на основе этого гейтвея схему в которой f2b живёт на одном хосте, а сервис который он защищает на другом. С этим http интерфейсом можно работать почти так же как с journalctl получая постоянный поток или определённое кол-во строк по желанию, можно так же фидьтровать и всё такое.

Но вообще в данном контексте под запросом можно понимать даже пинание journalctl

Это отдельный сервис, какой магией он получит от journald события, которые ещё не были записаны в файлы? А никакой, он читает только те события, которые уже были записаны.

Но вообще в данном контексте под запросом можно понимать даже пинание journalctl

А этот journalctl что, показывает события, которые не были записаны в файлы? Чтобы такое сделать - нужно ему сначала какой-то магией эти события от journald получить, а магии не бывает.

тогда как это работает когда локальный стораж journald вообще выключен в конфиге?

Через файлы лежащие в /run.

который tmpfs тоесть в памяти. с чего я собственно и начал..

Только вот во время нормальной работы сервера записи в tmpfs не являются записями которые "journald не успел сбросить на диск". Это записи, которые journald решил не сбрасывать на диск вовсе.

в данном контексте нет никакой разницы.
но с "не успел сбросить на диск" это тоже работает, и вы можете это лично проверить
создайте VM, сделайте сервис который будет срать в лог чем угодно, хоть временем хоть рандомом, но чем длиннее строка тем лучше, запустите journalctl -f после чего искуственно снижайте скорость записи на виртуальный диски наблюдайте. в какой-то момент лог перестанет успевать писаться на диск, но при этом продолжит выводиться без проблем и задержек.

я к сожалению не достаточно хорош чтобы найти в коде systemd как это работает и засчёт чего получается, но я наблюдал это вживую и поэтому так уверенно говорю.

Это вы в своём эксперименте наблюдали работу файлового кеша...

который ВНЕЗАПНО в памяти.. вам не кажется что этот разговор делает уже не первый оборот по одному и тому же кругу?

Но это не адресное пространство journald. Напоминаю с чего начался спор:

journald отдаст тебе новую запись даже если не успел ещё её сбросить на диск

Если вам логи отдаёт файловый кеш ОС - нельзя сказать что их отдаёт journald.

Да какая разница чьё это адресное пространство? Задача выполняется - вот что главное.

И нет, логи отдаёт именно journald, и не важно берёт он их из какого-то своего буфера или файлового кеша ядра или получает с нибиру.

journald сложил логи в файлы и забыл про них, в процессе просмотра логов он вообще не участвует. А ваши сообщения выглядят так, как будто запрос на просмотр логов к нему уходит.

а что именно вы называете journald? потому что и утилита journalctl и демон gatewayd это всё часть journald который в свою очередь часть systermd. сказать что journald не учавствует можно только если вы содержимое /var/log/journal ковыряете чем-то максимально сторонним или вообще самописным.

Одноимённый демон, собирающий логи, конечно же.

Видимо в этом и кроется недопонимание, я говорю про весь комплекс по.

Это отдельный сервис, какой магией он получит от journald события, которые ещё не были записаны в файлы? А никакой, он читает только те события, которые уже были записаны.

Используя sd-journal api из libsystemd

Только вот это api точно так же читает файлы.

cat access.log | grep /commit/ | cut -d " " -f 1

Я один каждый раз удивляюсь этой избыточности? Зачет тут cat?
Можно же просто написать: grep /commit/ access.log | cut -d " " -f 1

Чисто теоретически такой вариант может работать быстрее, за счет того что чтение файла и фильтрация идут в разных потоках. А на практике - хз =)

Потому что в одной комманде `cmd --options access.log` а в другой `cmd -i access.log --options` а в третьей `cmd --options -f access.log` и если перепутаешь, она испортит файл.

Тогда как `cat access.log | cmd --options` работает везде одинаково и в него одинаково вставляются дополнения типа pv. Поэтому он экономит ограниченный ресурс – внимание оператора.

Человек просто любит кошек.

страные люди минусят за более кошерный подход. Даешь один вызов грепа вместо кат+ греп в каждую консоль!

Выше уже объяснили. cat FILE обезопасит исходный файл от случайных ошибок.

Ну вот представь, что сначала запускаешь команду, в которой отбираешь некоторые строки:

grep -i test file.txt

Потом решил, что надо не отбирать их, а изменить:

sed 's/test/TEST/' file.txt

И всё в порядке, если не забыл убрать -i. А вот если забыл или не знаешь, что только в первом случае -i — это --ignore-case, а во втором — это уже --in-place, и просто оставил опцию, то неожиданно для себя поменяешь исходный файл. «А cat file.txt |» позволяет избежать таких ошибок.

Мне кажется, что это от того, что люди однажды нагуглили последовательность команд и пользуются ей не особо задумываясь.

Тут предположили, что это это для пущей безопасности. Чтобы файл не испортить. Но испортить файл грипом -- это стараться надо. Да и способ такой, что cat не спасет.

Потому что cat access.log | sed '/commit/!d;s/ .*//g' быстрее :D

P.S.: простите за сарказм

cat access.log

tail -f ? Не слышали!

-f в скрипте для f2b? хмммм.......

Не знаю, как они там это запилили, но УМВР.

Ну тогда скрипт в студию

Труба в syslogd.conf позволяет обойтись без отдельного tail -f, но по факту делает то же самое — направляет выходящий из логгера поток на вход скрипта.

# syslogd.conf
auth.info;authpriv.info   |/bin/ban_intruders

# /bin/ban_intruders
egrep -o "Invalid user (\w+) from ([0-9.]+)$" | sed "s/Invalid user [[:alnum:]]* from \([0-9.]*\)/ban_ip \1; /" | sh

Курите маны, ибо они рулезь.

А, ну собсна да, результат тот же но подошди с другой стороны. Так да, так можно.

У всех такие проблемы, но пишут почему-то про "инженера", который забыл про индексы в БД или еще что-то типа такого

Передайте "инженеру", что это настраивается на межсетевом экране.

Обожаю снобизм на хабре! Судя по всему его работа это преподавание компьютерных наук, и никак не связана с всамделешной работой с серверами и сетями. Не вижу причин брать в кавычки особенности кривого перевода.

I’m an experienced software architect and took on various roles from agile coaching to tech lead. I’m a Doctor of Engineering Technology and Master of Computer Science. I’m a big Test Driven Development advocate. I teach software engineering techniques in both industry and academia. I also dabble in open source. Have a peek at my coding work.

Ещё лучше. Человек, позиционирующий себя как experienced software architect, Doctor of Engineering Technology and Master of Computer Science, не знает элементарных правил цифровой гигиены.

Как он живёт-то вообще, если у него сервер открыт кому попало? Уже лет 10 назад мамкины хакеры создавали значительную нагрузку и без всяких парсеров.

Кстати, железки, способные решать эти вопросы полностью автоматически, стоят не особенно дорого.

Ну вот вы знаете, а он не знает. И я не знаю, при том что разработчиком работаю 20 лет. Потому что занимаюсь совершенно другими вещами. Моих навыков администрирования серверов и инфобеза максимум хватит на тот же fail2ban, но тут он, как видно из текста, не справляется.

Если я чего-то не знаю, то я не удивляюсь тому, что мои попытки что-то сделать в области, в которой я не осведомлён, могут приводить к неожиданным результатам.

Я вот, например, не знаю в точности, как ремонтировать водопровод, и поэтому не удивлюсь, если я что-нибудь там откручу, и в результате хлынет фонтан воды. Но мне общеинженерной подготовки хватает, чтобы предвидеть такую возможность и не лезть с разводным ключом куда попало. А интернет посложнее водопровода будет.

"software architect, Doctor of Engineering Technology and Master of Computer Science" - "инженер подобен флюсу".
Есть же больщая зеленая кнопка для домохозяек "Сделать зашибись" - fail2ban.
Но вот беда - создатели fail2ban не расчитывали на многомегабайтные файлы логов.

Зачем на статике fail2ban, если только он не защищает ssh? Проблему можно решить невидимой катпчой, как например

Потому что капча это L7, а fail2ban - L2.
И где Вы увидели, что я за fail2ban?

/zanuda mode on
Ну вообще не L2, а обычно L3 если подразумевается что f2b работает в паре с файроволом. А так, это вообще IPS (intrusion prevention software), которое может быть проинтегрирована не только с файрволом но и с другими системами по желанию.
/zanuda mode off

Вы исправляете ошибку - какое же это занудство? Это отлично, что кто-то еще в состоянии отличить L2 от L3.

Ошибка допущена умышленно). Как тест на понимание оппонентом сущности вещей.

Стояла ли перед вами такая же задача, как стояла перед персонажем из статьи? Если стояла, как вы её решили?

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

Блокировать заранее все диапазоны ip-адресов, принадлежащие облачным провайдерам.

Вы часом не в РКН работаете? :-)

В начале всей это движухи РКН, куча самых хитрых ломанулись брать дешёвые хостинги, чтобы через них прокидывать впн и сокс-тунели.

Очень быстро оказалось, что до их этим годами занимались спамеры, сканеры, парсеры, грабберы и прочая нечисть, так что на рынке вебразработки/сеошки /итп уже была практика банить нахрен этот ваш хецнер

Многие думали, что есть какой-то Свободный Интернет, куда их не пускает злой РКН, "а сбылось это".

К счастью, нет. Хотя методы администрования сетей у меня плюс-минус такие же, как и у них. Всё, что не разрешено - запретить, использовать whitelist и dpi-ем всё это присыпать))

У меня на небольшом сервере настроен сетевой экран, который заносит в бан на неделю адреса, постучавшиеся на любой закрытый порт.

В итоге любая попытка хоть что-то просканировать сразу идёт в бан и до fail2ban даже не доходит.

Можете, плиз, описать этот сетевой экран подробнее?
Я загуглил и пока только fail2ban нахожу.
Или это что-то самописное?

Свои правила в iptables, забаненные добавляются в список в ipset.

Ну и этот вариант не для публичного сайта, так как с доступностью сервера могут быть проблемы, подключающийся может оказаться на забаненном ip.

iptables
:INPUT ACCEPT [0:0]

# accept established, related
-A INPUT -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# accept trusted ips
# 
-A INPUT -s доверенный ip/32 -i eth0 -j ACCEPT

# drop invalid, untracked
-A INPUT -i eth0 -m state --state INVALID,UNTRACKED -j DROP

# drop from banned list
-A INPUT -i eth0 -m set --match-set banned src -j DROP

# accept service ports
# http
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
# https
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT
# ssh
-A INPUT -i eth0 -p tcp -m tcp --dport 5566 -j ACCEPT

# add others to ipset list
-A INPUT -i eth0 -m state --state NEW -m recent --set --name BANNED --mask 255.255.255.255 --rsource -j SET --add-set banned src

# drop others
-A INPUT -i eth0 -j DROP

То есть, с какого-нибудь популярного VPN к Вам не зайти?

Не понимаю смысл вопроса.

Ко мне можно зайти с любого VPN, если IP-адрес не в чёрном списке.

Есть ненулевая вероятность того, что с популярного VPN погут начать сканировать сайт или типа того. В результате чего, Вы забаните всех кто пойдёт с этого айпишника.

Так и есть, только VPN тут не при чём.

Это примитивная защита, но у меня забаннено постоянно около 10 тысяч адресов, то есть это какой-то ботнет. Лучше потеряю посетителя, чем получу взломанный сервер, у меня всё-таки не интернет-магазин.

Лучше или хуже, это уже Ваше дело, мне только один момент был интересен.

Передайте "инженеру", что это настраивается на межсетевом экране.

И каким же образом межсетевой экран получит список адресов для бана?

Желательно без применения платных решений.

Например, помощью механизма подсчета количества запросов новых соединений на 443/TCP и отправки в DROP слишком ретивых.

Это отсеет только самых глупых ботов, которые не способны удерживать постоянное соединение. Зато может ударить по нормальным пользователям за NAT.

Так этот мужик всё равно руками адреса вносит.

Не "вносит", а "внёс". Один раз. И у него после этого всё заработало. Зачем тут вообще межсетевой экран, чтобы был? Какое новое качество он добавит?

Он пишет, что у него тормозит компьютер. Логично фильтрацию трафика переложить в таком случае на МЭ.

Но так-то токсичного содержания в сетевом трафике много и помимо http.

Ну так подскажите недорогой межсетевой экран, способный фильтровать L7 трафик, вы ж специалист. А то получается как в анекдоте - "Вы меня ерундой не грузите. Я стратегией занимаюсь"

ZyXEL USG, например.

Что-то мне не удалось найти упоминания L7 фильтрации в описаниях на сайте производителя и сайтах маназинов. Она там точно есть?

Ещё сильно смущает упоминание ИИ для обеспечения безопасности. Звучит, конечно, круто (на самом деле нет), но оно точно не загнётся под нагрузкой ещё быстрее чем fail2ban?

L7 - это же не термин стандарта, а условное понятие авторов пакета для линукса. Функционально там такие возможности есть, а именно словом L7 их вряд ли называют в официальной документации.

По моему опыту, проблем с нагрузкой у таких устройств не было. Обеспечивают в пределах заявленного (пропускная способность указывается для каждой модели).

По поводу ИИ они скорее всего имеют в виду, что ИИ генерирует актуальные профили безопасности, которые рассылаются на у устройства по подписке (на Тайване явно читают Чжана). Раньше было то же самое без ИИ. Но можно подписку и не использовать.

В целом, очень хорошая железка, если нет задачи удовлетворить сертифицирующие органы.

L7 - это же не термин стандарта, а условное понятие авторов пакета для линукса.

Это именно термин стандарта - сетевой модели osi. На 7м уровне работает протокол HTTP, то есть L7 фильтрация в данном случае - это фильтрация HTTP запросов на основании их URL и заголовков.

Функционально там такие возможности есть, а именно словом L7 их вряд ли называют в официальной документации.

Да я и документацию найти на эту штуку не смог, только маркетинговые материалы. Потому и спрашиваю.

У меня есть большие сомнения, что http в том виде, как его понимает фильтр, следует относить к 7 уровню OSI. Так или иначе, железка выполняет некоторый dpi и принимает решения на основании полученной информации.

Вот руководство по одной из снятых с производства железок. Уже тогда там были http фильтры.

Разумеется, протокол продолжает относиться к уровню OSI независимо от того как его понимает конкретная железка.

Ну и "некоторый dpi" для современного веба явно недостаточен, как минимум L5 (он же TLS) нужно поймать и расшифровать чтобы увидеть хоть что-нибудь кроме имени домена.

Вот руководство по одной из снятых с производства железок. Уже тогда там были http фильтры.

Контент-фильтры для исходящего HTTP трафика. Не вполне представляю как нужно исхотриться, чтобы заменить ими fail2ban для входящего HTTP трафика.

Кстати, регулярная замена TLS сертификатов на межсетевом экране тоже "интересная" задача, которую ну вот вообще не хочется решать…

Для того, о чём пишет автор, вполне достаточно flood detection в ALP.

Однако можно двигаться более тонко через IDP. Вот там как раз могут использоваться профили безопасности, полученные от ИИ.

Ваш ход мысли, по-видимому, следует путём ненужных усложнений поставленной задачи. Бот перегружает компьютер автора трафиком. Это обстоятельство вообще не требует каких-то глубоких расследований, учитывая, что автор не обслуживает какую-то сверхнагруженную и особо надёжную систему. Выдал много запросов – отправляйся в бан. Принадлежишь к ботнету – отправляйся в бан.

Разумеется, протокол продолжает относиться к уровню OSI независимо от того как его понимает конкретная железка.

Стек TCP/IP вообще имеет весьма условную привязку к модели OSI. Когда придумывали http, он был всего лишь протоколом общения браузера с вебсервером для отображения видимых пользователем вебстраниц, и в таком качестве был отнесён к прикладному уровню. Но сейчас http в основном используется в качестве элемента предтавления для протоколов более высокого уровня.

Для того, о чём пишет автор, вполне достаточно flood detection в ALP.

Достаточно ли? Как я понял, нагрузка именно на сеть была небольшая, и в этом-то и проблема.

Выдал много запросов – отправляйся в бан.

Осталось найти способ посчитать эти запросы.

Принадлежишь к ботнету – отправляйся в бан.

Осталось найти достоверный список адресов, которые принадлежат ботнетам.

Стек TCP/IP вообще имеет весьма условную привязку к модели OSI.

Спасибо, я знаю. Но термин "L7 фильтрация" менее понятным от этого не становится.

Достаточно ли? Как я понял, нагрузка именно на сеть была небольшая, и в этом-то и проблема.

Ну практика показывает, что всё работает. Там эвристики-то простые.

Выдал много запросов – отправляйся в бан.

Осталось найти способ посчитать эти запросы.

Пакеты TCP на 80 порт.

Принадлежишь к ботнету – отправляйся в бан.

Осталось найти достоверный список адресов, которые принадлежат ботнетам.

Вот это и рассылает ИИ на основании мировой статистики. По тому же принципу, что DNSBL.

Но термин "L7 фильтрация" менее понятным от этого не становится.

Менее понятным не становится, однако к использованию не общепринят. Обычно сетевики говорят про DPI.

Существует у многих такое когнитивное искажение, что https якобы прямо маскирует-маскирует трафик. Да нет, все основные паттерны хорошо заметны по пакетам, из которых он состоит, а маскируются только детали содержания сообщений.

Пакеты TCP на 80 порт.

По этой метрике загрузка (upload) одной картинки на сервер сойдёт за тысячу запросов парсера.

Вам будет довольно тяжело подобрать такие параметры, которые отсекут ботов, но пощадят легитимного пользователя, заливающего новую статью в гит по https.

Менее понятным не становится, однако к использованию не общепринят. Обычно сетевики говорят про DPI.

Сетевики - да, а вот сисадмины нет. Надо учиться понимать и тех, и других.

Вам будет довольно тяжело подобрать такие параметры, которые отсекут ботов, но пощадят легитимного пользователя, заливающего новую статью в гит по https.

Обычная задача байесовской классификации. Естественно, лично я вам тут формулу не напишу, но на обучающей выборке в триллионы запросов, имеющейся у производителя сетевого оборудования, это дело можно отточить до совершенства.

А, воооот что вы предлагаете… Да, в таком виде оно может сработать.

Хотя заменить fail2ban на что-нибудь менее тормозящее выглядит более простой задачей.

у меня для таких посетителей дефолтный локейшен выглядит вот так:

        location / {
            return 301 https://ash-speed.hetzner.com/10GB.bin;
            limit_except GET { deny  all; }
         }

почти наверняка не работает, но я очень надеюсь что кто-нибудь из них таки скачал пару раз.

правда и сайт у меня не совсем публичный, но почему бы и нет.

Я делаю редирект на гуголь с запросом "RickRoll". На 404, кстати, тоже.

Уже как правило игнорируют редиректы на сторонние ресурсы. Раньше, да иногда срабатывало, было видно, что плотность запросов падает.

Заголовок рулит. Статья "у динозавра большие яйца"- привлечет внимание.

"ГОЛУБЫЕ ели В КРЕМЛЕ!" (реальная передовица из нулевых)

Если не ошибаюсь, МК

"не только ели, но и пили" (ц)

Зашёл туда. Там статика банальная. CF бесплатный навесить, и вопрос решён. Даже без него сильно сомневаюсь, что адекватно настроенный сервер так легко пауками уложить. Плохому танцору скрейперы мешают

Возможно причина в "размещался на небольшом сервере"? Сейчас же можно http сервер поднять хоть на ESP32 размером с монету, правда по наличию fail2ban и iptables предположу, что там мог быть старый роутер на openwrt. На таких малых системах, светиться напрямую в инете, сейчас довольно глупо - поисковики и боты будут реально загружать сканирующим трафиком проц и память на всю катушку.

Бесплатная CF поможет отсечь половину нагрузки, но тогда управление доменом ты по сути отдаешь корпорации и теряется весь шарм подкроватного хостинга. Так можно ведь дойти и до просто ведения бложика на GitHub Pages или поднятия бесплатного контейнера на Render.com. Но интереснее то возиться со слабой железкой у себя дома.

хоть на ESP32 размером с монету

я тоже так подумал но судя по ip это немелекий хостинг

у него самая главная часть в конце месяца, счет за трафик сверху плана=)

На OVH после создания машины сразу начинаются сканы портов и попытки входов. Господину доктору/мастеру Ит хотя бы антидос в панельке бы включить, хотя он там для большинства тарифов из коробки бесплатно активируется. Там безлимит по трафику.

На OVH после создания машины сразу начинаются сканы портов и попытки входов. Господину доктору/мастеру Ит хотя бы антидос в панельке бы включить, хотя он там для большинства тарифов из коробки бесплатно активируется. Там безлимит по трафику.

Везде начинаются. Причём по ssh - теперь сканы распределённые и ходят подсетками. (Куда и отправляются в долгосрочный бан подсетками по итогам дня).

Я так понял, не справляется не веб-сервер, а как раз антиспам обвес для него. Т.е. будь там голый веб, может его один раз отсканили и свалили. А тут ломятся до победного.

Как я понял, у него гити (селфхостед гит а-ля легковесный гитхаб) загнулся и ф2б. Гити у него торчал в интернет начинкой публичных репозиториев, судя по всему, чему пауки и обрадовались. А ф2б просто подавился логами.

AppleWebKit/537.36 (KHTML, например, Gecko)

Слово «например» тут не переводится, это значение заголовка, иначе тогда нужно всё на русский транслировать.

тащемта Gecko например AppleWebkit.

Интернет просто кишит пауками. Пауков стало так много, что как только поставишь любую, даже самую неприметную банку (сервер), они сразу в нее набьются.

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

99% интересного материала лежит у крупняка, так его-то и надо парсить, в чём смысл просевать тонны песка в Web-пустыне?

Например, ребята, которые делают вот такие картинки:

Статья и действия инженера как будто бы лет так 10-15 назад. Сайт банка и без хороший системы фильтрации...

Сайт банка

сдается мне "Акелла промахнулся" :)

Магия подсчета:

12 - 3 = 13. Ай да Хабр ай да сукин сын eventual consistency или самонакрутка?

https://habr.com/ru/docs/help/karma/


Пользователям, внёсшим большой вклад в развитие сообщества, доступна дополнительная привилегия — вес их голоса при оценке публикаций отличается от веса голоса остальных членов сообщества. В частности, обладатели значков «Автор», «Старожил» и «Звезда», в случае положительной оценки публикации, добавляют ей +2 пункта рейтинга. А обладатели значка «Легенда» одним голосом добавляют публикации сразу +3 пункта рейтинга.

Ну так и должны они в плюсе отображаться, нет? Т.е. 16 - 3 = 13 . Либо фичу пилил альтернативно одаренный человек или КГБшник в отставке.

Когда-то так и было. Потом стали считать не приращение рейтинга, а именно число жмякнувших плюс и минус.

Всё правильно сделано - есть карма текста, влияющая на рейтингование и количество проголосовавших, что имеет самостоятельную ценность.

Да проcтейший пароль на nginx решил бы все его проблемы за минуты. До gitea и fail2ban может даже не дошло бы.

Хм. Может особо настойчивым ботам время от времени выдавать сгенерированный html объёмом в 1 гигабайт? Пусть тратят свои ресурсы на его парсинг.

Можно и так, но тогда бот будет перекинут на другой домен и вообще это не html, а я предлагаю отдавать со своего сервера страницу весом в гигабайт вместо обычной, страницу при этом генерировать налету чтобы она формально соответствовала стандарту html, но не несла никакого полезного смысла. Из минусов - это всё равно будет тратить ресурсы и трафик.

Гзиповую бомбу.

Зачем генерировать? Отдавать один и тот же огромный файл на любой запрос.

Боты могут вполне могут использовать residence прокси. По UA пропускать конечно неправильно. Кстати, интересно что UA свежий, уже выпадет из сценария ловить тупых ботов у которых забит руками старый не-LTS UA.

Также есть CURL по TLS-fingerprinting притворяющийся актуальными браузерами. И тоже минус к фильтрации.

Короче, проблема поднята интересная. Справедливо замечено, что и сервер может быть не рассчитан ботов да и для разработчика это доп нагрузка. Расстраивает только спец. олимпиада в комментариях.

Там минимальный 4 евровый сервер это 4 ядра, 8гб озу и 400 Mbps unlimited сетка, Оно по умолчанию с антидосом в коробке.

DDoS защита от массированных практически одинаковых запросов, но тут же очень похожие на легитимных пользователей запросы.

Т.е. по хорошему хостеры должны предлагать к AntiDDoS еще AntiParserBot.

Домен висит на чужих NS веб-студии, а не Cloudflare. IP общий — на нём ещё 4 каких то сайта. Старый уязвимый Nginx 1.18 + fail2ban изначально настроен некореткно. Может даже панели управления нет. По IP форма входа Radicale, CalDAV которого провоцирует ботов на сканирование, а может другие сайты стали причиной нашествия. Статичный сайт на Hugo раскатывается gitea и не выдерживает нагрузку. Тут дело даже не в железке а в софте и специалисте.

Боты очень умные стали. Могут имитировать поведение валидного пользователя. Могут менять время между запросами, могут тупо с разных адресов последовательно перебирать (хорошо видно по акцес логам, прямо по порядку по ссылкам на странице идут, но с разных ip). Простой дефолтный антиддос поможет только от простых тупых ботов, да впрочем такое делается на коленке штатными средствами.

Когда не стоит цель защиты от сграбливания, а нужно только защитить ресурсы от перегрузки, то заставить бота имитировать поведение, паузы, и соответственно нагрузку реального пользователя – это уже решение проблемы. На этом и основаны простые капчи-чекбоксы. Бот без проблем сможет имитировать движение мыши руками и пройти её. Но пока бот это сделает, он потратит столько времени, что его нагрузка станет неопасной.

Но пока бот это сделает, он потратит столько времени, что его нагрузка станет неопасной.

Это если один бот. А если их тысяча?

А почему нельзя защитить ресурсы от перегрузки тупо серверной паузой? Отдаём, допустим, страницу не сразу, а с задержкой в секунду - юзер не особо и заметит, а у бота будет автоматический лимит на 1 страницу в секунду?

Потому что везде всяческие жриакты на фронте. Открытие страницы – это сотня запросов на двадцать разных ресурсов, и если везде поставить по секунде – то пользователь напьётся раньше, чем дождётся страницу. А если по 10 миллисекунд – то это не поможет от ботов.

Ну, понятно, что не в тупую "1 запрос = 1 секунда", а какой-то, типа, консолидированный запрос вида "базовый урл + всё, что ему надо". Простые капчи-чекбоксы же тоже как-то ставят, чтоб не на каждый js/css/png выдавало, а один раз для всего набора, почему без капчи нельзя?

/me с тоской вспоминает как открывал сайты на флеше будучи на 36,6к модеме в начале 00х...

С приходом WebAssembly есть шанс вернуть всё взад.

Кроме того, что чел ловко хайпожорит на банальном событии, используя смешной для 2025 года заголовок "The Internet Is No Longer A Safe Haven", есть ещё показательная штука.

Он выяснил, что экземпляр Gitea и сервер Fail2ban поглощают почти все ресурсы процессора.

У него там мелкий хомяк на сотню постов за 12 лет и нет никакой нужды городить там свистелко-перделки.

Но освоение модных систелко-перделковых технологий неизбежно ведёт к утрате навыков деланья просто и безгеморойно. Люди просто перестают понимать сам вопрос "а зачем нам всё это в зоопарке" .

О сколько нам открытий чудных... Ежедневно и уже довольно давно баним всю эту нечисть, только Cloudflare и баны по geoip/ASN/подсетям и спасают. Адресно банить тут бесполезно, они тысячами одновременно лезут из всяких Бразилий/Пакистанов/Индий/Китаев и тп.

Хмм, а поможет ли CF если CF забанят и придется из под него вылезать?

А если интернет забанят? А если Каррингтонское событие? А если восстание машин/зомби?

Нет, если человеку помогает только Cloudflare, то есть большой смысл задуматься, что он будет делать, если Cloudflare не станет.

Ну очевидно что есть план б1 и план б2. Но мой поинт в том, что не зная вообще никаких подробностей о чем идет речь, предполагать "а вдруг" как-то немного странно. О чем я и намекнул.

Иронично, что CF сегодня не работает.
А насчет бана - так уже банят, Cloudflared придется пускать другим путём.

ИИ-пауки это просто чума последнего времени. Любой полезный программистский сайт подвергается нашествию. Недавно например Delphi-PRAXiS (форум для дельфийцев)начал дико тормозить. Админы борются с помощью Cloudflare и проч., с переменным успехом.

Странно звучит. Разве так много фирм и индивидов тренирует ИИ? Один раз сграбил и пошёл, почему вдруг нашествие то?

Много их. Они постоянно ходят. Говорю как человек, который ежедневно это наблюдает изнутри на множестве разных сайтов.

Они по кругу ходят, причем может быть несколько запросов к одному URI но с разных IP одной подсети одновременно. И это хождение по кругу с интервалом 5...7 дней уже не первый год.
А алибаба в этом плане просто рассадник чумы какой-то.

Странно, к нему пришло сразу 100К ботов? Если статика - пусть ходят, ложиться у него нечему. Тем более кэш очень просто на nginx поднять для статики

А в чем у него проблемы с fail2ban? В том, что accesslog слишком большой и долго жуется поиском подстрок? Ну так пусть жует его не целиком - пусть анализирует какой-то последний кусок. Смысл тот же будет, только чуть растянутый во времени - все равно все частопарсящие попадут в блокировку.
По-моему, он проблему из пальца высасывает.

Да там не в fail2ban магия, а в том, что лог под нагрузкой разрастается быстрее, чем он успевает его жевать

Дядя сделал первый публично доступный сервер в своей жизни и удивился активности обычной сетевой микрофлоры? Это бывает, все мы через это проходили, но в чём повод для новости?

ИИ!

Так да же. Кому дядя со своим homepage был бы интересен еще пару лет назад? Максимум мамкиным сканерам, а теперь все кому не лень тащат "для обучения". В этом и проблема.

Расскажите инженеру о Cloudflare Pages и SSG.

А если бы он был пекарем или автомехаником, суть статьи бы поменялась? К чему тут этот «инженер»?

Блокировать по одному IP бесполезно, эти сети стреляют диапазонами. Правильно сделал, что сразу DROP на /16 кинул

Мне кажется, что это не жалоба, а попытка рекламы. Меня сильно заинтересовал данный сайт и, хотя я считаю себя еще не профессионалом, а учеником в парсинге, особого труда спарсить данные с сайта не составило. Объясните плиз в чем все-таки сложность! Я так и не понял!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Другие новости