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

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».

  1. Включить логирование:

set load-balancing reverse-proxy global-parameters logging facility <facility> level <level>

где:

  • <facility> – источник, от имени которого сообщения будут регистрироваться в журнале. Допустимы следующие значения:

    • «auth» – проверка подлинности и авторизация;

    • «cron» – служба cron;

    • «daemon» – системные службы;

    • «kern» – ядро;

    • «lpr» – буфер построчного принтера;

    • «mail» – подсистема электронной почты;

    • «news» – подсистема USENET;

    • «syslog» – системная регистрация;

    • «user» – прикладные процессы;

    • «uucp» – подсистема UUCP;

    • «local0» – локальный сервис 0;

    • «local1» – локальный сервис 1;

    • «local2» – локальный сервис 2;

    • «local3» – локальный сервис 3;

    • «local4» – локальный сервис 4;

    • «local5» – локальный сервис 5;

    • «local6» – локальный сервис 6;

    • «local7» – локальный сервис 7.

  • <level> – уровень логирования. Допустимы следующие значения:

    • «alert» – важные предупреждения;

    • «crit» – критические системные сообщения;

    • «debug» – детализированные отладочные данные;

    • «emerg» – сообщения о критических аварийных ситуациях;

    • «err» – ошибки и неисправности в работе системы;

    • «info» – общая информация о функционировании системы;

    • «notice» – уведомления о значимых событиях;

    • «warn» – предупреждения о потенциальных проблемах.

Группы 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>
  1. Задать режим работы для выбранной службы:

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.r.cli.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» соответственно.