Как закрыть доступ к сайту WordPress для парсера
Добрый день товарищи, те кто часто посещает этот ресурс наверно заметили, что в пятницу и субботу он очень тормозил и периодически выскакивали ошибки, что страница не найдена или не может быть отображена, при обновлении ее в браузере она вяленько открывалась. Как я потом выяснил меня парсили, создавая тем самым мега нагрузку на сайт из-за большого количества подключений, сегодня расскажу как закрыть доступ к сайту WordPress для парсера и восстановить штатную работу вашего ресурса.
Что такое парсинг сайтов
Для многих, людей особенно, кто только начал заниматься сайтами и блогингом, словосочетание парсинг сайтов ничего не говорит. Если по простому то парсеры, это люди, которые с помощью специального программного обеспечения копируют содержимое вашего сайта к себе в базу данных, для дальнейшего использования, по сути такое массовое воровство. Как это происходит, у вас к вашему ресурсу приходит много подключений, от оборзевших ботов отого парсера или компании, которые начинают нагибать ваш сайт, тем самым мешая его работе. Они в отличии от добросовестных ботов поисковых систем, совсем не знают меры и им пофигу как это влияет на сайт.
Как выявить парсинг сайтов
Давайте разбираться как выявить парсинг сайтов. Первое, что сразу бросается в глаза это медленная работа сайта. У меня движок сайта на WordPress, в пятницу я как раз дописал статью, о как я поставил виджет youtube для сайта WordPress, как через пол часа у меня появились дикие тормоза, естественно я первым делом подумал, что это из за этой кнопки подписаться. Выключил ее и удалил код, почистил кэш у сайта, и стал смотреть его скорость, эффекта я не увидел особого, все также валились ошибки о недоступности страниц и админка WordPress стала так же отваливаться.
Начал смотреть по сервисам из вне, что именно и за сколько загружается, статью об этом я уже делал (скорость загрузки страницы сайта). Зашел я на свой любимый pingdom и начал смотреть почему тормозит сайт. Большинство компонентов сайта отдавались очень медленно раз в 10 дольше обычного, после этого видя эту картину решил написать своему хостеру mchost.ru.
Я написал в техническую поддержку и попросил посмотреть и проверить почему тормозит сайт и нет ли проблем на их стороне. Через пару минут, мне ответили, что с их оборудованием и все хорошо, а вот мой сайт тормозит из за большой нагрузки на него, очень много подключений и посоветовали посмотреть логи сайта и дали еще потом очень полезный инструмент статистики по трафику и подключениям.
Круто, то что меня не отключили если мой сайт превышает нагрузку, как это делают многие хостеры, так что все советую mchost.ru. Если захотите на него перейти, то чуть выше ссылка на статью про него, в ней есть промокод на 3 месяца бесплатного использования.
Вот моя картина в пятницу, кто то с 14 часов как начал нагибать мой сайт, что аж до 130 процентов подскакивала нагрузка, хотя для моего сайта с посещаемостью более 3500 в день, норма это 9-14 процентов.
Так же я обратил внимание в webmaster Яндекса, у меня увеличилось количество отказов, так как люди не могли достучаться до нужных страниц сайта и вырос показатель Глубина просмотра, который показывает сколько страниц в среднем за одно посещение открывает пользователь. Данный параметр так же вырос в разы. Еще насторожило, что самыми посещаемыми страницами в этот день стали рубрики, по которым бот парсера и бегал.
Смотрим логи сервера
У mchost.ru это выглядит вот так, вы переходите в пункт Управление услугами, выбираете нужный сайт и жмете значок Статистика и логи. У вас логично, что на вашем хостинге будет иначе, но тут главное понять принцип.
Вам нужно скачать файл access.log именно в нем записаны все подключения к вашему ресурсу, их анализ поможет понять почему тормозит сайт. Так же лог файлы можно достать через ftp сервер, как это сделать я описывал (Как зайти на ftp сервер хостинга)
Получившийся файл текстового формата, но весит очень много, может под 100 мб, обычный блокнот Windows его не осилит, нам поможет бесплатный редактор разработчика Notepad++.
Далее щелкаем правым кликом по скачанному файлу и выбираем Edit with Notepad++
В итоге вы увидите вот такой гигантский список запросов, слева у вас будут ip адреса, а справа, то куда они обращались, очень сложно читать. Как я рассказывал выше, я подсмотрел в кабинете веб мастера, что возрос интерес к к категориям сайта, для удобства я все содержимое файла скопирую и вставлю в MS Exel 2013. В нем я нажимаю потом клавиши CTRL+F, для открытия формы поиска и ввожу например слово get, нажимаю кнопку найти все, а далее фильтрую по столбцу Значение, тоже самое потом можно сделать со словом catagory, и в итоге после фильтрации вы получите упорядоченный список по ip адресам, посмотреть теперь можно каких ip больше всего.
В итоге я нашел подлеца и его ip адрес, именно из за него у меня тормозил мой сайт.
Как закрыть доступ к сайту
Теперь осталось запретить ему доступ, к сожалению на моем тарифе хостинга нет услуги от таких вещей с ограничением количества соединений и дальнейшим банном, да и не брут форс это был, от которого бы помог плагин Login LockDown. Он бы при заданном количестве попыток, запрещал бы доступ на нужное вам время. Я поступил проще забанил его через файл .htaccess, который есть у каждого сайта.
Назначение файла .htaccess, это прописывать различные настройки и указания для сайта и сервисов, типа php как и что обрабатывать, что запретить, а что разрешить.
Да мне перед, тем как заблокировать данный ip было интересно, кто это поисковый бот али нет, для этого заходим на сайт ping.eu и в полеReverse lookup вводим ваш ip, в итоге смотрим кто это, в моем случае провайдер, значит какой то частник.
После чего идем на сайт 2ip.ru и там уже по ip получаем информацию, что это товарищ из красноярска
Так же поймал и нижегородца.
Не стал париться по мелочам и в файле сделал запрет htaccess, на под сети. Так как провайдер при новом пере подключении мог им дать другой ip из этой же сети, а так банить по одному адресу долго.
В итоге я добавил вот такую запись в файл htaccess, зачем они херней такой занимаются я не знаю, лучше бы что полезное сделали.
Allow from All
Deny from 93.120.142.
Order allow,deny
Allow from All
Deny from 89.109.36.
После чего стал смотреть график нагрузки на сайт, в итоге нагрузка сразу упала до привычных 9-14 процентов.
Да пока выяснял, что еще можно подкрутить, выяснил, что перейдя на версию php 7 с php5 я выиграю в производительности, так как php 7 лучше и быстрее работает с подключениями.
Так, что все к лучшему, на тестовом сайте я обкатал, скорость загрузки увеличилась, во все нужно находить плюсы.
Как защититься от ddos на WordPress
Тут небольшое но, должен быть выделенный сервер или возможность на хостинге иметь модуль libapache2-mod-evasive.
Устанавливаем его командой:
Модуль установлен, теперь нужно создать файл mod-evasive.confв папке /etc/apache2/mods-available/ и вписываем в него такой код:
<IfModule mod_evasive20.c> DOSHashTableSize 4096 DOSPageCount 5 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 </IfModule>
Обозначение параметров:
- DOSHashTableSize: это размер хэш-таблицы которая обрабатывает запросы к WWW-серверу.
- DOSPageCount: число запросов к одной странице от одного и того же IP в течение указанного интервала времени.
- DOSSiteCount: число запросов ко всем страницам домена, если поступило более 50-ти запросов с одного IP на разные страницы домена — тогда такой IP будет заблокирован.
- DOSPageInterval: Интервал для директивы DOSPageCount (в секундах)
- DOSSiteInterval: Интервал для директивы DOSSiteCount (в секундах)
- DOSBlockingPeriod: На сколько заблокировать ай-пи (в секундах)
- DOSEmailNotify: может быть использован для уведомления, будет отправлять сообщение по электронной почте о том что такой-то IP был заблокирован. DOSSystemCommand: эта директива используется для выполнения какой-нибудь вашей команды когда IP блокируется.
- DOSWhiteList: список белых IP адресов, можно и по маскам (напр. 127.0.0.*)
После этого перезапускаем сервер apache:
Организуем ddos атаку на свой сайт и проверим работы нашей защиты, У вас должна быть где, то установлена Linux система, например на флешке.
Создаем файл типа ddos.pl в домашней папке и вписываем туда такой код:
#!/usr/bin/perl
# test.pl: small script to test mod_dosevasive's effectiveness
use IO::Socket;
use strict;
for(0..100) {
my($response);
my($SOCKET) = new IO::Socket::INET( Proto => "tcp",
PeerAddr=> "pyatilistnik.org:80");
if (! defined $SOCKET) { die $!; }
print $SOCKET "GET /?$_ HTTP/1.0nn";
$response = <$SOCKET>;
print $response;
close($SOCKET);
}
Теперь делаем файл исполняемым, чтобы его можно было запустить:
В код этого файла я вписал один свой блог, чтобы на нем проверить работу скрипта. Запускаем его командой и смотрим, тормозит ли его сайт из за этих подключений:
Видим, что его сервер спокойно пропускает наши множественные запросы, а это плохо. Теперь впишу свой сайт в код скрипта:
Видим, что наша защита от ddos на WordPress отработала и забанила меня на некоторое время.
Список поисковых ботов:
Делюсь еще списком ботов которых можно запретить в файле robots.txr, но тут двойные грабли можно создать нагрузку на apache, нужно смотреть.
- User-agent: aipbot
Disallow: / - User-agent: ia_archiver
Disallow: / - User-agent: AhrefsBot
Disallow: / - User-agent: Alexibot
Disallow: / - User-agent: Aqua_Products
Disallow: / - User-agent: asterias
Disallow: / - User-agent: b2w/0.1
Disallow: / - User-agent: BackDoorBot/1.0
Disallow: / - User-agent: becomebot
Disallow: / - User-agent: BlowFish/1.0
Disallow: / - User-agent: Bookmark search tool
Disallow: / - User-agent: BotALot
Disallow: / - User-agent: BotRightHere
Disallow: / - User-agent: BuiltBotTough
Disallow: / - User-agent: Bullseye/1.0
Disallow: / - User-agent: BunnySlippers
Disallow: / - User-agent: CheeseBot
Disallow: / - User-agent: CherryPicker
Disallow: / - User-agent: CherryPickerElite/1.0
Disallow: / - User-agent: CherryPickerSE/1.0
Disallow: / - User-agent: Copernic
Disallow: / - User-agent: CopyRightCheck
Disallow: / - User-agent: cosmos
Disallow: / - User-agent: Crescent
Disallow: / - User-agent: Crescent Internet ToolPak HTTP OLE Control v.1.0
Disallow: / - User-agent: DittoSpyder
Disallow: / - User-agent: dotbot
Disallow: / - User-agent: EmailCollector
Disallow: / - User-agent: EmailSiphon
Disallow: / - User-agent: EmailWolf
Disallow: / - User-agent: EroCrawler
Disallow: / - User-agent: exabot
Disallow: / - User-agent: ExtractorPro
Disallow: / - User-agent: FairAd Client
Disallow: / - User-agent: Fasterfox
Disallow: / - User-agent: Flaming AttackBot
Disallow: / - User-agent: Foobot
Disallow: / - User-agent: gigabot
Disallow: / - User-agent: Gaisbot
Disallow: / - User-agent: GetRight/4.2
Disallow: / - User-agent: Harvest/1.5
Disallow: / - User-agent: hloader
Disallow: / - User-agent: httplib
Disallow: / - User-agent: HTTrack 3.0
Disallow: / - User-agent: humanlinks
Disallow: / - User-agent: ia_archiver
Disallow: / - User-agent: IconSurf
Disallow: /
Disallow: /favicon.ico - User-agent: InfoNaviRobot
Disallow: / - User-agent: Iron33/1.0.2
Disallow: / - User-agent: JennyBot
Disallow: / - User-agent: Kenjin Spider
Disallow: / - User-agent: Keyword Density/0.9
Disallow: / - User-agent: larbin
Disallow: / - User-agent: LexiBot
Disallow: / - User-agent: libWeb/clsHTTP
Disallow: / - User-agent: LinkextractorPro
Disallow: / - User-agent: LinkScan/8.1a Unix
Disallow: / - User-agent: LinkWalker
Disallow: / - User-agent: LNSpiderguy
Disallow: / - User-agent: lwp-trivial
Disallow: / - User-agent: lwp-trivial/1.34
Disallow: / - User-agent: Mata Hari
Disallow: / - User-agent: Microsoft URL Control
Disallow: / - User-agent: Microsoft URL Control — 5.01.4511
Disallow: / - User-agent: Microsoft URL Control — 6.00.8169
Disallow: / - User-agent: MJ12bot
Disallow: / - User-agent: MIIxpc
Disallow: / - User-agent: MIIxpc/4.2
Disallow: / - User-agent: Mister PiX
Disallow: / - User-agent: moget
Disallow: / - User-agent: moget/2.1
Disallow: / - User-agent: Mozilla/4.0 (compatible; BullsEye; Windows 95)
Disallow: / - User-agent: MSIECrawler
Disallow: / - User-agent: NetAnts
Disallow: / - User-agent: NICErsPRO
Disallow: / - User-agent: Offline Explorer
Disallow: / - User-agent: Openbot
Disallow: / - User-agent: Openfind
Disallow: / - User-agent: Openfind data gatherer
Disallow: / - User-agent: Oracle Ultra Search
Disallow: / - User-agent: PerMan
Disallow: / - User-agent: ProPowerBot/2.14
Disallow: / - User-agent: ProWebWalker
Disallow: / - User-agent: psbot
Disallow: / - User-agent: Python-urllib
Disallow: / - User-agent: QueryN Metasearch
Disallow: / - User-agent: Radiation Retriever 1.1
Disallow: / - User-agent: RepoMonkey
Disallow: / - User-agent: RepoMonkey Bait & Tackle/v1.01
Disallow: / - User-agent: RMA
Disallow: / - User-agent: rogerbot
disallow: / - User-agent: searchpreview
Disallow: / - User-agent: SiteSnagger
Disallow: / - User-agent: SpankBot
Disallow: / - User-agent: spanner
Disallow: / - User-agent: SurveyBot
Disallow: / - User-agent: suzuran
Disallow: / - User-agent: Szukacz/1.4
Disallow: / - User-agent: Teleport
Disallow: / - User-agent: TeleportPro
Disallow: / - User-agent: Telesoft
Disallow: / - User-agent: The Intraformant
Disallow: / - User-agent: TheNomad
Disallow: / - User-agent: TightTwatBot
Disallow: / - User-agent: toCrawl/UrlDispatcher
Disallow: / - User-agent: True_Robot
Disallow: / - User-agent: True_Robot/1.0
Disallow: / - User-agent: turingos
Disallow: / - User-agent: TurnitinBot
Disallow: / - User-agent: TurnitinBot/1.5
Disallow: / - User-agent: URL Control
Disallow: / - User-agent: URL_Spider_Pro
Disallow: / - User-agent: URLy Warning
Disallow: / - User-agent: VCI
Disallow: / - User-agent: VCI WebViewer VCI WebViewer Win32
Disallow: / - User-agent: Web Image Collector
Disallow: / - User-agent: WebAuto
Disallow: / - User-agent: WebBandit
Disallow: / - User-agent: WebBandit/3.50
Disallow: / - User-agent: WebCapture 2.0
Disallow: / - User-agent: WebCopier
Disallow: / - User-agent: WebCopier v.2.2
Disallow: / - User-agent: WebCopier v3.2a
Disallow: / - User-agent: WebEnhancer
Disallow: / - User-agent: WebSauger
Disallow: / - User-agent: Website Quester
Disallow: / - User-agent: Webster Pro
Disallow: / - User-agent: WebStripper
Disallow: / - User-agent: WebZip
Disallow: / - User-agent: WebZip
Disallow: / - User-agent: WebZip/4.0
Disallow: / - User-agent: WebZIP/4.21
Disallow: / - User-agent: WebZIP/5.0
Disallow: / - User-agent: Wget
Disallow: / - User-agent: wget
Disallow: / - User-agent: Wget/1.5.3
Disallow: / - User-agent: Wget/1.6
Disallow: / - User-agent: WWW-Collector-E
Disallow: / - User-agent: Xenu’s
Disallow: / - User-agent: Xenu’s Link Sleuth 1.1c
Disallow: / - User-agent: Zeus
Disallow: / - User-agent: Zeus 32297 Webster Pro V2.9 Win32
Disallow: /
User-agent: Zeus Link Scout
Disallow: /
Еще также выполните для блога вот такую защиту описанную вот тут (Безопасность wordpress), после этого уже не тормозит сайт.
Да забыл рассказать про отличную статистику у своего хостера mchost.ru. называется он webstat. Первое на, что хочу обратить внимание это Топ 10 хосты, видим ip адреса, кто всех больше делает запросов и кушает трафика, старые знакомые.
Если сайт тормозит из за ботов, то можно посмотреть кто именно и кому принадлежит он.
И прикольная статистика по браузерам и операционным системам, в лидерах Google Chrome и Windows.
Вот такая вот у меня была война в выходные за скорость открытия моего блога, спасибо парсерам за новые знания и хорошую статью. В итоге вы дорогие читатели теперь можете понять почему тормозит сайт.
Отличная статья, спасибо Иван за пошаговость действий
Хорошая статья!
Добрый день, личный опыт, уверен что многие с таким сталкиваются, но не все знают как это можно оперативно решить
Отличная статья, еще раз убеждаюсь, что проблемами с парсерами хостеры не хотят заниматься
Красавчик! Отличная статья! Оч круто! Сайт добавляю в закладки.
Спасибо, Дмитрий, вот решил рассказать свой опят, так как проблема всегда актуальна.
Наверно это самый подробный пост в сети, спасибо вам Иван, я многое узнал о данном вопросе.
Отличный пост, спасибо.
спасибо за вашу инструкцию, смог заблокировать вредных ботов для моего сайта, чем уменьшил нагрузку. Кстати, полезное расширение есть и в All seo Pack, он так же может блокировать большинство вредных ботов.
Замечательная работа! Подробнейшая информация!Очень доступно всё изложено. Нашел ссылку на сайт на Мк Хосте. Огромное уважение автору и пр.
Спасибо, что вам понравилось