Что такое Ддос и что такое CloudFlare?
Что такое Ddos? Ну, во-первых, это аббревиатура от «distributed denial of service». По-русски это звучит как распределенная атака, цель которой добиться от атакуемого сервера (группы серверов) отказа в обслуживании для посетителей сайта (сайтов). Сайт будет выдавать ошибку всем желающим на него войти.
Слово «распредленная» означает, что Ддос атака идет сразу со множества компьютеров в сети. Очень часто для этой цели используется так называемый ботнет, т.е. группа зараженных вирусами или другим способом взятых под контроль компьютеров. Владельцы входящих в ботнет компьютеров могут при этом даже не догадывать о том, что они кого-то атакуют (все происходит в фоновом режиме).
Физически это означает огромное количество запросов, совершаемых к серверу с разных IP адресов. Если адрес будет один или несколько, то его легко можно вычислить по логам или открыв страницу http://xxx.xxx.xxx.xxx/server-status (где x нужно заменить на IP вашего сервера, если он работает под Апачем). После чего проблем не составит подозрительные IP временно заблокирвовать, например, через файл .htaccess дописав в него строки (Ip замените на свои — строк с Deny from можно добавлять сколько угодно):
Order allow,deny
allow from all
Deny from 83.149.19.177
Deny from 87.228.80.49
Deny from 178.212.72.13
Но настоящий Ddos так ни за что не отбить — просто не успеете выявлять повторы IP адресов, если атаковать будут с десятков и/или сотен хостов.
Постоянная защита от этого зла очень дорогая, но CloudFlare даже на бесплатном тарифе позволяет отбиться от слабо-средней Ддос-атаки.
У этого сервиса есть миллионы подключенных сайтов (около пяти миллионов) и разработчики сервиса всегда четко отслеживают с каких IP сейчас обычно атакуют и таким посетителям, например, можно показать капчу (боты вряд ли настроены на ее разгадывание) или проверить браузер на «человечность» у таких подозрительных IP. Да и сами по себе их распределенные по миру сервера неплохо разреживают атаку на отказ — просто эти запросы распределяются на разные сервера и сильно снижают силу атаки сводя все усилия на нет.
Для более серьезной защиты от Ддос в CloudFlare нужно уже платить и не мало (200$). Но это все для очень серьезного бизнеса, где Ддос мощнее (денег вливаемых в это больше), но и средств у владельцев много больше.
Что такое CloudFlare? Это онлайн сервис, ведущий свою историю с 2009 года. Это ни в коем разе не хостинг, хотя со стороны может показаться именно так. Это скорее надстройка над хостингом (что-то вроде кеширующего обратного прокси). После подключения сайта к этому онлайн-сервису у него меняется IP адрес и возникает такое ощущение, что вы сменили хостера, но это не так.
Хостинг вам будет по-прежнему нужен и работать с сайтом вы будете фактически так же, как и работали раньше. Будут некоторые нюансики, но суть останется прежней. CloudFlare же нужен для защиты (стабильной работы) и ускорения работы сайта.
К нему подключены уже более пяти миллионов сайтов по всему миру. Этот онлайн сервис владеет распределенной сетью дата-центров (более 120) по всему миру (с прошлого года и в Москве такой появился). Последнее особо приятно, ибо обеспечивает гораздо более быстрый отклик при обращении к сайтам с территории России (хотя страна у нас большая и центров надо строить больше).
Итак, CloudFlare владеет кучей серверов распределенных по всему миру. Зачем? Чтобы добавленные в него сайты грузились в браузерах посетителей как можно быстрее. Вся графика, CSS и джава-скрипт коды будут отдаваться с того дата центра, который ближе находится к данному посетителю вашего сайта. Посетитель зашел из Москвы? Значит в работу включится московский дата-центр. Из США? Значит графика и прочая статика будет отдаваться посетителю с ближайшего к нему узла Cloud Flare.
Одно это уже способно повысить среднюю скорость загрузки странниц вашего сайта. Но данный сервис имеет в своем загашнике еще несколько тузов и джокеров. Работая с миллионами сайтов и отражая ежесекундно атаки сервис имеет базу адресов, с которых сейчас чаще всего атакуют сайты. Одно это может даже на бесплатном тарифе служить первым эшелоном защиты от DDoS-атак (и на это не требуется тратить особо ресурсы и время).
Кроме этого сервис позволяет включить режим «под атакой» (Under Attack Mode), когда каждое обращение к сайту прерывается на 5 секунд для выяснения типа браузера, с которого осуществлялся заход.
По окончании Ддос-атаки этот режим можно будет отключить и выбрать подходящий уровень бдения. При повторении атаки его легко можно будет включить даже с мобильника сидя в метро (главное настроить мониторинг доступности вашего сайта, чтобы вовремя среагировать).
В общем, даже на бесплатном тарифе практически все что нужно уже есть. Даже можно сжимать на лету файлы CSS и джава скрипта (удалив из них пробелы), чтобы на капелюшечку увеличить скорость загрузки. Не поверите — на бесплатном тарифе в CloudFlare можно будет даже SSL к сайту подключить. Причем сервис предоставляет свой собственный бесплатный сертификат.
Фантастика какая-то, не правда ли? Если ваш хостинг упадет (будут проблемы), то Cloud Flare будет отдавать в этот промежуток времени страницы сайта из своего кеша (и это работает — проверял остановкой сервака, но есть нюансы о которых обязательно читайте ниже, иначе не сработает). Может чего упустил из бесплатных прелестей, но и этого более чем достаточно (за так то).
Нет, недостатки у него тоже есть. Какие? Ну, зачастую очень даже значимые:
Вы когда прикрепляете свой сайт к CloudFlare, то он получает новый айпишник (что такое айпи?). Но вы на нем будете висеть не один. У меня, например, на бесплатном тарифе оказалось пяток соседей, один из которых тематики адалт. Это само по себе не есть хорошо, но гораздо хуже бывает, когда роскомнадзор заставляет провайдеров интернета блокировать доступ к сайту, а они (от большого ума или назло) блокируют все висящие на этом IP сайты (включая ваш ни в чем неповинный). Этой проблеме уже несколько лет и возможно, что наши «умные люди» отошли от блокировки по IP или Cloud Flare стал оперативно реагировать на такие вещи. Будем посмотреть.
Раньше можно было сетовать, что дата-центров нет в России, но сейчас в Москве появился. Возможно, что и в других крупных узлах моей необъятной родины они будут создаваться.
Что дает переход на тариф PRO в CloudFlare?
PRO за 20$ в месяц и перевели на новый IP, где только три соседа и вполне себе легитимные.
Кроме этого на платном тарифе появилась возможность:
- Polish (вкладка «Speed» из верхнего меню) — сжимать на лету картинки перед их отдачей посетителям сайта (можно настроить вариант сжатия — без потерь или с потерями, но более сильно).
- Mirage — позволяет подгружать график на мобильных устройствах не сразу, а по мере прокрутки посетителем страницы. Кроме этого, изображения сжимают до реально требуемых размеров и только потом передаются пользователю в гаджет. Вроде как это здорово ускоряет работу сайта на мобильниках.
Например, если открыть с мобильника, то при быстрой прокрутке страницы увидите, что вместо картинок вставляются заглушки, которые заменяются на реальные изображения только при их попадании в экран просмотра.
- Page Rules — на платном аккаунте появляется возможность задать более трех правил для страниц (а точнее — до 20). Зачем нужны эти правила? Например, именно они позволяют настроить кеширование не только статики, но и Html страниц сайта. Ну, и еще другие применения найдутся, но мне это нужно только для описанной цели. Как настроить полное кеширование сайта (включая текст страниц, а не только картинок, скриптов и стилей) читайте ниже.
- Web Application Firewall — на платном аккаунте можно активировать (на вкладке «Firewall» из верхнего меню) базовый набор защиты от различных атак типа межсайтового скриптинга (XSS) и SQL инъекций. Вся подобная активность будет отсекаться (фильтроваться) еще на CloudFlare (не доходя до реального хостинга). Можно еще свои правила добавить, но я в этом не силен, посему ограничился стандартным (проверенным временем и миллионами сайтов) набором.
- Можно будет еще на платном акке сделать свой дизайн для страниц с различными ошибками. Например, когда вы включаете режим «Под атакой» (Under Attack Mode), то всем новым посетителям сайта будет показывать сообщение о том, что идет проверка их браузера на предмет «человечности» (если Серч читаете, то могли у них такую надпись видеть в течении последнего года, после подключения ими Cloud Flare).
Табличка эта на буржуйском языке и часть посетителей могут просто сбежать. А вот если написать что-то типа «Ребят, ребят, ребят! Не уходите! Буквально 5 сек и все будет!», то шанс удержать посетителя увеличится.
Как подключить свой сайт к CloudFlare?
Ну, тут, кстати, все довольно просто, если мастер подключения сможет вытянуть все нужные настройки для переноса вашего сайта (его IP, Ms записи). Однако, обо всем по порядку.
Заходите на Cloud Flare и регистрируетесь.
Сразу оговорюсь, что бояться особо нечего, ибо при неудачном подключении вам не придется ждать сутки, пока ДНС записи опять перепишутся. Просто кликните по облачкам на странице настройки DNS и ваш сайт будет работать напрямую.
Сразу после регистрации можно переходить на страницу добавления нового сайта, где в предложенную строку нужно будет просто вставить его доменное имя и нажать на кнопку «Begin Scan».
Далее будет проходить сканирование в течении нескольких минут, по окончании которого сервис выдаст те данные, что ему удалось нарыть про добавляемый сайт:
Cервис нашел все основные NS записи (включая почтовые), что есть хорошо. Автоматически для будущих данных, передаваемых с этого сайта, включилось кеширование (облачка окрасились). Идем дальше.
Как уже говорил выше, для защиты от Ddos подойдет даже бесплатный тарифный план (на нем при желании еще и бесплатный SSL сертификат получить можно). Отличия плана PRO от бесплатного я описал выше, поэтому выбирайте то, что вам нужно. Идем дальше.
Теперь основное. Нужно зайти в панель вашего регистратора доменных имен (где домен подбирали) и сменить там NS записи на те, что предложил на этом шаге мастера CloudFlare. Например, в Вебмани Домейнс это делается на такой вот страничке:
Нужно просто заменить записи в двух строчках на то, что вам Cloud Flare дал и подождать от 4 часов до 2 суток, пока все это дело пропишется на всех NS интернета. Идем далее, и по истечении нескольких часов после прописывания новых NS серверов можно будет нажать на кнопку «Recheck Nameservers».
Если подключение ДНС уже прошло, то статус после нажатия на упомянутую кнопку сменится.
Кнопка «Quick Actions» позволяет быстро перейти в режим защиты от Ddos и прочих видов атак, который называется «Under Attack Mode». Мне при переходе на Cloud Flare пришлось сделать именно так.
На это время доступ к сайту ограничен и все соединения проверяются на предмет их легетивности. Всякие боты, в том числе и поисковых систем пробиться на сайт не смогут. В общем, работать в нем не стоит дольше того, чем необходимо (пока идет атака). Чуть подробнее о включении и выключении режима защиты от Ддос-атаки читайте в самом конце этой публикации.
100%-ый аптайм для сайта с помощью CloudFlare
Под автономной работой сайта я имею такую ситуацию, когда по каким-либо причинам ваш хостинг «ляжет», а сайт продолжит быть доступным посетителям. Это, как говорится, крайний случай. Но зачастую хостинг может просто-напросто не справляться с высокой нагрузкой (вызванной посещаемостью или использованием множества плагинов и плохой оптимизацией движка). В этом случае опять же поможет кеширование Html страниц в CloudFlare.
По умолчанию, как я понимаю, сервис кэширует только статику: картинки, CSS и JC. Все. В принципе, и это здорово может облегчить работу хостинга и ускорить загрузку страниц сайта в разных точках мира. Но зачастую этого бывает недостаточно. И даже не это главное. В этом режиме не срабатывает функция «Always Online» (Всегда онлайн), ибо Cloud Flare не умеет творить чудеса и отдает страницы из своего собственного кеша, а если их там нет, то отсылает к хостингу (который в данный момент может быть недоступен).
В общем, задача сводится к тому, чтобы включить кэширование всего содержимого веб-страниц (кода разметки, включающего текстовое наполнение), а не только статики. Сделать это можно на вкладке «Page Rules» из верхнего меню (см. пояснения в хелпе). Почему это не вынесли в общие настройки кэширования? Думаю, что из-за великого разнообразия сайтов и движков, на которых они работают. Видимо, не возможно обеспечить таким образом стабильность. Нужно действовать более точечно, опираясь на структуру и специфику каждого конкретного вебсайта. ИМХО.
На бесплатном тарифе можно создать только три правила для страниц, а на тарифе PRO — уже 20. Суть создания правила довольно проста. Пока опустим то, что нужно вставить в поле с регулярным выражением, а посмотрим что нам предлагают при нажатии на «+ Add a Setting» (добавить настройку).
Здесь как раз можно выбрать настройку степени кэширования (Cache levels), где в открывшемся списке допнастроек можно будет выбрать последний вариант «Cache everything» («Кэшировать все»). Таким образом, мы принудительно заставим CloudFlare кешировать всю вебстраницу, а не только статику.
Еще желательно будет задать время, которое страница будет храниться в кэше CloudFlare и в кэше браузеров посетителей сайта (это две разных настройки). Тут все зависит от степени динамичности вашего сайта в целом и отдельных его страниц в частности. Меня вполне устраивает интервал в несколько суток хранения кеша в облаке, а кеш браузера я выбираю разный (в зависимости от типа страниц).
Для задания этих настроек нужно будут еще пару раз нажать на кнопку «+ Add a Setting» и выбрать:
- Browser Cache TTL — настройка времени жизни кэша в браузерах посетителей вашего сайта. Например, если выберите одни сутки, то посетитель, в течении суток зашедший дважды на одну и ту же страницу вашего сайта, второй раз получит ее не из интернета, а из кеша собственного браузера (без изменений). А вот если времени пройдет более суток, то страничка будет запрашиваться уже из интернета (с Cloud Flare). Для главной страницы этого блога я поставил значение «пару часов» для Browser Cache TTL, а для остальных страниц — от суток до двух. Возможно, что можно придумать что-то более оптимальное.
- Edge cache TTL — это уже время жизни кеша на серверах в дата-центрах CloudFlare (по всему миру). Если поставите все те же сутки, то все посетители вашего сайта будут видеть эту страницу (или группу страниц, для которых вы задали Edge cache TTL равным суткам) без изменений, даже если на сервере эта страница поменялась (например, к ней добавились комментарии или вы что-то изменили в тексте, поменяли изображение и т.п.).
На сервисе есть возможность принудительно сбросить кеш не только для всего сайта (чего делать особо не рекомендуется), но и отдельных страниц, и даже отдельных статических файлов (изображений, файлов стилей и скриптов), когда вы внесли в них изменения и хотите, чтобы они незамедлительно стали доступны посетителям вашего сайта.
Делается это на вкладке «Caching» (из верхнего меню) путем нажатия на кнопку «Purge Individual Files» (чтобы сбросить весь кеш нужно будет нажать на стрелочку на этой кнопке и выбрать нижний из двух пунктов «Purge Everything»). В открывшееся окно нужно ввести Урл страницы, либо страниц (по одной на строку), либо отдельных файлов (полный путь до картинок, файла стилей и т.п.):
Я этой опцией пользуюсь довольно часто, например, после изменения картинок, добавлении комментария к статье или при изменении дизайна сайта (сбрасываю кеш для файлика стилей). Файлы, кеш которых вы недавно сбрасывали, отображаются ниже — по ним можно просто кликнуть, чтобы выполнить их очередной сброс. Очень удобно.
Но вернемся к настройкам правил для отдельных страниц сайта — Page Rules. Чуть ранее мы нажали на кнопку «Create Page Rule» и научились включать полное кеширование содержимого Html страниц, а также ограничивать время жизни кэша в браузерах посетителей и на серверах CloudFlare.
Т.е. мы задали нужные нам правила кеширования. В примере — это кэширование всего содержимого со сроком жизни кэша в браузерах посетителей 4 час и сроком жизни кеша на серверах сервиса 2 суток. Осталось дело за малым — прописать в первой строке этого всплывающего окна формулу, по которой сервис поймет для каких именно страниц вашего сайта эти правила применять. Как это сделать, можно почитать нажав на кнопку «Хелп» внизу окна настроек правил.
На мой взгляд есть два пути задания правил:
На тарифе Pro есть возможность прописать 20 правил для страниц, что позволяет реализовать первый вариант: описать формулами все типы страниц сайта, которые стоит кешировать.
На бесплатном тарифе доступны только три правила, и в некоторых случаях их может не хватить для реализации первого способа. Второй способ заключается в том, чтобы сначала разрешить кеширование страниц всего сайта, а потом запретить кешировать админку и страницу авторизации. Трех правил для этого должно хватить.
Как настроить полное кеширования страниц сайта в CloudFlare
Теперь поподробнее о практической реализации обеих способов.
Начнем с первого варианта создания разрешающих правил кеширования для всех (или большинства) страниц сайта, которые нужно будет хранить в кеше серверов CloudFlare полностью (весь html код с картинками, скриптами и стилями).
Если страницы со статьями вашего сайта оканчиваются на .html, то для их полного кеширования хватит одного единственного правила для страниц:
example.com/*.html
Замените доменное имя на свое и все должно заработать. Довольно просто — знак * заменяет все, что может стоять между доменными именем и суфиксом .html.
Останется еще только добавить правило для полного кеширования главной страницы сайта:
example.com/
Тут, думаю, все понятно и без пояснений. Единственное что, для главной страницы я время кеширования в браузерах пользователей выбрал поменьше, ибо содержимое этой страницы чаще других изменяется, и важно, чтобы она отображалась в более-менее актуальном состоянии.
Время же кеширования на серверах CloudFlare оставил большим, ибо при добавлении новой записи я просто сбрасываю кеш для главной способом описанным чуть выше. Очень удобно, только по первости нужно привыкнуть это делать.
Замечательно, когда все страницы кроме главной оканчиваются на .html. С рубриками особо мучиться не пришлось, ибо при настройке ЧПУ в своем блоге на Вордпресс я выбрал, как оказалось, удачный шаблон, с обязательным словом (каталогом) «/category/», поэтому правило для этого типа страниц выглядит так:
example.com/category/*
Ну, а со статическими страницами пришлось поизголяться, но вроде все получилось.
В итоге процент отдаваемых из кеша CloudFlare данных составил (по данным встроенной в эту систему аналитики) около 90%, что есть очень даже хорошо (по сути на эту величину снизилась нагрузка на сервер моего хостинга):
Т.к. правил для страниц можно было создать только три на бесплатном тарифе, то я решил пойти от противного — разрешить полное кеширование всего сайта, запретив потом трогать страницы админки.
Сразу скажу, что сработало как-то не очень. Вместо 90% загрузок из кеша, в этом случае я получил менее 50%. Но тем не менее свои решения я приведу, авось вы мне подскажите где я ошибся. Итак, первым правилом я разрешил кешировать все:
А вторым (этот сайт работает на Вордпресс) — для страниц админки выбрал режим кеширования байпасс, т.е. не попадание этих страниц в кеш. Вроде все работает и скорость блога существенно выросла, но в аналитике менее 40 процентов трафика идет через CloudFlare (все остальное тянется с сервера хостинга). Почему? Для меня не очень понятно. При этом с работой в админке никаких проблем при этом не наблюдалось, что уже хорошо.
Что делать, если началась DDos-атака и как ее отразить?
Если вы подключились к КлоудФлэр именно из-за идущей в данный момент Ддос-атаки (или она началась после подключения), то ее вполне можно будет отразить или снизить эффект от нее даже на бесплатном тарифе этого сервиса. Для этого достаточно лишь перейти на вкладку «Overview» из верхнего меню и нажать на кнопку «Quick Actions»:
Выберите из выпадающего списка пункт «Under Attack Mode» и данный сервис начнет активно противодействовать Ddos-атаке.
Все пользователи (или боты) будут задерживаться перед обращением к серверу вашего хостинга сервисом CloudFlare на 5 секунд, за время которых он будет пытаться определить реальный ли это пользователь (браузер) или бот.
Понятно, что такая «непонятная» надпись часть посетителей таки отпугнет — я наблюдал падение посещаемости в режиме «Under Attack Mode» примерно на четверть по отношению к нормальному режиму работы. Но лучше потерять четверть посетителей, чем все 100%. Согласитесь?
К тому же на тарифе PRO (о котором я писал выше) можно вид этой надписи поменять и снизить процент отказов (например, перевести ее на русский и добавить чуток креатива). По-любому возможность замечательная.
Однако, не стоит оставлять сайт в режиме «Under Attack Mode» дольше того времени, пока идет атака, ибо вы не только часть посетителей будете терять, но и все боты поисковиков будут отсекаться от сайта, что со временем не здорово скажется на посещаемости. Поэтому периодически отключайте режим «Under Attack Mode» простым нажатием на кнопку «Disable» и смотрите на результат.
Если сайт опять стал недоступен (Ddos продолжается), то включайте Status: I’m Under Attack! взад. Так продолжайте часа через два мониторить окончание Ддос-атаки, чтобы не держать лишнее время сайт в этом безусловно полезном, но неоптимальном режиме «Под атакой».
На постоянной основе я предпочитаю использовать режим по умолчанию «Medium». Кстати, поменять режим безопасности можно и без переключения в «Under Attack Mode». Сделать это можно на вкладке «Firewall» (из верхнего меню), выбрав нужный вариант из выпадающего меню кнопки с названием текущего Security Level.
Ну, и «I’m Under Attack!» отсюда тоже можно будет включить.