Как можно заблокировать поддельных (фальшивых) роботов, которые выдают себя за Googlebot?

Как исправить проблему в .htaccess, где блокируются поддельные Googlebot, но случайно блокируются и настоящие боты с IP-адресов, начинающихся на 66.249? Вот код, который используется для фильтрации: 

```
# Validate Googlebots
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5\.0\ \(compatible;\ Googlebot/2\.[01];\ \+http://www\.google\.com/bot\.html\)$
RewriteCond %{HTTP:Accept} ^\*/\*$
RewriteCond %{HTTP:Accept-Encoding} ="gzip,deflate"
RewriteCond %{HTTP:Accept-Language} =""
RewriteCond %{HTTP:Accept-Charset} =""
RewriteCond %{HTTP:From} ="googlebot(at)googlebot.com"
RewriteCond %{REMOTE_ADDR} ^66\.249\.(6[4-9]|7[0-9]|8[0-46-9]|9[0-5])\. [OR]
RewriteCond %{REMOTE_ADDR} ^216\.239\.(3[2-9]|[45][0-9]|6[0-3])\.0
# Optional reverse-DNS-lookup replacement for IP-address check lines above
# RewriteCond %{REMOTE_HOST} ^crawl(-([1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5])){4}\.googlebot\.com$
RewriteRule ^ - [S=1]
## Block invalid Googlebots
RewriteCond %{HTTP_USER_AGENT} Googlebot [NC]
RewriteRule ^ - [F]
# END sending now 403 to fake Googebots
```
  • 4 декабря 2023 г. 6:40
Ответы на вопрос 3
Чтобы более точно отфильтровывать поддельных роботов, изображающих Googlebot, не заблокировав при этом настоящих роботов Google, можно использовать два основных метода:

1. **Проверка IP-адресов**: настоящий Googlebot всегда будет исходить из IP-диапазонов, принадлежащих Google. Вы можете организовать "белый список" этих диапазонов и сочетать его с проверкой `User-Agent`. Этот метод подразумевает устранение фальшивых ботов, которые используют подходящий `User-Agent`, но не исходят из соответствующих IP-диапазонов.

2. **Версификация по обратному DNS-запросу**: каждый раз, когда к вашему серверу обращается Googlebot, вы можете сделать обратный DNS-запрос, чтобы удостовериться, что доменное имя ассоциировано с IP-адресом соответствует одному из доменов Google. Если DNS-запрос успешно возвращает домен, оканчивающийся на googlebot.com или google.com, вы можете затем выполнить прямой DNS-запрос для данного домена и проверить, совпадает ли возвращаемый IP-адрес с IP-адресом бота. Если они совпадают, робот считается подлинным.

Ваш текущий код .htaccess пытается валидировать Googlebot по ряду HTTP-заголовков и IP-адресу, однако есть некоторые проблемы, которые могут привести к случайным блокировкам:

- Применение точного соответствия шаблону `User-Agent` и другим заголовкам может быть слишком жестким. Google может время от времени обновлять свои `User-Agent` строки, так что подобный подход требует постоянного обновления правил.
- IP-адреса Google могут изменяться, и если ваши правила не регулярно обновляются, то некоторые настоящие Googlebot IP-адреса могут быть заблокированы.

Чтобы устранить проблему, вы можете дополнить ваш .htaccess код выполнением обратных DNS-запросов для проверки подлинности Googlebot. Для этого можно использовать следующее:

```apache
# ...[вставьте ваши остальные правила здесь]...

# Эта директива проверяет, есть ли в User-Agent слово "Googlebot"
RewriteCond %{HTTP_USER_AGENT} Googlebot [NC]

# Эта директива выполняет обратный DNS-запрос для REMOTE_ADDR.
# В ответ должно получить hostname в домене *.googlebot.com или *.google.com
RewriteCond %{REMOTE_ADDR} ^66\.249\.|^64\.233\.|^216\.239\.|^74\.125\.|^72\.14\.|^209\.85\.|^66\.102\.| [NC]
RewriteCond %{REMOTE_ADDR} ^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)$
RewriteCond %{REMOTE_HOST} !^.*\.googlebot\.com$ [NC]
RewriteCond %{REMOTE_HOST} !^.*\.google\.com$ [NC]
RewriteRule .* - [F]

# ...[продолжение ваших правил]...
```
    
Этот пример правил заставит сервер выполнить обратный DNS-запрос, если `User-Agent` содержит "Googlebot". Если полученное доменное имя не заканчивается на `.googlebot.com` или `.google.com`, запрос будет з
Проверьте, нет ли пробела между точкой и символом квадратной скобки "[", а также убедитесь, что после [OR] следует другое условие, так как [OR] используется для объединения нескольких условий. Если это последнее условие перед RewriteRule, уберите [OR].
Проверьте отсутствие лишнего пробела в паттерне IP-адреса (после обратного слэша и точки) и наличие дополнительных условий после [OR], если оно не является последним в списке. Если [OR] находится после последнего условия, его следует удалить.
Похожие вопросы