docker:traefik_razreshaem_dostup_dlja_googlebot

Traefik — 4. разрешаем доступ для Googlebot

5 июля 2023

В блокировке по странам есть один немаловажный нюанс: если IP адреса поискового бота будут принадлежать блокируемой стране, то он тоже будет заблокирован. И если с Яндексом проблем нет, то Google может пострадать. Но есть один простой выход. Для этого нужно добавить IP адреса серверов Googlebot в список исключений Traefik.

Для этих целей в файле конфигурации существует параметр allowedIPAddresses, который разрешает доступ перечисленным IP адресам независимо от остальной конфигурации. Список необходимых адресов можно найти в Интернете.

Для удобства я написал скрипт на Python, который самостоятельно получает список IP и добавляет его в файл конфигурации Traefik. Для его работы нужно добавить сначала параметр allowedIPAddresses в нужное место и прописать хотя бы один IP:

http:
  middlewares:
    my-geoblock:
        plugin:
            geoblock:
                allowLocalRequests: "true"
                allowUnknownCountries: "false"
                api: https://get.geojs.io/v1/ip/country/{ip}
                apiTimeoutMs: "750"
                cacheSize: "15"
                blackListMode: false
                countries:
                    - RU
                forceMonthlyUpdate: "true"
                logAllowedRequests: "false"
                logApiRequests: "true"
                logLocalRequests: "false"
                unknownCountryApiResponse: nil
                allowedIPAddresses:
                    - 192.0.2.0/24

Да, здесь я использовал для примера IP для документации. В дальнейшем он будет заменён скриптом.

А вот и сам скрипт. Его можно запускать как вручную, время от времени, так и добавить в cron. На всякий случай рекомендую сделать резервную копию конфигурации Traefik.

googlebots.py
#!/usr/bin/python3
 
import urllib.request
import json
 
# Название middleware с geoblock
middleware_name = "my-geoblock"
# Файл конфигурации host.yml
conf_file = "/home/username/docker/traefik/data/custom/host.yml"
 
 
# Получаем список IP-адресов гуглоботов
url = "https://developers.google.com/search/apis/ipranges/googlebot.json"
w = ""
for line in urllib.request.urlopen(url):
    w = w + line.decode("utf-8").strip()
z = json.loads(w)
ip = []
for item in z["prefixes"]:
    if "ipv4Prefix" in item:
        ip.append(item["ipv4Prefix"])
 
# Читаем содержимое файла конфигурации
fc = []
f = open(conf_file, "r")
for item in f:
    fc.append(item)
f.close()
 
# Переписываем файл
insection = False
point = False
f = open(conf_file, "w")
for item in fc:
    if point:
        if item.strip()[0] == "-":
            continue
        else:
            insection = False
            point = False
    if item.strip() == middleware_name + ":":  # Нашли требуемый модификатор
        insection = True
    if insection and (item.strip() == "allowedIPAddresses:"):  # Вот сюда надо вставлять данные
        point = True
    f.write(item)
    if point:
        # Записываем список IP
        for q in ip:
            f.write("                    - " + q + "\n")
f.close()

Обратите внимание на строки 7 и 9. В них вам нужно будет прописать название вашего middleware и полный путь к файлу host.yml.

  • docker/traefik_razreshaem_dostup_dlja_googlebot.txt
  • Последнее изменение: 05.01.2026 23:44
  • r0wbh