Каждый владелец сайта понимает, что уникальный качественный контент это не только залог интереса пользователей, но еще и благосклонность поисковых систем. Очень обидно, когда этот контент зачастую с трудом добытый, иногда и стоящий много денег, попросту кто-то копирует. Резонно возникает вопрос как защитить контент сайта от копирования.

Для начала определимся как такое копирование происходит. В редких случаях кто-то сидит и копирует вручную материалы с вашего веб сайта. Это дела поручают роботам ботам. Вот как раз от них и можно настроить конфигурацию на сервере и защитить сайт от копирования.

Интернет магазины работают на веб сервере, построенном по разным технологиям, это может быть связка nginx+apache или nginx+php-fpm, даже обычный apache. По статистике все же nginx используется в большинстве случаев. Таким образом рассмотрим как защитить сайт от ботов на основе конфигов nginx.

Составляем белый список IP адресов для поисковых систем

geo $whitelist {
default 0;
# ip server
155.551.155.155 1;
# боты yandex
77.88.0.0/18 1;
87.250.224.0/19 1;
93.158.0.0/16 1;
95.108.128.0/17 1;
213.180.192.0/19 1;
141.8.0.0/16 1;
130.193.0.0/16 1;
5.255.253.0/24 1;
178.154.0.0/16 1;
# боты google
64.68.80.0/21 1;
64.233.0.0/16 1;
66.102.0.0/20 1;
72.14.192.0/18 1;
209.85.128.0/17 1;
216.239.32.0/19 1;
66.249.0.0/16 1;
# mail.ru
217.69.0.0/16 1;
94.100.0.0/16 1;
# bingbot-msn
40.77.0.0/16 1;
207.46.0.0/16 1;
65.52.0.0/14 1;
157.55.0.0/16 1;
# Yahoo
68.180.0.0/16 1;
67.195.0.0/16 1;
69.147.64.0/18 1;
72.30.0.0/16 1;
74.6.0.0/16 1;
# sputnik
5.143.0.0/16 1;
}

Далее пишем конфигурацию, которая будет блокировать ботов и разрешать боты поисковых систем, которые мы определили выше по HTTP/1.1.

map "$whitelist:$server_protocol" $limit1 {
"1:HTTP/1.0" "";
"1:HTTP/1.1" "";
"1:HTTP/2.0" "";
"0:HTTP/1.1" "$binary_remote_addr";
}
limit_req_zone $limit1 zone=bot11:10m rate=7r/m;

блокируем других ботов, который выполняют обращение по HTTP/2.0

map "$whitelist:$server_protocol" $limit2 {
"0:HTTP/2.0" "$binary_remote_addr";
}
limit_req_zone $limit2 zone=vse:10m rate=25r/m;

Выполняем разрыв соединения если бот обращается по HTTP/1.0, и он не из белого списка

map "$whitelist:$server_protocol" $bad_bot {
default 0;
"0:HTTP/1.0" 1;
}

Также выполняем разрыв соединений для различных сканеров и ботов

map $http_user_agent $bad_useragent {
default 0;
~*ia_archiver 1;
~*Curl 1;
~*libwww 1;
~*BLEXBot 1;
~*SBooksNet 1;
~*MJ12bot 1;
~*Java 1;
~*NTENTbot 1;
~*GetIntent 1;
~*SemrushBot 1;
~*HybridBot 1;
~*AhrefsBot 1;
~*SeznamBot 1;
~*DeuSu 1;
~*GrapeshotCrawler 1;
~*SentiBot 1;
~*default 1;
~*Virusdie 1;
~*WordPress 1;
~*WhatsApp 1;
}

Для каждого хоста указываем следующее

Данные лимиты устанавливаются индивидуально для каждого сайта

limit_req zone=bot11 burst=4 nodelay;
limit_req zone=vse burst=4 nodelay;

В результате данной конфигурации получаем следующие условия

Если бот обращается по протоколу HTTP/1.0 и его нет в белом списке, то он получит сообщение об ошибке 444 и произойдет разрыв соединения.

Помимо этого есть условие ограничения rate=7r/m, что означает разрешать запросы не чаше 7-ми в минуту. Не перепутайте и не поставьте такое ограничение для картинок, так как загружая страничку, картинок подргужается много и лимит может ограничить это действие.

Так же в случае обращения по протоколу HTTP/2.0 будет выполнятся ограничение с учетом условия не больше 25 запросов в минуту (rate=25r/m).

Все ограничения подбираются индивидуально, исходя из мониторинга и анализа логов работы веб сервера, так же проверки какие адреса попадают в бан.

Команда для проверки логов

cat /var/log/nginx/access.log | awk '{if ($9=="503") {print $1}}' | sort | uniq -c | sort -nr | head

Такой анализ необходим для выявления новых сетей ботов поисковиков.

Нужно защитить сервер от ботов обращайтесь [email protected]