Компания Cloudflare опубликовала разбор одного из крупнейших инцидентов в своей инфраструктуре, из-за которого вчера большая часть сети доставки контента оказалась неработоспособной на протяжении более 3 часов. Сбой произошёл после изменения в структуре БД, размещённой в хранилище ClickHouse, после которого файл с параметрами для системы противодействия ботам в два раза увеличился в размере. В БД были образованы дублирующиеся таблицы, при том, что SQL-запрос для формирования файла просто выводил все данные из всех таблиц по ключу, без отсеивания дубликатов...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=64282
Как защищать свои сайты и доменьчики от ботов без клауды и подобных?
Как минимум самохостинг go-away или anubis
Из-за anubis много раз не мог попасть на lore.kernel.org, в Firefox зависал или не догружался скрипт. Только недавно починили.
> в Firefox зависал или не догружался скриптТипичная проблема недобраузеров. Радуйтесь что вообще исправили.
Если использовать нормальных хром, то такого не бывает практически никогда.
никогда не было проблем с анубисами на фаерфоксе
4 месяца cloudflare не может починить прохождение капчи в любых версиях Firefox для Linux > 141 версии. Бесконечно обновляет свою капчу
Это винится сменой айпи на американский.
Для прохождения капчи cloudflare надо переехать в США? Зачем такой костыль нужен и кому.
Как вариант. Достаточно пропустить трафик через посредника. Это такая фишка у cloudflare.
нет никаких проблем с их капчей, всегда сижу на последних версиях firefox
Ага, а лично я намного чаще не мог подключиться к сайтам как раз из-за Cloudflare, чем из-за Anubis. Из под Tor'а вообще вкуснотища, бесконечные капчи.
> Как минимум самохостинг go-away или anubisСамохостинг это хорошо, однако они спасут только от L7 атак, когда корявый (других не бывает) PHP код по 20 SQL запросов шлёт в ответ на запрос от юзера
И то не факт, в случае если сайт изначально полумёртвый под нагрузкой из 10 юзеров, однако тут даже cloudflare мало поможет
А от L4, от которого защита тебе потребуется сильнее, самохостинг тебя не спасёт, и надо уже иметь сеть которая способна удар принять и трафик отфильтровать до твоей машины
Однако с этим способны справляться уже все облака, и можно спрятать дедики за реверс-прокси на облаках потенциально того же самого провайдера
> Однако с этим способны справляться уже все облака, и можно спрятать дедики за реверс-прокси на облаках потенциально того же самого провайдераи лежать, когда что-то лежит у них, что бывает чаще
> anubisНе надо пихать это вредоносное ПО от анимешников.
первым в списке идёт go-away, если Вы не заметили
Грамотно настроенный WAF и рейт лимиты помогают, но довольно геморно это все отлаживать. Из коробочных решений BunkerWeb для себя нашёл, почти что CF у себя дома. Но в будущем хотелось бы этот комбайн на что-то модульное сменить.
ddos guard
Клаудтвари сами же этих ботов и запускают.
> Как защищать свои сайты и доменьчики от ботов без клауды и подобных?смотря насколько ты кому-то наступил на хвост.
от потока просто мусора на 10-30 мегабит с безумных утюгов и холодильников - никак ты не защитишься. Еще и твой провайдер запросто может найти ннну очень уважительную причину разорвать с тобой договор (ему проще потерять деньги чем всех своих клиентов вообще - потому что его внешний канал полностью лежит из-за тебя).
(впрочем, клаудшмразь тоже за такое выкатит тебе недетский ценник. Ну, у какого-нибудь бредкома или ситибанка бабла хватит.)
От просто случайных набигателей из инторнетов - просто запасом мощности ну и наличием хоть какого-то представления о том как выглядит твой нормальный траффик и откуда он в основном берется.
Опять во всём Rust виноват
А было бы на си - данные спокойно записались бы за пределами выделенного буфера, переписали несколько случайных структур, и все были бы счастливы
А мы не знаем что было бы, если было бы на Си. Но знаем что уже было, когда было (и до сих пор есть, а значит будет еще) на расте
>А мы не знаем что было бы, если было бы на СиА смешно и тонко ты над сишниками подшутил с их undefined behavior.
А мы знаем что уже было на c/c++ и почему cf пошли это все переписывать
Ой какая хорошая ссылка, сохранил.
> переписали несколько случайных структур...запороли бы данные, получили бы неконсистентное состояние, выполнили бы случайный код...
А может все было бы хорошо. Но для того чтобы это узнать, нужно чтобы код был написан на сишке. Вот когда на си перепишут, тогда и поговорим.
на сервисе fl (который до раст) наблюдалась деградация работоспособности, так что какое то время сервису все ещё было бы плохо, но было бы не так заметно, я полагаю
А было бы на Си, проверили бы три раза на тестовом стенде, прежде чем пихать с пылу с жару на боевой сервер. А тут свято уверовали в безопасную безопасность и безопасно без тестирования на несколько часов опRustоволосились.
> А было бы на Си, проверили бы три раза на тестовом стенде... и все равно бы вышли за пределы буфера)))
Хотя глядя как в ядро мерджат сишных код в обход всех ревью, что-то не верится в "проверили бы три раза".
+1. Чем больше ржа-апологеты кричат о безопасности, тем больше народ думает, что вообще думать не надо - просто жонглируй указателями.
Если помнить, что на Си написаны миллиарды строк кода, то такие случаи находятся в районе статистической погрешности.
Ну да, а кто ж ещё?! Не Раст ли бегает и на каждом углу кричит "пешыте на расте у нас нет проблем с памятью"? А зачем нам вообще нужен раст?!! Ну вот так чисто по-программерски ответь. В С++ всё есть, от безопасной памяти до крутого ООП и ТЫСЯЧ полезных библиотек. Накой ляд тут ржа??
> В С++ всё есть, от безопасной памятиНет там безопасной памяти.
В какой большой плюсовый проект не ткни - везде дыры из-за памяти.
Лиса и хром каждый релиз фиксят по десятку-двум проблем, хотя обмазаны умными указателями и всякими мираклПТР, тестами, фаззингом и еще кучей всего....
В Chrome 139 устранены 12 уязвимостей.
В Chrome 140 устранены 6 уязвимостей.
В Chrome 141 устранена 21 уязвимость.
В Chrome 142 устранены 20 уязвимостей....
в Firefox 143 устранено 16 уязвимостей. 8 уязвимостей вызваны проблемами работы с памятью, такими как переполнения буферов и обращение к уже освобождённым областям памяти.
в Firefox 144 устранено 24 уязвимости. 16 уязвимостей вызваны проблемами работы с памятью.
в Firefox 145 устранено 19 уязвимостей. 10 уязвимостей вызваны проблемами работы с памятью.Но не помогает, видать ̶ ̶м̶е̶с̶т̶о̶ ̶п̶р̶о̶к̶л̶я̶т̶о̶е̶ первородный грех наследника дыpяxи.
> убогого ООП
поправил, не благодари
хотя уверен, что сейчас набегут уточки, которые кроме такого ооп ничего не знают)))
> Нет там безопасной памяти.зато есть безопасная работа с памятью
Вот такого от раста я не ожидал!
Кода на си становится все меньше...
Новости про ошибки в расте появляются все чаще...Случайность? Не думаю.
кода на си не становится меньше, когда на расте не становится больше
> Ошибка была вызвана использованием в коде на языке Rust метода unwrap() с типом Result.А ведь даже тут растофилы хвасталась, что вон в Клаудфларе кучу кода пишут на расте, а они 10000% интернета фильтруют
Ну вот и отфильтровали. Ну не 10000 но процентов 50 таки опа, чтотапаламалася и отфильтровалася от посетителей. И пол-дня не были в состоянии раздуплиться и починить (потому что поназаменяли админов девляпсами)Зато на хрусте!
То, что один дypaк выбрал ржу, ещё ничего не говорит о применимости языка. "Начальник-дe6uл" - это уже практически устойчивая связка слов, а теперь прикиньте - он принимает решение "Завтра все пишем на рже!". !!!!!
> Обычно unwrap() применяется в процессе отладки или при написании тестового кода и не рекомендован для использования в рабочих проектах.Угу. Что-то как ни откроешь код на расте, то там "ехал unwrap() через unwrap()". Получается это все не настоящие си^Wрастоманы пишут?
Отлично!
Благодаря unwrap() получился DoS, а не выполнение стороннего кода, как в соседней новости, и взлом серваков! Всего 3 часа отсутствия инета, ошибка найдена и исправлена.Так держать клаудфаря! Главное - безопасноть :)
> Всего 3 часа отсутствия инета, ошибка найдена и исправлена.
> Так держать клаудфаря! Главное - безопасноть :)Если нет сети, то нельзя выполнить удаленную уязвимость (smartblackguy.jpg)
"всего 3 часа"?!?! Да у нас начальник вые6 бы тебя уже через 10 минут неисправленной ошибки!!! И это чисто корпоративный сервачок, но котором, подумаешь - держится весь бизнес! А тут пол-тырнета завязано на этих тупых облаках и на те - на 3 часа ты просто в ауте и миллионные убытки!А ещё кричали "бегите к нам в облака, у нас 200% устойчивость, кластеры, виртуальные машины!". А чего стоит виртуальная машина, если ею управляет 06е3ьяна?!?!
А бизнес клаушдшмрази держится не на сервачках, а на FUD пропаганде.
Дай угадаю - НОЛЬ клиентов додумались с них свалить после этого инцидента.Хотя нет ровно никаких признаков что следующего точно такого же не будет.
не отлично 3 часа слишком долго искали потому что unwrap никуда не логируется и в панике никакого сообщения. было бы логирование поймали бы раньше. было бы запрет на паники было бы вообще замечательно
> 3 часа слишком долго искали потому чтосмотрели не туда.
"we initially wrongly suspected the symptoms we were seeing were caused by a hyper-scale DDoS attack"Да и 3 часа это на всё. Ты не можешь вот так просто откатить что-то, потому что на это нужно время.
В 11:05 они залили бажный конфиг. В 13:37 они уже ролбечили его.
> unwrap никуда не логируется и в панике никакого сообщения
Вообще-то логируется. Они даже в бложике строку скинули:
"thread fl2_worker_thread panicked: called Result::unwrap() on an Err value"
Типичный раст, постоянные падения это его коронная фишка. Низкая культура разработки, что поделать.
> постоянные падения это его коронная фишкаВообще-то падения стали мемом плазмы, которая совсем не на расте.
"Низкая культура разработки, что поделать" (с)
У меня до сих пор падает каждый день, файловые дескрипторы кончаются. Исправлять, конечно, не спешат, как explicit sync добавили -- это сплошной треш каждый день, и если с иксами просто перезапускалось, то с вейландом падает и всё. Но это у меня systemd нет, перезапустить, видимо. Видишь, тут ничего не поделать. А вот с падениями ripgrep ты вполне можешь что-то сделать.
Так там плюсы, а не чистый Си.
> постоянные падения это его коронная фишкаМожно хоть на Си такое-же написать. Понятно-же, что unwrap() - это, если проводить аналогии, дальнейшее развитие идеи assert-а. Буквами по белому написано, что НЕ надо его использовать в production-коде. Но, как всегда, имеем вот это вот всё и виноват, конечно-же, Rust.
> Но, как всегда, имеем вот это вот всё и виноват, конечно-же, Rust.какие-то неправильные программисты на расте
> какие-то неправильные программисты на растеУ них обычно виноват кто угодно, кроме них самих, ведь им дали такой инструмент.
> дальнейшее развитие идеи assert-а.Если это было бы так, то код бы работал в проде, т.к. ассерт для дебага.
> Буквами по белому написано, что НЕ надо его использовать в production-коде. Но, как всегда, имеем вот это вот всё и виноват, конечно-же, Rust.
Если так рассуждать, то буквами по белому написаны ub, но как всегда имеем вот это вот всё и виноват, конечно-же, Си.
На Си пишут люди, а не трансы. Всё просто.
на си вполне пишут трансы и это нормально, а вот гомофобия - плохо
> Буквами по белому написано, что НЕ надо его использовать в production-коде.А какие средства язычок предлагает, чтобы unwrap (и ещё сотни паникующих методов) не использовали в production-коде? Может, хотя бы, warning при компиляции выводит?
Я так думаю, что Ржу именно для этого изобрели - какой-то кагтавый начальничек решил "сэкономить" и вместо проф.программистов на С++ решил нанять uндycятины "десяток за рупь". А чтобы качество не страдало, решил обложить их борров-чекерами. :))) (можно подумать, все ошибки программы только и состоят, что из указателей!)
Примерно так всё и было. Но проф программисты тоже оценили рюшечки раста, только вот писать и отлаживать код на нём сложнее, чем код плюсов. Ну, минимизирован целый 1 класс ошибок зато, управленцы в восторге.
> Низкая культура разработки, что поделать.ну так на нём пишут только веб-синьоры. я что-то плохо себе представляю настоящего программиста, который променяет ЯП на маркетинговый мусор
Непонятно как возникла и расползалась этот tablespase
> Сбой произошёл после изменения в структуре БД, размещённой в хранилище
> ClickHouse, после которого файл с параметрами для системы
> противодействия ботам в два раза увеличился в размере.Мда... Они не тестируют миграцию БД перед выкаткой на прод?
Изменения в структуре БД это не два байта отослать, тут нужно быть аккуратным.
> тут нужно быть аккуратным.Ой, хоспади... Там раст везде он всё проверит сам и по рукам надаёт если делаешь что-то не так, не надо больше думать... да не о чем не надо больше думать. Да, даже во время миграции БД
Офигеть, Cloudflare использует ClickHouse от Яндекса.
Это уже давно не Яндекс. И от Яндекса они сами открещиваются.
"Оно должно само"... Да?
> "Оно должно само"... Да?Вообще-то да. И оно это сделало.
Память не испортили, за пределы буфера не вышли, сторонний код не исполнили.
Софтину в некорректном стейте грохнули. Данные не пострадали.Все как и ожидалось.
> Все как и ожидалось.могу поспорить, что клиентами не ожидалось 3 часа простоя из-за использования unwrap, который "не рекомендован для использования в рабочих проектах". Нужен анврап-чекер, который будет заставлять переписывать без анврапов
https://rust-lang.github.io/rust-clippy/stable/index.html#ex...
https://rust-lang.github.io/rust-clippy/stable/index.html#un...
и при чем тут линтер? боров-чекер неотключаемая фича компилятора, если бы его можно было отключать, то он был бы отключен в каждом первом проекте. Анврап-чекер тоже должен стать неотключаемым> for a lot of quick-and-dirty code, unwrap is a good choice, which is why this lint is Allow by default.
они даже по умолчанию считают, что ты пишешь "a lot of quick-and-dirty code", а не что-то рабочее
Ожидалось.... 3 часа простоя?!?! Походу, ты мало относишься к ИТ.Если сайт упал, мгновенно должны поднять по тревоге всех сисадминов, откатиться на рабочую версию и начинать расследование. А в клаудфларе, походу, uндycятuна за доширак работает - пока проснулись, про-д-рис-тались, едва нашли проблему, а потом, спустя сутки, нашли и "виновника торжества" - unwrap. В ПРОДАКШЕН КОДЕ. :D Всё, что вы хотели знать о квалификации cloudflare team.
откатить продакшн код на такой системе как у cf может наоборот навредить (нестабильные состояния), поэтому они сначала расследуют, потом что то делают
> поэтому они сначала расследуют, потом что то делаютДля чела айтишечка ограничена серваком и злым начальником, не требуй от него многого)))
> Память не испортили, за пределы буфера не вышли, сторонний код не исполнили.и не будь клаудшмразь монополистом с договором вида "мы вам ничего и не обещали" - кто-то сейчас суматошно искал бы новую работу.
Выясняется что клиенты, кто бы мог подумать и было ли чем, хотели от них вовсе не "за пределы буфера не вышли".
Это самая крутая новость, что я читал на опеннете!! Паблишеру громадный лайк! Потому что:1. Сразу понятна суть инцидента
2. (самое главное) приведён пример бажного кода - по его уровню можно судить о том, какого уровня uндycятuна была нанята на такую важную инфраструктуру. Да и в целом видно, насколько долго и непрофессионально чинили элементарный баг.
3. Наглядно показана несуразность Ржи и её нелепый рекламный слоган "зато безопасная память!". Как видно, программы состоят ДАЛЕКО не только из памяти! Вся программа зависит от КВАЛИФИКАЦИИ программиста и практически невозможно придумать "инструмент для дураков" (Rust), потому что только дурак и захочет им пользоваться.
Ну вот растеры снова сели в лужу голой жопой. Безопасный язык? Да. Простой и без подводных камней? Ни разу.
>Обычно unwrap() применяется в процессе отладки или при написании тестового кода и не рекомендован для использования в рабочих проектах.Помогите разобраться, это Rust не позволяет писать нормальный код и из-за чего приходится прибегать к отладочным методам или это т.н. дилетанты работают в Cloudflare?
Это и есть самое нормальное поведение программы - грохнуться при любом ненормальном поведении себя.
Это означает, что Rust, конечно, кое от чего страхует, но задачу "думать головой при написании кода" не отменяет.
Программист взял откуда-то/вспомнил типовой пример, не прочитал/не вспомнил как работает unwrap() и получил, что при невыполненном условии, мы получаем не отработку ошибки, а у нас стоит unwrap(), который говорит "всё, звиздец, здесь сделать ничего нельзя, валим приложение в panic-у".
В других языках часто оставляют ассерты в релизном коде, потому что отладочный не всегда можно запустить на реальных данных. И это лежит на ответственности программиста. Rust заставляет делать такое, если уж кто-то не хочет обработать ошибку нормально. Метод unwrap() — аналог ассерта. То есть данный инцидент продемонстрировал преимущество Rust, чего наши лучшие эксперты Опеннета даже не попытались понять.
> Обычно unwrap() применяется в процессе отладки или при написании тестового кода и не рекомендован для использования в рабочих проектах.Значит это была лишь отладка. Всё логично.
Ситуация конечно неприятная.
Но это все равно намного лучше чем предыдущая ошибка клаудфари.Cloudbleed was a Cloudflare buffer overflow.
Data from Cloudflare customers was leaked to all other Cloudflare customers that had access to server memory. This occurred, according to numbers provided by Cloudflare at the time, more than 18,000,000 times before the problem was corrected. Some of the leaked data was cached by search engines.И как мы видим тут просто все упало, а не "приватные данные утекли в поисковик".
Такое бывает когда кодишь на яп, а он постоянно меняется на минорных версиях.
> сбой Cloudflare оказался результатом некорректной обработки ошибокНадо было на безопасном расте писать свой софт, а то понаписали непонятно на чём.