Запретить traefik пересылать IP-адрес клиента

Я использую traefik в качестве обратного прокси-сервера для своего хоста Docker. Кроме того, я хочу настроить статический прокси на внешний сервер. Это моя текущая конфигурация:

defaultEntryPoints = ["http", "https"]

debug = false
logLevel = "ERROR"

[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
  compress = true
  [entryPoints.https.tls]

[api]

[docker]
domain = "myhost.com"
watch = true
exposedByDefault = false

[file]

[backends]

  [backends.otherhost]
    [backends.otherhost.servers]
      [backends.otherhost.servers.server0]
        url = "http://otherhost.com"

[frontends]

  [frontends.otherhost]
    entryPoints = ["http", "https"]
    backend = "otherhost"
    [frontends.otherhost.routes]
      [frontends.otherhost.routes.route0]
        rule = "Host:subdomain.myhost.com"
    [frontends.otherhost.headers.customRequestHeaders]
      X-Forwarded-For = "foo"
      X-Real-Ip = "foo"

Установка заголовков в пустую строку ничего не дала. С этими настройками X-Real-Ip становится foo, а X-Forwarded-For становится foo, <my real IP>. Могу ли я предотвратить утечку traefik IP-адреса клиента во внешний бэкэнд, оставив его в моей среде Docker?


person Erik Hofer    schedule 31.07.2019    source источник


Ответы (1)


Траефик 2.x

Как насчет использования ПО промежуточного слоя для переопределения заголовка X-Forwarded-For. Документацию можно найти здесь.

[http.middlewares]
  [http.middlewares.testHeader.headers]
    [http.middlewares.testHeader.headers.customRequestHeaders]
        X-Forwarded-For = "foo"
    [http.middlewares.testHeader.headers.customResponseHeaders]
        X-Forwarded-For = "foo"

Затем вы можете применить определенное промежуточное ПО к своим маршрутизаторам, например:

[http.routers]
  [http.routers.router1]
    service = "myService"
    middlewares = ["testHeader"]
    rule = "Host(`example.com`)"

[http.middlewares]
  [http.middlewares.testHeader.headers]
    [http.middlewares.testHeader.headers.customRequestHeaders]
        X-Forwarded-For = "foo"
    [http.middlewares.testHeader.headers.customResponseHeaders]
        X-Forwarded-For = "foo"

[http.services]
  [http.services.service1]
    [http.services.service1.loadBalancer]

      [[http.services.service1.loadBalancer.servers]]
        url = "http://127.0.0.1:80"

Рекомендации:

person steadweb    schedule 01.08.2019
comment
Похоже, он делает то, что я хочу, но я не совсем понимаю промежуточное программное обеспечение. Как применить его к одному интерфейсу? Ваш пример выглядит так, как будто он привязан к конечной точке http. - person Erik Hofer; 02.08.2019
comment
Вы используете Traefik 1.x? В traefik 2.x вы можете применять промежуточное ПО к определенным маршрутизаторам. См. docs.traefik.io/v2.0/middlewares/overview — Я также обновлю свой ответ. - person steadweb; 02.08.2019
comment
У меня 1.x, но я могу обновиться, даже если 2.0.0 еще не стабильна. Спасибо за подсказку, раньше я только бегло разбирался в роутерах. Также в документах указано, что When you declare a middleware, it lives in its provider namespace., так что пока у меня есть только один интерфейс под File, он тоже может работать. - person Erik Hofer; 02.08.2019