Компания Cloudflare опубликовала разбор одного из крупнейших инцидентов в своей инфраструктуре, из-за которого вчера большая часть сети доставки контента оказалась неработоспособной на протяжении более 3 часов. Сбой произошёл после изменения в структуре БД, размещённой в хранилище ClickHouse, после которого файл с параметрами для системы противодействия ботам в два раза увеличился в размере. В БД были образованы дублирующиеся таблицы, при том, что SQL-запрос для формирования файла просто выводил все данные из всех таблиц по ключу, без отсеивания дубликатов...Подробнее: https://www.opennet.me/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
Клаудтвари сами же этих ботов и запускают.
Опять во всём 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ьяна?!?!
не отлично 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, но как всегда имеем вот это вот всё и виноват, конечно-же, Си.
На Си пишут люди, а не трансы. Всё просто.
Я так думаю, что Ржу именно для этого изобрели - какой-то кагтавый начальничек решил "сэкономить" и вместо проф.программистов на С++ решил нанять 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...
Ожидалось.... 3 часа простоя?!?! Походу, ты мало относишься к ИТ.Если сайт упал, мгновенно должны поднять по тревоге всех сисадминов, откатиться на рабочую версию и начинать расследование. А в клаудфларе, походу, uндycятuна за доширак работает - пока проснулись, про-д-рис-тались, едва нашли проблему, а потом, спустя сутки, нашли и "виновника торжества" - unwrap. В ПРОДАКШЕН КОДЕ. :D Всё, что вы хотели знать о квалификации cloudflare team.
откатить продакшн код на такой системе как у cf может наоборот навредить (нестабильные состояния), поэтому они сначала расследуют, потом что то делают
> Память не испортили, за пределы буфера не вышли, сторонний код не исполнили.и не будь клаудшмразь монополистом с договором вида "мы вам ничего и не обещали" - кто-то сейчас суматошно искал бы новую работу.
Выясняется что клиенты, кто бы мог подумать и было ли чем, хотели от них вовсе не "за пределы буфера не вышли".
Это самая крутая новость, что я читал на опеннете!! Паблишеру громадный лайк! Потому что:1. Сразу понятна суть инцидента
2. (самое главное) приведён пример бажного кода - по его уровню можно судить о том, какого уровня uндycятuна была нанята на такую важную инфраструктуру. Да и в целом видно, насколько долго и непрофессионально чинили элементарный баг.
3. Наглядно показана несуразность Ржи и её нелепый рекламный слоган "зато безопасная память!". Как видно, программы состоят ДАЛЕКО не только из памяти! Вся программа зависит от КВАЛИФИКАЦИИ программиста и практически невозможно придумать "инструмент для дураков" (Rust), потому что только дурак и захочет им пользоваться.
Ну вот растеры снова сели в лужу голой жопой. Безопасный язык? Да. Простой и без подводных камней? Ни разу.
>Обычно unwrap() применяется в процессе отладки или при написании тестового кода и не рекомендован для использования в рабочих проектах.Помогите разобраться, это Rust не позволяет писать нормальный код и из-за чего приходится прибегать к отладочным методам или это т.н. дилетанты работают в Cloudflare?
Это и есть самое нормальное поведение программы - грохнуться при любом ненормальном поведении себя.
Это означает, что Rust, конечно, кое от чего страхует, но задачу "думать головой при написании кода" не отменяет.
Программист взял откуда-то/вспомнил типовой пример, не прочитал/не вспомнил как работает unwrap() и получил, что при невыполненном условии, мы получаем не отработку ошибки, а у нас стоит unwrap(), который говорит "всё, звиздец, здесь сделать ничего нельзя, валим приложение в panic-у".
> Обычно unwrap() применяется в процессе отладки или при написании тестового кода и не рекомендован для использования в рабочих проектах.Значит это была лишь отладка. Всё логично.
Рак интернета.