Comments 33
Судя по скриншотам, у вас бесплатный тариф CF? В таком виде, конечно, полагаться на него весьма оптимистично - многая полезная функциональность отсутствует.
Нет, платный (который Pro). Мы балансировщик используем и white list'ы для вебхуков, его нет в бесплатном тарифе
Прочитал внимательно, стало понятнее. На первый взгляд взгляд, дело в (неправильно настроенном?) Traefik. CF не открывает новый коннект для каждого клиента - он формирует постоянный пул из некоторого количества коннектов и юзает его. Тот же nginx куча обрывающихся со стороны клиента коннектов напрягает мало.
Подумайте, в общем, насчёт админа. Инфраструктура выглядит подъёмно, крепкий мидл должен закрыть все потребности.
Да, CloudFlare использует пул, но:
1) Запросы каждый раз идут все-таки новые (и уже их мы фильтруем Traefik'ом);
2) В случае роста коннектов, пул увеличивается и DDOS-бот может забрать на себя (в теории) >10 коннектов из пулла CF. И их мы тоже пытаемся резать Traefik'ом.
3) Основную нагрузку все-таки срезает rate limit через кастомное правило в CF
Админа на парт-тайм мы себе возьмём. А со временем, когда будет чуть больше ресурсов, возьмём полноценного DevOps'а под все задачи. Пока мы не особо что-то меняем в инфраструктуре и моих сил хватает с головой. Но все-таки растем и со временем ситуация поменяется
А со временем, когда будет чуть больше ресурсов, возьмём полноценного DevOps'а под все задачи. Пока мы не особо что-то меняем в инфраструктуре и моих сил хватает с головой.
Я несколько раз сталкивался с ровно этим кейсом - стартап вырастал достаточно для отдельного админа, и требовалось взять под контроль инфраструктуру, которой занимался разработчик/системный архитектор/etc. В 100% случае было больно.
Не потому, что эти люди какие-то плохие - просто у них из-за отсутствия соответствующего опыта не сформированы нужные паттерны. Первое, что обычно делается в таком случае - настраивается сетевая инфраструктура и убирается всё, торчащее наружу, внутрь. У вас этот пункт есть - но его тем сложнее исполнить, чем он дальше. Ну и так далее, от балансировки до горизонтального масштабирования и кластеризации БД.
Да, есть такое. К этому постепенно и готовимся
Но должен сказать, что сейчас с этим всё проще. В том плане, что вся инфраструктура крутится в облаке, всё собирается в приватную сеть через облако, все нетривиальное зашито максимум в gitlab-ci.yml
Я бывал в ситуации, когда у проекта всё крутилось на VDSках, всё гетерогенное и всё нужно было собирать в кучу. Админам и правда было больно
Облачная инфраструктура в среднем положении, между "стартап, который пока не понятно, взлетит ли" и "сформировавшаяся компания со стабильной прибылью" - сильно проигрывает по стоимости уже в среднесрочной перспективе.
Ну, и держать всё в одном облаке - это эдакий вендор-лок и единая точка отказа, а для нескольких - нужны люди с гораздо более широкими знаниями, что существенно дороже. И путь до критичного косяка в случае недостаточной квалификации персонала, в облаке, на мой взгляд, короче - это к вопросу "берём человека с руками из плеч, даём ему ChatGPT..."
Какой-то скромный вымогатель
Атака, в общем-то, тоже скромная, раз удалось отбиться без специалистов, своими силами и за два часа.
Может так выше вероятность получить хоть что-то?
А то при живой команде разработки платить тысячи долларов может и жаба задушить, а 250 может показаться вполне приемлимой ценой за решение проблемы здесь и сейчас.
Согласен) Скорее всего он реально оценивает ситуацию и действует по принципу максимально широкой воронки - "стресстестирует" большое количество малых компаний. Курочка по зернышку.
Последний скриншот из телеги впечатляет уровнем конспирации, прямо скажем
Но в целом любопытно, спасибо)
Ээээ
Во первых, есть:
net.ipv4.tcp_syncookies
net.core.somaxconn
net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_syn_retries
net.ipv4.tcp_synack_retries
Во вторых, вам не хватает метрик по IO и TCP с node_exporter, тк смотреть только на память и cpu такое себе, при медленной сетевой блочке судя по всему
В третьих, вам не нужен devops/админ/человек_оркестр, поговорите с GPT, он вам на пальцах изложит базовые вещи... ну и побольше обсервабилити чтобы видеть узкие места
GPT да... Он такого насоветует... Ему верить, это отдельный способ вытащить себе в ногу. Плюс, даже если он и советует, то какие-то очень типовые вещи, которые вовсе не обязательно подойдут под конкретную задачу/архитектуру. Стартапу он может дать совет из энтерпрайз окружения, а крупной энтерпрайз системе что-то из советов по конфигурации домашнего сервера. И кстати, в его обучающую выборку попали вместе как правильные советы по решению проблем, так и типовые неправильные конфигурации, к которым эти ответы были адресованы. Он даже на простой вопрос об уровне изоляции сетевых интерфейсов в Linux отвечает двумя прямо противоположными способами, в зависимости от порядка слов в вопросе.
Совершенно никогда не советуйтесь с GPT по вопросам безопасности.
Зря вы так
Если задавать правильные вопросы, с описанием контекста и вводных - ChatGPT даёт очень толковые конкретные советы. Как минимум, o1 и o3-mini-high. Во многом ответы гораздо глубже, чем сходу дадут в чатах, stackoverflow или первых статья в Google. Причём можно ему сказать "не стесняйся уточнять детали, если нужно больше вводных".
Это не отменяет того, что информацию проверяем, обдумываем, а не слепо верим. Но инструмент очень мощный. Сейчас больше вопросов к тому, кто его не использует (при недостатке экспертизы в чём-то).
Другой вопрос, что ему не нужно задавать абстрактные вопросов, без деталей и контекста. Он все-таки пока не умеет задавать наводящие вопросы, чтобы достаточно глубоко определить контекста.
Из личного опыта свежего издевательства над фантами xxxGPT. Вы даже не представляете, сколько удовольствия я получил.
Допустим, что у нас есть некий начинающий админ перспективного стартапа. Что-то вроде автора статьи. Стартап не хочет подсаживаться на вендор-лок, да, и вообще экономит и потому использует зоопарк облаков/сервисов (что встречается повсеместно и в целом, наверное, неплохо).
И это админ сообразил, что ему нужно бы иметь в системе три сетевых контура - внешний (интернет), внутренний (между серверами/сервисам), частично защищённый (подключения разработчиков и всякие вспомогательные сервисы - DDoS атак оттуда не ожидается, но и доступа, куда не надо, давать не нужно). То есть примерно, то к чему через боль и страданий пришёл автор статьи.
И решил этот админ сделать виртуальные сети на основе VPN. Вполне здравая идея.
И вот у сервера получилось три интерфейса и три IP-адреса: внешний, внутренний (VPN) и частично защищённый (VPN).
И представим, что так как админ начинающий, но вовсе не дурак, то в рамках собственного развития он задумался над вопросом: "а не можно ли получить доступ к IP адресу интерфейса с другого интерфейса?". И для надёжности решил спросить xxxGPT (практически любой).
И что же он получит в ответ?
Если он сформулирует вопрос и закончит его словами "... под Linux?", то он услышит совершенно верный и подробный ответ.
Но если админ задумается о всём зоопарке Linux и завершит вопрос "... под Ubuntu?", то он получит очень подробный и обоснованный ответ про Ubuntu, который является полной противоположностью первому варианту. Совершенно неправильный, само собой.
Причём если спрашивающий не знает правильного ответа, то он обязательно поверит неправильному, так как этот ответ (как и все ответы нейросетей) очень уверенный, детальный и содержит обоснование (совершенно неверное).
Если же наш админ завершит вопрос "... под Linux? И отличается ли это поведение под Ubuntu?", то он получит менее подробный, но снова правильный ответ который будет содержать в себе что-то вроде "такое поведение характерно для всех дистрибутивов Linux". И что интересно, вот этот последние дополнение уже весьма спорно.
А ещё результаты зависят от языка, и того, как именно сформулирован вопрос.
Масса удовольствия, как я уже говорил.
Но самый трэш начнётся, если наш админ осознает проблему и спросит, а как же ему защитить систему и изолировать интерфейсы?
Вот тут искусственный разум ему такой лапши в уши надует, что, когда наш счастливый админ всё это реализует, то через пол года уродований он разочаруется в Linux, профессии и жизни в целом, купит MacBook, подстрижётся в монаха-дауншифтера и проведёт остаток дней в созерцании ТикТока.
Причём то, какой именно будет ответ, снова зависит вопроса, языка вопроса, порядка слов, знаков препинания, и фазы Луны.
В лучшем случае ему будет рекомендовано использовать iptables. Хороший, кстати, совет ...был в 2005 году.
Правда xxxGPT не отличает в обучающей выборке ответов 20-летней давности от ответов 5-летней (которых к тому же намного меньше чем 20-летних), и потому бОльшая часть его ответов в этой области с высокой вероятностью содержит не работающие, нерекомендованные, устаревшие или даже вредные практики.
Если повезёт меньше, то будет выдана рекомендация плясать с ufw. На сервере со множеством сервисов и со множеством интерфейсов - здоровья павшим.
В совсем худшем случае рекомендации безумного робота вообще не будут работать (так как очень сильно зависят от конкретной конфигурации).
Но вообще, там целый спектр возможных ответов. И всё детальные, уверенные и обоснованные.
И, кстати, изоляция сетевых интерфейсов во всех сколько-либо современных Linux-системах является настраиваемой опцией, которую можно переключать одним конфигурационным параметром. Но xxxGPT об этом ничего не знает, как ни спрашивай. Как и не знает, что включение этого параметра является стандартной практикой "system hardening" и дефолтным поведением на всяких сертифицированных дистрибутивах.
А уж если наш админ спросит, как настроить сложную маршрутизацию (не очень сложную - просто с пробросом нужного трафика между нодами) с несколькими VPN на WireGuаrd, то совершенно все ответы (!!!) будут гарантированно неправильными! Некоторые даже будут создавать видимость работы, но делать будут совсем не то, что нужно. А всё потому, что в интернетах есть штук пять супер-популярных ответов на этот вопрос и все они неправильные (сам в шоке), а анализировать комментарии к ответам из обучающих материалов нейросети по-определению не умеют.
И такое повсеместно во всех областях. Мало того, что трудно-обнаруживаемые галлюцинации, так ещё и куча популярных неправильных или устаревших знаний в обучающей выборке. Прямо сборник urban legends какой-то. Реальный человек бы попробовал, обжёгся и запомнил бы правильный ответ. Ну, или заподозрил бы неладное, прочитав комментарии к советам/ответам, и более детально углубился бы в изучение вопроса, а GPT просто выборочно запоминает, что ему скармливают, и упорно выдаёт туфту. А скармливают ему просто всё подряд.
P.S. Отдельно веселит, что когда адептам GPT показываешь вот эти фокусы, то они не видят проблемы, так как "но если спросить по другому, то оно же даёт правильный ответ. Просто нужно спрашивать правильно". Что интересно, мне ещё ни разу не удалось донести до них мысль о том, что если спрашивающий заранее не знает правильного ответа, то он и не знает "правильно" или "неправильно" он спросил.
Обычно это ещё и сопровождается верованиями в то, что если GPT заранее попросить хорошо подумать и исправить ошибки в ответе, то ответы будут заметно более верными. На самом же деле ересь этих верований настолько бездонна, что у тех, кто реально понимает, как именно работают генеративные языковые модели, от такого глаз начинает дёргаться
Вы как будто говорите о ситуация, когда админ несколькими вопросами решил заменить полноценное обучение принятым подходам. Такое, конечно, не работает. Тут более фундаментальное обучение нужно
Но даже если брать вариант с галлюцинацией: в ситуации "здесь и сейчас" это всё равно может быть лучший выход. Пусть по ходу дела админ набьет шишки и потратит время на решение созданных собою же проблем, но задачу, скорее всего, решит
Ну или хотя бы поймет направление решения и пойдет искать в интернете адекватные гайды / обучение / официальные обновленные инструкции
Я же не пытаюсь доказать, что нужно следовать рекомендациям ChatGPT на 100%. Он не заменит опыт, полноценное обучение или "спросить товарища"
Но когда нет стартовой точки, непонятно за что взяться или нужно накидать примерный конфиг - он может спасать
Уточню:
я не админ, специфики вашей не знаю. Но подозреваю, что её ой как много. В обычной разработке ChatGPT может быть эффективнее (пусть и далеко не избавлен от глюков)
я в работе обычно спрашиваю о том, что знаю, но нужна детализация / локальная оптимизация / написать что-то, что я руками проверяю / пойду читать оф. доки
CF на бесплатном тарифе умеет mTLS. Про поддомены верно подмечено.
Собственно, созданием приватной сети я и займусь на этой неделе. Пока что это не стало причиной проблем, но рано или поздно станет.
Мне нравится ваш оптимизм).
Стартапы это же про поиск решений путем собирания всех граблей на своих ошибках. В них разработка баоансирует раскорячивается между двумя крайностями: нам это не нужно, и нужно срочно уже вчера. Кому такой формат не заходит, в них надолго не задерживаются.
Сейчас у всех основных облачных провайдеров есть толковые опросники, которые подсказывают типичные проблемы в IT проектах, предлагая заранее подумать о собственных действиях. Причём туда входят вопросы не только про технологии, но и людей, процессы и т.п. Можно найти по запросу "Well-Architected Framework названиепровайдера".
требуют $250 за остановку DDOS'a.
Нищеброды какие-то, честное слово. Наверняка ещё и весь DDOS был мегабит на 20-30 максимум.
на стороне нашего прокси ... мы выставили следующие лимиты:
максимум 10 запросов в секунду с одного IP
А что - так можно? У меня опыта нету, но я думал, что если трафик проксируется через Cloudflare, то и идти он весь будет с их нескольких IP. Или я неправ?
Он прокидывает IP пользователя в заголовке `CF-Connecting-IP`
Там же интрига была в том, что они сами к себе в обход CF шли и тем самым проецировали и усиливали внешний DDoS.
Но решение в целом глупое, так как они зачем-то сами себе лимиты обрезали. Хотя, как временная затычка, чтобы вернуть контроль на время перенастройки инфраструктуры можно, наверное.
Лимиты по IP тоже очень плохенько выбраны. Нужно учитывать количество сессий и тот факт, что всякие сотовые операторы и офисы сидят с одного IP. Ну и вообще-то, нужно connection rate ограничивать, причём с bucket, чтобы начальные всплески подключений компенсировать. В принципе это всё считается. А так как-то совсем неправильно.
Если честно, инфраструктура не в приватной сети и запросы от фронтенда к бэкэнду через интернет - я даже не знал, что так можно было:) Также, общий рейт лимит (без всякой дифференциации) - верный путь облегчить задачу ддосникам, легитимный пользователь точно не пройдет при даже легкой нагрузке.
ddos - у кого ресурсов больше, тот и выирывает -). На микротах есть настройки на такой тип атак - не панацея, но хоть что-то. И таки да - "публичные" сервисы должны крутится в dmz - если сломают, то не положат всё, везде и сразу.
Это вы зелёные на мелком проекте на хакера энтузиаста нарвались, вам простимо. А вот когда большие компании с многомиллионной аудиторией вообще никаких анти DDoS и хакинг мер не принимают - это очень грустно. Мы недавно чинили один такой проект, которого заваливали миллионами запросов в час с нескольких тысяч разных айпишников (которые постоянно менялись) чтобы вытащить данные о пользователях (credential stuffing). Компании было важно выкатить новый проект пользователям в кратчайшие сроки, они думали что остальное потом допилят. Никто проектом 3 недели пользоваться нормально не мог, потому что всё постоянно лежало, пока мы всю их инфраструктуру меняли.
"Наши сервера стоят за CloudFlare. Я предполагал, что для защиты от DDOS'a мелко-среднего масштаба этого достаточно." - как раз таки наоборот, CloudFlare помогает именно от больших атак.
Я часто делаю тестирование производительности для своих проектов. Ни разу CloudFlare со мной ничего не делал (что хорошо), все запросы доходят до цели. То есть защиту от школьника, который в цикле дёргает ваши проекты, нужно добавлять самому.
Если общаться с DDOS-ером в провокационной манере - он будет стараться положить сервера сильнее.
Такого сценария следовало ожидать, покуда разработчик занимается эксплуатацией инфры...
Спасибо за интересный пост.
Всегда интересовала безопасность, какие темы можно изучить чтобы развиваться в этом направлении?
Постмортем: 4 мои ошибки во время отражения DDOS атаки (спойлер — выкуп в $250 мы все-таки не заплатили)