Как удалить протокол Proxy с HAproxy? - PullRequest
0 голосов
/ 18 мая 2018

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

                                      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-адреса отправителя в заголовки HTTP X-Forwarded-For (которые должны быть предоставлены протоколом PROXY).

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

1 Ответ

0 голосов
/ 19 мая 2018

Да, вам нужно использовать ключевое слово 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-пакеты в зашифрованных SSL-данных TCP, вам необходимо иметь доступ к правильным 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.

...