3 горизонтальные линии, бургер
3 горизонтальные линии, бургер
3 горизонтальные линии, бургер
3 горизонтальные линии, бургер

3 горизонтальные линии, бургер
Удалить все
ЗАГРУЗКА ...

Содержание



    Парсинг моего сайта из Китая, и их последующая блокировка через htaccess

    Часы
    22.09.2025
    /
    Часы
    11.03.2026
    /
    Часы
    10 минут
    Глазик
    926
    Сердечки
    1
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0

    Предыстория

    Сижу я значит, залипаю на графики. Да, есть у меня такой фетиш смотреть на графики и диаграммы, особенно когда они растут вверх :) Вижу какие-то невероятные цифры по просмотрам и отказам. 
    У меня обычно в метрике что-то около 15-20% отказов. В Google Analytics около 50%. А сейчас там 50% отказов для метрики и 60% для Гугла
    Вот так вот выглядят график посещаемости сайта за месяц (с 19.08.25 по 18.09.25)
    Плюс, что интересно, посещаются в основном страницы пагинации. Нет, конечно и другие страницы они тоже посещают, но в меньшей степени, гораздо меньшей степени. Вот график:
    О чём данный график может говорить? Да чёрт его знает. Возможно кто-то решил спарсить все ссылки на моём сайте?
    Я конечно же забеспокоился. Начал искать причину, ибо наслышан о трафике из Китая. Плюс у меня сайт вообще не адаптирован под Восточную культуру, а про переводы я вообще молчу. И я мог бы пошутить типа:
    Но чёт мне не смешно, да и вдруг там действительно реальные Китайцы? Если так, то без обид - просто шутка

    Моё расследование, откуда и почему

    Сначала, я решил узнать откуда они пришли. Может это Google начал давать такой трафик, или Яндекс. Учитывая дружбу России и Китая я не удивлюсь. А может Baidu до меня добрался? Нет, нет и нет. Всё это прямой трафик и ни один поисковик тут не причём.
    И тут может быть несколько вариантов:
    1. Либо DDos 
    2. Либо кликеры
    3. Либо парсеры
    4. Либо копирование контента
    Давай разбираться.

    DDOS Атака

    DDoS (Distributed denial-of-service attack) - тип атаки на сервер при которой производятся множественные запросы на сервер со множества устройств, целью которого сделать сервер не доступным для обычных пользователей.
    Есть и DoS атаки, то же самое, но запросы происходят с одной машины. Учитывая то что метрика фиксирует множество различных IP - это скорее DDoS атака, но не совсем 
    Видишь ли, запросов не так уж много. Их должно быть тысячи, десятки тысяч... в час. Я уверен - это не DDoS атака. На графиках, DDoS-атака может выглядеть как-то так:
    Если интересно можете почитать отчёт гугл, о самой мощной DDoS-атаке в их истории, тут - https://cloud.google.com/blog/products/identity-security/google-cloud-mitigated-largest-ddos-attack-peaking-above-398-million-rps/. Более 398 милионов запросов в секунду!

    Кликеры, или один из видов негативного SEO

    Кликер - специальная программа созданная имитировать плохие(или хорошие) поведенческие факторы на сайте, с целью обмануть поисковые системы.
    Яркими и явными признаками кликеров являются:
    1. Аномально маленькая либо аномально большая глубина клика
    2. Короткое время на сайте 
    3. Источником трафика является поисковая система
    Самым главным здесь является то, что источником обязательно должна быть поисковая система, иначе это просто надоедливый бот, который засоряет твою статистику. И всё.
    У меня же, как ты помнишь, трафик прямой. Да и страницы, которые этот бот смотрит, являются страницами пагинации, то есть те страницы, которые в основном, не участвуют в ранжировании.
    Прямой трафик - такой трафик, при котором пользователь попал на сайт введя в поисковую строку сам адрес сайта. Это также могут быть закладки в браузере или любой другой неопределенный, системами метрик, источник.
    Поэтому я не думаю, что это кликер. Не самый умный по крайней мере.

    Возможно парсер?

    Парсер - специальная программа созданная для того, чтобы собирать необходимый контент, быстро и много, без участия человека.
    И я наверное не ошибусь если скажу, что это, скорее всего он. Дело в том, что для парсера характерно такое поведение, как любовь к страницам пагинации. Ведь они позволяют отыскать весь контент, который есть на сайте.
    Но пару вопросов всё-таки возникает. Как например:
    1. Почему бы не посмотреть sitemap.xml, если тебе так нужен этот список статей на сайте? 
    2. Зачем так усложнять? Зачем делать ротацию пользовательских агентов, использовать прокси? У меня не такая крутая защита от парсеров 

    Моё решение

    В любом случае это не столь важно, почему кто-то решил натравить кучу ботов на мой сайт. Гораздо важнее, что я буду с этим делать. Буду ли я терпилой и просто терпеть этих ботов или я могу принять некоторые контрмеры, чтобы усложнить ему (тому, кто их на меня натравил) жизнь.
    Что я могу сделать:
    1. Заблокировать целую страну, через .htaccess файл на сервере
    2. Поменять структуру сайта, чтобы было сложнее парсить контент
    3. Использовать некую проверку на ботность, то есть добавить капчу, или что-то в этом роде
    Ну и так как я спешу минимизировать урон для моего сайта, какой бы он ни был, я решил что просто заблокирую целую страну для посещения моего сайта. Хоть на время.

    Блокируем целую страну в htaccess

    Перед тем как мы начнём делать вещи, которые способны навредить сайту, разберёмся, что это за файл .htaccess, как он и его директивы работают и почему я(или ты)хочешь это сделать. Хотя бы на время.
    .htaccess(hyper text access) - это файл, который позволяет управлять работой, то есть доступом к контенту веб-сервера apache через специальные директивы.
    Веб-сервер Apache - это веб-сервер с открытым исходным кодом, так же известный как Apache HTTP server, который хранит файлы сайта и отвечает на запросы браузеров пользователей, доставляя им веб-страницы, изображения и другой контент по протоколу HTTP(S)
    Директива в .htaccess - это команда, которая указывает на то, какие страницы и кому разрешить/запретить доступ.
     Директивы состоят из 3-х частей:
    1. Определяющая конструкция
    1. Order deny,allow - Запретить отвечать всем IP, кроме перечисленных
    2. Order allow,deny - Разрешить отвечать всем IP, кроме перечисленных
    2. Действие
    1. Denyfrom — запретить(отвечать на запросы) от
    2. Allow from — разрешить(отвечать на запросы) от
    3. Адресс/Диапазон/Бесклассовая адресация
    1. 1.0.8.0 - Конкретный IP
    2. 1.0.8  -  Будут заблокированы все IP от 1.0.8.0 до 1.0.8.255
    3. 1.0.8.0/24 - Используя синтаксис бесклассовой адресации, можно гибко узнать нужный тебе диапазон вот так.
    В моём конкретном случае, реализация блокировок всех адресов из Китая выглядит вот так:
    PassengerEnabled On PassengerPython /home/t/timachuduk/timthewebmaster.com/venv_new/bin/python Order Allow,Deny Allow from all # China Deny from 1.0.1.0/24 Deny from 1.0.2.0/23 Deny from 1.0.8.0/21 ... ## China
    Нужно дать некоторые пояснения. Так, 1-я строка активирует веб-сервер для Python приложений - Phusion Passenger. Потом, для этого веб-сервера, мы выбираем виртуальное окружение. Но это другая тема для разговора. Давай перейдём к правилам доступа к веб контенту.
    1. Order allow,deny - разрешаем доступ к веб-рессурсу всем кроме всех нижеперечисленных. 
    2. Allow from all - разрешаем доступ всем.
    3. Deny from АДРЕСС -запрещаем доступ к ресурсу конкретным адресам.
    Можно переиграть и например запретить доступ всем, кроме указанных дальше, например:
    PassengerEnabled On PassengerPython /home/t/timachuduk/timthewebmaster.com/venv_new/bin/python Order Deny,Allow Deny from all # China Allow from 1.0.1.0/24 Allow from 1.0.2.0/23 Allow from 1.0.8.0/21 ... ## China
    Теперь только Китайцы и смогут смотреть мой контент :)
    Но Китайских IP, большое множество и как их всех вписать в один файл? Дааа... к этому могу ещё добавить, что их не только много, они меняются и отследить такое количество адресов, а их сотни миллионов, становится непосильной задачей.
    В качестве решения предлагают использовать услуги облачных сервисов как CloudFlare. Но я могу предложить немного другие решения. Первое решение довольно быстрое, но временное. Второе дольше в реализации и требует индивидуальной настройки на каждом хостинг провайдере, но зато актуальный список IP-адресов.
    А для начала нужно найти соответствующие IP адреса и их диапазоны по странам в которых те находятся. Могу порекомендовать данный сайт, он предоставляет не только удобный способ быстрого копирования адресов, но и ещё позволяет себя парсить, что делает этот сайт очень удобным для кастомных решений вроде моего.

    Простой способ: блокировки трафика из определённой странны

    На этом сайте ты можешь скачать нужный тебе файл с IP-адресами по странам, после чего скопировать его содержимое прямо в .htaccess файл. 
    Не забудь проставить действие перед каждым диапазоном, или Deny from, или Allow from. Для этого можешь скачать специальный python скрипт для простановки соответствующей приставки для каждой строки.
    Сохрани файл и перезагрузи веб-сервер. Если всё сделано правильно, для тебя ничего не изменится, но для Китайцев доступ к сайту будет заблокирован. Но ты мог и случайно заблокировать себя и свою страну, вот так это будет выглядеть:
    Это если ты случайно заблокировал себя и свою страну
    А если в синтаксисе файла .htaccess была допущена ошибка то ты увидишь что-то вроде этого:
    Что-то не так на стороне сервера
    Хочу заметить, что на моём сайте реализованны собственные ответы с кодами 403(Запрещено) и 500(Ошибка на сервере). При такой блокировке они не отображаются.

    Сложный способ: написание кастомного Bash скрипта

    Суть данного способа в корне не меняется, только здесь весь процесс автоматизирован. Я напишу Bash-скрипт и создам задачу на его выполнение в начале каждого дня. Скрипт ниже будет:
    1. Скачивать и обновлять список IP-диапазонов
    2. Добавлять - Deny from
    3. Вставлять его в .htaccess файл
    #!/usr/bin/bash COUNTRY_CODE="$2" INPUT_FILE="$COUNTRY_CODE-ip-groups.txt" OUTPUT_FILE=".htaccess" TO_DOWNLOAD_URL="https://www.ipdeny.com/ipblocks/data/countries/$COUNTRY_CODE.zone" BLOCK_START="##$COUNTRY_CODE START" BLOCK_END="##$COUNTRY_CODE END" PREFIX="Deny from" ALLOWED_ACTIONS=("--add" "--remove" "--update") ALLOWED_CODES=(aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn "do" dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh "fi" fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie "if" ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz) # Send message depends on status codes status() { if [ $? -eq 0 ]; then echo " OK: $1" else echo " ERR: $2" exit fi } # Check if first value in array has_arg() { local term="$1" local array_name="$2[@]" local array=("${!array_name}") shift for array_element in ${array[@]} ; do if [[ $array_element == "$term" ]]; then return 0 fi done return 1 } # Download the file contains the IP's download_the_ips() { STATUS_CODE="$(curl -s -o /dev/null -w "%{http_code}" $TO_DOWNLOAD_URL)" if [ "$STATUS_CODE" != "200" ]; then echo "ERROR: Couldn't find the source: $TO_DOWNLOAD_URL" exit fi curl -L $TO_DOWNLOAD_URL > $INPUT_FILE echo "SUCCESS: Downloaded file: $TO_DOWNLOAD_URL" } remove_block() { # Clear everything in between # Dont redirect the output like >> or > it will wipe your file, edit in place sed "/$BLOCK_START/,/$BLOCK_END/d" $OUTPUT_FILE -i status "The block $COUNTRY_CODE removed" "Couldn't remove the block $COUNTRY_CODE" } insert_ips() { # Insert prefix before each line echo "$BLOCK_START" >> $OUTPUT_FILE sed "s/^/$PREFIX /" $INPUT_FILE >> $OUTPUT_FILE echo "$BLOCK_END" >> $OUTPUT_FILE echo "SUCCESS: Inserted IPs" } # Procceed only if 2 positional arguments are present if has_arg "$1" "ALLOWED_ACTIONS" && has_arg "$2" "ALLOWED_CODES"; then if [ "$1" == "--add" ] || [ "$1" == "--update" ]; then download_the_ips remove_block insert_ips rm $INPUT_FILE elif [ "$1" == "--remove" ]; then remove_block fi exit 0 fi exit 1
    Выполнив, например, команду:
    ./block-country.sh --add cn
    Ты заблокируешь весь трафик из Китая. Больше команд и опций ты можешь посмотреть на моём репозитории. Откуда ты и сможешь скачать данный скрипт. 
    Теперь, чтобы список IP адресов постоянно обновлялся можно создать Cron-задачу, которая будет выполнять скрипт block-country.sh ежедневно, например. 
    Статья и так получилась не маленькой, а создание и настройка cron-задачи заслуживает отдельной статьи, которая скоро появится. И ссылочки на них тут тоже появятся - не забудь подписаться на Email-уведомления и RSS-рассылку.

    Заключение или результаты

    После успешного добавления IP адресов из Китая в htaccess, трафик ожидаемо упал а количество отказов и времени на сайте резко улучшилось. Имеется ввиду среднее время просмотра и средний процент отказов.
    Итак, это было воскресенье, я заблокировал Китай в 12:00
    Вот такие дела. Неприятно, но то ли ещё будет :) Надеюсь эта статья помогла определить, что у тебя с сайтом, почему вдруг резко на тебя нахлынули китайцы и что с этим можно сделать.

    Не забудь поделиться, лайкнуть и оставить комментарий)

    Комментарии

    (0)

    captcha
    Отправить
    ЗАГРУЗКА ...
    Сейчас тут пусто. Буть первым (o゚v゚)ノ

    Другое

    Похожие статьи


    Анализ трафика и их источников в метрике, яндекс вебмастере и GSC, за Январь, Февраль

    Часы
    03.03.2025
    /
    Часы
    11.03.2026
    Глазик
    407
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Про анализ трафика сайта и их источников, SEO продвижении за Январь-Февраль. Анализ трафика от Google через GSC и анализ трафика от Яндекса используя Yandex.Webmaster. Так же предоставлена полная статистика о …

    Что изменилось в моём SEO — и почему трафик вырос на 55% за месяц

    Часы
    13.09.2025
    /
    Часы
    11.03.2026
    Глазик
    398
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Пошаговая стратегия SEO-оптимизации: как улучшить метатеги, нарастить ссылочную массу и повысить CTR. Реальный кейс с ростом показов на 55% и кликов на 18%.