Как удалить протокол Proxy с HAproxy?

Рассмотрим следующую ситуацию:

                                      Internet
                                         ||
                                         ||
                                  .------''------.
                                  | HTTPS (:443) |
                                  '------..------'
                                         ||
                 .-----------------------'|
                 |                       \/
                 |           3rd party HAproxy service
                 |                       ||
                 |                       ||
             optional        .-----------''-----------.
               route         | PROXY Protocol (:5443) |
                 |           '-----------..-----------'
                 |                       ||                                 ________
      ___________|_______________________||________________________________| SERVER |____
     |           |                       \/                                              |
     |           |                 local HAproxy                                         |
     |           |                       ||                                              |
     |           |                       ||                                              |
     |           |                .------''------.                                       |
     |           |                | HTTPS (:443) |                                       |
     |           |                '------..------'                                       |
     |           |                       ||                                              |
     |           |                       ||                                              |
     |           |                       \/                                              |
     |           '---------------> local webserver                                       |
     |___________________________________________________________________________________|

Внутренний сервер имеет HAproxy и Apache httpd, локально работающие на портах 5443 и 443 соответственно.

Мой локальный веб-сервер не поддерживает протокол PROXY. Поэтому я хочу, чтобы HAproxy перехватывал протокол PROXY от сторонней службы и передавал данные на локальный веб-сервер по протоколу HTTPS или просто по протоколу TCP.

В случае HTTPS я полагаю, что он должен манипулировать HTTP-пакетами, используя правильный SSL-сертификат, чтобы добавить исходный IP-адрес отправителя в X-Forwarded-For Заголовки HTTP (которые должны быть предоставлены протоколом PROXY).

Однако документация HAproxy ужасна, если вы новичок в HAproxy, и я не смог найти примеров, объясняющих, как это сделать. Я знаю, что это должно быть возможно, поскольку HAproxy указан как "ПО, готовое к использованию протокола Proxy", но как?

1 ответ

Решение

Да, вам нужно использовать accept-proxy ключевое слово после bind в декларации внешнего интерфейса. Также будет полезно прочитать о send-proxy Ключевое слово, которое используется в данной "сторонней службе HAproxy".

Протокол PROXY может быть возвращен в исходное состояние с помощью следующей конфигурации HAproxy:

frontend app-proxy
  bind *:5443 accept-proxy
  mode tcp
  option tcplog
  default_backend app-httpd
backend app-httpd
  mode tcp
  server app1 127.0.0.1:443 check

Это примет протокол PROXY на порту 5443, очистит его и отправит данные TCP на 443,

Если вы хотите манипулировать HTTP-пакетами в TCP-данных, зашифрованных с помощью SSL, вам необходимо иметь доступ к правильным сертификатам SSL (к которым ваш веб-сервер уже должен иметь доступ). Это то, что вы, вероятно, захотите сделать.

frontend app-proxy
  bind *:5443 accept-proxy ssl crt /path/to/certnkey-file.pem
  mode http
  option httplog
  default_backend app-httpd
backend app-httpd
  mode http
  server app1 127.0.0.1:443 check ssl verify none

Преимущество последнего подхода заключается в том, что исходные данные клиента сохраняются при прохождении через прокси, чтобы вы знали, каков исходный IP вашего посетителя. Это как бы вся идея использования протокола PROXY в первую очередь! HAproxy автоматически обновит X-Forwarded-For заголовок с правильным IP-адресом, который был передан по протоколу PROXY.

Другие вопросы по тегам