А так же о всякой фигне
Типичное решение для этой задачи - посмотреть логи и взять от туда ip поисковых роботов, либо ещё хуже- найти список адресов в интернетах. Но это ошибочный путь, потому что адреса серверов меняются, и нам придётся постоянно следить за актуальностью списка.
Правильный путь- вести белый список не 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.