Правильные белые списки для google/yandex ботов

22.04.2017 03:21

Типичное решение для этой задачи - посмотреть логи и взять от туда ip поисковых роботов, либо ещё хуже- найти список адресов в интернетах. Но это ошибочный путь, потому что адреса серверов меняются, и нам придётся постоянно следить за актуальностью списка.

Right way

Правильный путь- вести белый список не ip адресов, а доменов. Мы можем зарезолвить доменное имя сервера по ip, и уже потом решить что с этим делать. То, что это единственно верный способ, говорится и в официальном руководстве google.

Например, так можно реализовать проверку на PHP:

<?php 

$whiteList = [
  'google.com' => true,
  'googlebot.com' => true,
  'yandex.ru' => true,
  'yanedx.com' => true,
  'yandex.net' => true
];

function checkWhitelist($ip, $whiteList) {
  $host = gethostbyaddr($ip);
  if( $host == $ip ) // Нет никакого домена на этом ip
    return false;
  
  // извлекаем главный домен
  $hostParts = explode('.', $host);
  $primaryDomain = $hostParts[count($hostParts) -2] . '.' . $hostParts[count($hostParts) -1];
  
  if( isset($whiteList[$primaryDomain]) )
    return true;
    
  return false;
}

echo "Whitelisted? - " . checkWhitelist('66.249.66.1', $whiteList) . "
";
?>

Ну и то же самое на Nodejs:

var dns = require('dns');

var whiteList = {
  'google.com': true,
  'googlebot.com': true,
  'yandex.ru': true,
  'yanedx.com': true,
  'yandex.net': true  
};

function checkWhitelist(ip, cb) {
  dns.reverse(ip, function(err, domains) {
    if( err ) {
      cb(false);
      return;
    } else {
      var hostParts = domains[0].split('.');
      var primaryDomain = hostParts[hostParts.length -2] + '.' + hostParts[hostParts.length -1];
      if( whiteList[primaryDomain] ) {
        cb(true)
        return;
      } else {
        cb(false);
        return;
      }
    }
  })
  
}

checkWhitelist('66.249.66.1', function(result) {
  console.log('Result:', result)
})


Защита от DDoS Своими силами. Часть 5, Lua модуль для nginx.

Вообще-то уже есть готовый модуль testcookie-nginx. Он решит большинство Ваших проблем. Но он достаточно ограничен в функционале, а ещё я люблю писать велосипеды. Поэтому мы сделаем свой модуль, с блекджеком и шлюхами.

DDoS Мини-тест. DigitalOcean vs Linode

Я таки нашел халявный booter сервис, слабенький, конечно, но поиграться хватит. И сразу решил посмотреть отличия между DO и Linode.


(0) Комментариев