Обратный прокси-сервер

ARMA Стена включает в себя функциональность обратного прокси-сервера, обеспечивающего высокую доступность, распределение нагрузки и проксирование для приложений на основе TCP (уровень 4) и HTTP (уровень 7).

Основные настройки обратного прокси-сервера

Глобальные настройки

Блок «Глобальные настройки» предназначен для глобальных параметров обратного прокси-сервера - лимита подключений и используемого шифрования.

  1. Задать лимит максимального количества подключений:

set load-balancing reverse-proxy global-parameters max-connections <number>

где <number> - лимит максимального количества подключений. Возможно указать значение в диапазоне от «1» до «2000000».

  1. Задать алгоритм шифрования для соединений по протоколу SSL/TLS:

set load-balancing reverse-proxy global-parameters ssl-bind-ciphers <ciphers>

где <ciphers> - алгоритм шифрования. Возможно указать значение из списка:

  • ecdhe-ecdsa-aes128-gcm-sha256;

  • ecdhe-rsa-aes128-gcm-sha256;

  • ecdhe-ecdsa-aes256-gcm-sha384;

  • ecdhe-rsa-aes256-gcm-sha384;

  • ecdhe-ecdsa-chacha20-poly1305;

  • ecdhe-rsa-chacha20-poly1305;

  • dhe-rsa-aes128-gcm-sha256;

  • dhe-rsa-aes256-gcm-sha384.

  1. Указать минимально необходимую версию TLS:

set load-balancing reverse-proxy global-parameters tls-version-min <version>

где <version> - версия TLS. Возможно указать значение «1.2» или «1.3».

Группы backend-серверов

Блок «Группы Backend-серверов» предназначен для конфигурации групп серверов, известных как бэкенд-серверы, которые обрабатывают входящие запросы, поступающие через обратный прокси-сервер. Основная функция данного блока заключается в реализации внутренней логики распределения трафика между серверами.

  1. Задать имя для группы бэкенд-серверов:

set load-balancing reverse-proxy backend <backend_name>

где <backend_name> - имя группы. Ограничения:

  • допускаются только строчные и прописные символы латинского алфавита и цифры;

  • может содержать дефисы («-») и нижние подчёркивание («_»).

  1. Задать описание для группы бэкенд-серверов:

set load-balancing reverse-proxy backend <name> description <description>

где <description> - описание группы. Длина описания не должна превышать 255 символов.

  1. Задать алгоритм балансировки для бэкенд-сервера:

set load-balancing reverse-proxy backend <backend_name> balance <balance>

где <balance> - алгоритм балансировки. Возможно указать значение из списка:

  • source-address;

  • round-robin (по умолчанию);

  • least-connection.

  1. Задать режим работы бэкенд-сервера:

set load-balancing reverse-proxy backend <backend_name> mode <mode_type>

где <mode_type> - режим работы бэкенд-сервера. Возможно указать значение из списка:

  • tcp;

  • http.

  1. Задать адрес бэкенд-сервера, на которой будет перенаправляться входящий трафик:

set load-balancing reverse-proxy backend <backend_name> server <server_name> address <IP-address>

где:

  • <IP-address> - IP-адрес сервера в формате IPv4 <x.x.x.x> и IPv6 <h:h:h:h:h:h:h:h:>;

  • <server_name> - имя сервера. Ограничения:

    • допускаются только строчные и прописные символы латинского алфавита и цифры;

    • может содержать дефисы («-») и нижние подчёркивание («_»).

  1. Задать порт для бэкенд-сервера:

set load-balancing reverse-proxy backend <backend_name> server <server_name> port <port>

где <port> - порт. Возможно указать значение из диапазона от «1» до «65535»

  1. Включить проверку работоспособности для бэкенд-сервера:

set load-balancing reverse-proxy backend <backend_name> server <server_name> check

По умолчанию функциональность выключена.

  1. Отправить заголовок прокси-протокола 1 версии (текстовый формат):

set load-balancing reverse-proxy backend <backend_name> server <server_name> send-proxy

По умолчанию функциональность выключена.

  1. Отправить заголовок прокси-протокола 2 версии (двоичный формат):

set load-balancing reverse-proxy backend <backend_name> server <server_name> send-proxy-v2

По умолчанию функциональность выключена.

  1. Настроить использование SSL-шифрования и проверки подлинности серверной части с помощью корневого сертификата:

set load-balancing reverse-proxy backend <backend_name> ssl ca-certificate <ca-certificate>

где <ca-certificate> - имя сертификата.

  1. Настроить использование SSL-шифрования без проверки сертификата сервера:

set load-balancing reverse-proxy backend <backend_name> ssl no-verify
  1. Задать имя для заголовка HTTP ответа, который будет включаться во все ответы для запросов к бэкенд-серверу:

set load-balancing reverse-proxy backend <backend_name> http-response-headers <header-name>

где <header-name> - значение заголовка HTTP-ответа. Допускается использование только латинские буквы, цифры и символы ASCII, за исключением «'», «"». Значение не должно начинаться с пробела или спецсимволов: «//», «-».

  1. Задать заголовок HTTP ответа, который будет включаться во все ответы для запросов к бэкенд-серверу:

set load-balancing reverse-proxy backend <backend_name> http-response-headers <header-name> value <header-value>

где <header-value> - заголовок HTTP ответа. Длина значения не должна превышать 64 символов.

  1. Включить проверку работоспособности HTTP с использованием HTTP-запроса:

set load-balancing reverse-proxy backend <backend_name> http-check

В результате выполнения запроса система ожидает успешный код ответа в диапазоне от «200» до «399».

  1. Задать HTTP-метод, который будет использоваться при проверке:

set load-balancing reverse-proxy backend <backend_name> http-check method <method>

где <method> - HTTP-метод, который будет использоваться при проверке. Возможно указать значение из списка:

  • option;

  • get;

  • post;

  • put.

  1. Установить конечную точку, которая будет использоваться для проверки работоспособности:

set load-balancing reverse-proxy backend <backend_name> http-check uri <path>

где <path> - путь до конечной точки. Ограничения:

  • должен начинаться с косой черты («/»);

  • не должен содержать символ решётки («#») и пробелы.

  1. Задать ожидаемый результат для определения работоспособности сервера:

set load-balancing reverse-proxy backend <backend_name> http-check expect status <condition>

где <condition> - ожидаемый результат. Возможно указать значение в диапазоне от «200» до «399».

  1. Задать содержимое ответа при определении работоспособности сервера:

set load-balancing reverse-proxy backend <backend_name> http-check expect string <string>

где <string> - содержимое ответа.

  1. Настроить проверку работоспособности для TCP-бэкендов:

set load-balancing reverse-proxy backend <backend_name> health-check <protocol>

где <protocol> - протокол, который использует TCP-бэкенд. Возможно указать значение из списка:

  • ldap;

  • redis;

  • mysql;

  • pgsql;

  • smtp.

Примечание

Если протокол не будет задан, система предпримет попытку базовой проверки работоспособности TCP. Сервер считается подключённым к сети, если он отвечает на попытку подключения действительным пакетом SYN/ACK.

  1. Задать таймаут проверки установки соединения:

set load-balancing reverse-proxy backend <backend_name> timeout check <check_timeout>

где <check_timeout> - таймаут проверки установки соединения. Возможно указать значение в диапазоне от «1» до «3600».

  1. Задать таймаут ожидания успешной попытки подключения к серверу:

set load-balancing reverse-proxy backend <backend_name> timeout connect <wait_timeout>

где <wait_timeout> - таймаут ожидания успешной попытки подключения. Возможно указать значение в диапазоне от «1» до «3600».

  1. Задать таймаут бездействия на стороне сервера:

set load-balancing reverse-proxy backend <backend_name> timeout server <timeout>

где <timeout> - таймаут бездействия на стороне сервера. Возможно указать значение в диапазоне от «1» до «3600».

  1. Использовать бэкенд сервер как резервный:

set load-balancing reverse-proxy backend <backend_name> server <server_name> backup
  1. Задать номер правила для группы бэкенд-серверов:

set load-balancing reverse-proxy backend <backend_name> rule <rule_number>

где <rule_number> - номер правила. Возможно указать значение в диапазоне от «1» до «10000».

  1. Задать URL для перенаправления:

set load-balancing reverse-proxy backend <backend_name> rule <rule_number> set redirect-location <URL>

где <URL> - адрес для перенаправления. Ограничения:

  • длина значения не должна превышать 242 символов;

  • должен начинаться с косой черты («/»);

  • допускаются только строчные и прописные символы латинского алфавита и цифры;

  • может содержать точки («.»), дефисы («-»), косые черты («/») и нижние подчёркивание («_»).

  1. Задать параметры соответствия SSL:

set load-balancing reverse-proxy backend <backend_name> rule <rule_number> ssl <ssl_param>

где <ssl_param> - параметры соответствия SSL. Возможно указать значение из списка:

  • req-ssl-sni;

  • ssl-fc-sni;

  • ssl-fc-sni-end.

  1. Задать сервер для группы бэкенд-серверов:

set load-balancing reverse-proxy backend <backend_name> set server <server_name>
  1. Задать режим поиска в URL:

set load-balancing reverse-proxy backend <backend_name> rule <rule_number> url-path <search_mod>

где <search_mod> - режим поиска. Возможно указать значение из списка:

  • begin - совпадение в начале;

  • end - совпадение в конце;

  • exact - полное совпадение.

  1. Задать содержимое шаблона поиска в URL:

set load-balancing reverse-proxy backend <backend_name> rule <rule_number> url-path <search_mod> <URL_sample>

где <URL_sample> - адрес для поиска. Ограничения:

  • должен начинаться с косой черты («/»);

  • допускаются только строчные и прописные символы латинского алфавита и цифры;

  • может содержать точки («.»), дефисы («-»), косые черты («/»), нижние подчёркивание («_»).

  1. Задать содержимое шаблона поиска в доменном имени:

set load-balancing reverse-proxy backend <backend_name> rule <rule_number> domain-name <domain_name>

где <domain_name> - доменное имя. Ограничения:

  • длина доменного имени не должна превышать 242 символа;

  • длина доменной группы не должна превышать 63 символа;

  • может содержать дефисы («-») и точки («.»), но они не могут быть на первом и последнем месте;

  • число групп, которые разделены точкой, не может быть больше 127.

Службы обратного прокси

Раздел «Службы обратного прокси» отвечает за определение параметров точек входа для внешнего сетевого трафика. Она включает указание IP-адреса и порта, на которых будет осуществляться мониторинг входящих соединений, а также выбор протоколов. Конфигурация также определяет параметры обработки для обеспечения защищённого взаимодействия с клиентами. Дополнительно она включает правила маршрутизации, такие как сопоставление доменных имён или путей запросов с соответствующими backend-серверами.

  1. Указать имя службы:

set load-balancing reverse-proxy service <service_name>

где <service_name> - имя службы. Ограничения:

  • допускаются только строчные и прописные символы латинского алфавита и цифры;

  • может содержать дефисы («-») и нижние подчёркивание («_»).

  1. Указать группу бэкенд-серверов, которая будет использоваться для выбранной службы:

set load-balancing reverse-proxy service <service_name> backend <backend_name>
  1. Добавить описание для выбранной службы:

    set load-balancing reverse-proxy service <service_name> description <description>
    
  2. Задать режим работы для выбранной службы:

set load-balancing reverse-proxy service <service_name> mode <mode_type>

где <mode_type> - режим работы для выбранной службы. Возможно указать значение из списка:

  • http;

  • tcp.

  1. Задать порт, на котором обратный прокси будет принимать входящие подключения для выбранной службы:

set load-balancing reverse-proxy service <service_name> port <port>
  1. Перенаправить HTTP трафик на HTTPS для выбранной службы:

set load-balancing reverse-proxy service <service_name> redirect-http-to-https
  1. Указать сертификат, который будет использоваться при перенаправлении HTTP трафика на HTTPS:

set load-balancing reverse-proxy service <service_name> ssl certificate <cert_name>

где <cert_name> - имя сертификата.

Примечание

Для просмотра всех доступных сертификатов выполните команду show pki certificate.

  1. Задать таймаута ожидания данных при контент-инспекции TCP-запроса для выбранной службы:

set load-balancing reverse-proxy service <service_name> tcp-request inspect-delay <timeout_in_ms>

где <timeout_in_ms> - таймаут ожидания данных. Возможно указать значение из диапазона от «1» до «65535.

  1. Задать имя заголовка HTTP ответа для выбранной службы:

set load-balancing reverse-proxy service <service_name> http-response-headers <header_name>
  1. Задать значение заголовка HTTP ответа для выбранной службы:

set load-balancing reverse-proxy service <service_name> http-response-headers <header_name> value <header_value>

где <header_value> - значение заголовка HTTP-ответа. Допускается использование только латинские буквы, цифры и символы ASCII, за исключением «'», «"». Значение не должно начинаться с пробела или спецсимволов: «//», «-».

  1. Задать прослушиваемый IP-адрес для выбранной службы:

set load-balancing reverse-proxy service <service_name> listen-address <IP_address>
  1. Задать номер правила для выбранной службы:

set load-balancing reverse-proxy service <service_name> rule <rule_number>
  1. Задать группу бэкенд-серверов для выбранной службы и правила:

set load-balancing reverse-proxy service <service_name> rule <rule_number> set backend <backend_name>
  1. Задать URL для перенаправления:

set load-balancing reverse-proxy service <service_name> rule <rule_number> set redirect-location <redirect_URL>

где <redirect_URL> - адрес для перенаправления. Ограничения:

  • должен начинаться с косой черты («/»);

  • допускаются только строчные и прописные символы латинского алфавита и цифры;

  • может содержать точки («.»), дефисы («-»), косые черты («/»), нижние подчёркивание («_»).

  1. Задать параметры соответствия SSL:

set load-balancing reverse-proxy service <service_name> rule <rule_number> ssl <ssl_param>

где <ssl_param> - параметры соответствия SSL. Возможно указать значение из списка:

  • req-ssl-sni;

  • ssl-fc-sni;

  • ssl-fc-sni-end.

  1. Задать режим поиска в URL:

set load-balancing reverse-proxy service <service_name> rule <rule_number> url-path <search_mod>

где <search_mod> - режим поиска. Возможно указать значение из списка:

  • begin - совпадение в начале;

  • end - совпадение в конце;

  • exact - полное совпадение.

  1. Задать содержимое шаблона поиска в URL:

set load-balancing reverse-proxy service <service_name> rule <rule_number> url-path <search_mod> <URL_sample>

где <URL_sample> - адрес для поиска. Ограничения:

  • должен начинаться с косой черты («/»);

  • не может начинаться с двойной косой черты («//»);

  • допускаются только строчные и прописные символы латинского алфавита и цифры;

  • может содержать точки («.»), дефисы («-»), косые черты («/»), нижние подчёркивание («_»).

  1. Задать содержимое шаблона поиска в доменном имени:

set load-balancing reverse-proxy service <service_name> rule <rule_number> domain-name <domain_name>

где <domain_name> - доменное имя. Ограничения:

  • длина доменного имени не должна превышать 242 символа;

  • длина доменной группы не должна превышать 63 символа;

  • может содержать дефисы («-») и точки («.»), но они не могут быть на первом и последнем месте;

  • число групп, которые разделены точкой, не может быть больше 127.

Пример настройки обратного прокси-сервера

В качестве примера настройки функций обратного прокси-сервера используется схема стенда, представленная на рисунке (см. Рисунок – Схема стенда для настройки функций обратного прокси-сервера).

../../../_images/ngfw.rp.reverse-proxy_2.1.png

Рисунок – Схема стенда для настройки функций обратного прокси-сервера

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

  1. Настройка backend-серверов:

set load-balancing reverse-proxy backend <backend_name> server <server_name1> address 192.168.4.10
set load-balancing reverse-proxy backend <backend_name> server <server_name1> port 21

set load-balancing reverse-proxy backend <backend_name> server <server_name2> address 192.168.4.20
set load-balancing reverse-proxy backend <backend_name> server <server_name2> port 21

set load-balancing reverse-proxy backend <backend_name> mode tcp

где:

  • «backend_name» – имя, идентифицирующее группу серверов (backend-сервис);

  • «server_name1», «server_name2» – имена отдельных серверов в группе;

  • «192.168.4.10» – IP-адрес сервера «Server 1»;

  • «192.168.4.20» – IP-адрес сервера «Server 2»;

  • «21» – порт, на который будут перенаправляться клиентские запросы;

  • «tcp» – режим проксирования, используемый для передачи данных на транспортном уровне. Допустимые значения:

    • http — для проксирования HTTP-трафика (работает на уровне приложений);

    • tcp — для проксирования произвольного TCP-трафика (работает на транспортном уровне).

  1. Настройка сервиса обратного прокси:

set load-balancing reverse-proxy service <reverse-proxy_name> listen-address 192.168.22.78
set load-balancing reverse-proxy service <reverse-proxy_name> mode tcp
set load-balancing reverse-proxy service <reverse-proxy_name> port 21
set load-balancing reverse-proxy service <reverse-proxy_name> backend <backend_name>

где:

  • <reverse-proxy_name> – имя создаваемого сервиса обратного прокси;

  • «192.168.22.78» – IP-адрес сетевого интерфейса, ожидающего входящие соединения;

  • «21» – порт, на котором будет приниматься внешний трафик для последующего проксирования.

  1. Применить и сохранить изменения с помощью команд «commit» и «save» соответственно.