Как настроить reverse proxy (проброс портов) для TrueConf Server
Мессенджер TrueConf Server предоставляет чаты и видеосвязь в пределах корпоративной сети. Если требуется, чтобы сервер был доступен снаружи сети (в интернете), то часто в целях безопасности веб-сервисы скрывают за обратным прокси.
Обратный прокси (reverse proxy) – это специальный узел (сервис) в структуре сети, позволяющий настроить перенаправление трафика от клиентских устройств к веб-серверам компании так, чтобы снаружи сети не было видно реальных адресов этих серверов. То есть в нашем случае веб-служба TrueConf Server будет закрыта от прямого доступа извне. В качестве прокси будем использовать NGINX.
Техническая поддержка Труконф не рекомендует пропускать через NGINX медиатрафик, хоть это технически возможно. Мы не можем гарантировать корректную работу NGINX при работе с большим объёмом медиатрафика. Весь трафик по порту 4307 проприетарного протокола TrueConf шифруется алгоритмом AES-256 и потому достаточно файрвола.
В нашем примере прокси-машина будет управляться ОС Debian 11, на которой установлены следующие версии ПО:
- NGINX – 1.22.0, официальный сайт для скачивания
- TrueConf Server – 5.0.3, свежие версии можно скачать с сайта Труконф
- firewalld – 0.9.3, стандартный файрвол для Linux, установим из репозиториев.
Если вы используете TrueConf Server на Windows, то там можно также установить NGINX и тогда общая логика настроек будет такая же.
Настройка прокси-сервера
Сначала настроим NGINX в качестве прокси для веб-службы TrueConf Server. В нашей конфигурации он будет проксировать трафик, приходящий на стандартные HTTP и HTTPS порты: 80 и 443 соответственно. Если вы используете другие порты (как их поменять, смотрите в документации сервера), то укажите их в соответствующих строках в настройках ниже.
Настройка выполняется путём прописывания директив в конфигурационном файле. По умолчанию он называется nginx.conf и располагается в одном из следующих каталогов:
/etc/nginx;/usr/local/nginx/conf;/usr/local/etc/nginx.
Директивы должны быть расположены внутри блока server { … }. Состоит настройка из следующих шагов:
- Задайте порты, которые будут прослушиваться – 80 и 443.
1234listen 80 default_server;listen [::]:80 default_server;listen 443 ssl default_server;listen [::]:443 ssl default_server;
- Укажите пути к файлу SSL-сертификата и его ключа, чтобы настроить HTTPS-соединение у NGINX (Если у вас нет сертификата, вы можете сгенерировать его самостоятельно при помощи библиотеки OpenSSL). После этого настраивать HTTPS на TrueConf Server уже не нужно — шифрование трафика будет обеспечено прокси-сервером.
HTTPS нужен для работы TrueConf Server API. Без него вы не сможете получить токен OAuth2, необходимый для работы API.
12ssl_certificate /etc/example/certificate.crt;ssl_certificate_key /etc/example/cert-key.key; - Пропишите блок
locationс конфигурацией для проксирования.1234567location / {proxy_pass https://192.168.10.1:443;proxy_ssl_verify off;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-IP $remote_addr;}В директиве
proxy_passукажите внутренний адрес TrueConf Server в вашей локальной сети, доступный хосту с NGINX. Благодаря этой директиве трафик, приходящий на ранее заданные порты, будет перенаправляться на указанный адрес. Помимо проксирования в этом блоке настраивается передача HTTP-заголовков и отключение верификации SSL-сертификата. - Если предполагается использовать подключение по WebRTC (через браузер), то с новой строки после предыдущего блока пропишите ещё один блок location с конфигурацией для проксирования WebSocket-запросов на порт 4307 и укажите адрес вашего TrueConf Server. Этот порт может помимо протокола TrueConf использоваться для передачи сигнального (то есть управляющего) трафика между сервером видеосвязи и браузерным клиентским приложением. Это позволит не нагружать веб-сервер обработкой лишнего трафика.
1234567location /websocket/ {proxy_pass http://192.168.10.1:4307/websocket/;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";proxy_set_header Host $host;}
WebSocket-запросы должны проксироваться только через HTTP. В противном случае подключиться к конференции будет невозможно.
Конфигурация прокси-сервера Nginx завершена. Чтобы внесённые изменения вступили в силу, необходимо его перезапустить. Для этого в терминале под суперпользователем выполните команду:
1sudo nginx -s reload
Настройка файервола
Помимо рассмотренных протоколов HTTP, HTTPS и WebSocket для всех возможностей видеосвязи Труконф могут использоваться протоколы, использующие другие порты, например:
- 4307 – основной и единственный необходимый TCP-порт для передачи медиаданных между TrueConf Server и TrueConf-клиентом;
- 554 – TCP-порт для работы по RTSP-протоколу;
- 1720 – TCP-порт для установки соединения с H.323-устройствами;
- 52000–52499 – TCP-порты для согласования параметров соединения по протоколу H.323;
- 5060 – порт TCP или UDP для инициализации соединения по протоколу SIP;
- 50000–51999 – UDP-порты для передачи медиапотоков по протоколам SIP/H.323.
В списке для примера приведены некоторые из необходимых портов. Подробнее про список используемых в TrueConf Server портов можно почитать в соответствующей инструкции.
В этом случае перенаправления HTTP/HTTPS-трафика через веб-сервер NGINX будет недостаточно. Настроить трансляцию остальных портов можно с помощью фаервола. Для примера воспользуемся пакетом firewalld:
Для выполнения перечисленных далее команд используйте программу sudo, или предварительно перейдите в режим суперпользователя, выполнив в терминале команду su - и введя root-пароль.
- Сначала необходимо его установить:
1sudo apt install firewalld
- Затем разрешите обращение к NGINX командами:
12sudo firewall-cmd --permanent --zone="public" --add-service=httpfirewall-cmd --permanent --zone="public" --add-service=https
Расшифровка используемых параметров:
--permanent– позволяет добавить настройку на постоянной основе, сохранив её после перезапуска ОС или файeрвола;--zone="public"– устанавливает, к какой зоне будет применяться настройка;--add-service– добавляет сервис к указанной зоне.
- Выполните команды для проброса TCP и UDP портов. Они могут настраивать проброс как одного порта, так и целого диапазона. Мы для примера покажем по одной команде каждого типа: одна будет пробрасывать 554 порт (для RTSP), вторая будет пробрасывать диапазон портов 50000-51999 (для SIP/H.323):
123sudo firewall-cmd --permanent --zone="public" --add-forward-port=port=554:proto=tcp:toport=554:toaddr=192.168.10.1sudo firewall-cmd --permanent --zone="public" --add-forward-port=port=50000-51999:proto=udp:toport=50000-51999:toaddr=192.168.10.1Аналогичными командами выполните проброс остальных необходимых портов.
Расшифровка используемых параметров:
--add-forward-port– позволяет пробросить порт с одной машины на другую;port– задаёт пробрасываемый порт/диапазон портов;proto– задаёт протокол передачи данных через порт;toport– задаёт целевой порт;toaddr– задаёт адрес машины, на которую пробрасываем исходный порт.
- Выполните команды, которые настроят подмену адреса проксируемой машины (с установленным TrueConf Server) на адрес прокси-сервера. Тем самым мы перенаправим входящий и исходящий трафик через прокси, скрыв реальный IP сервера видеосвязи. Список портов для протоколов TCP и UDP настраивается по отдельности, например:
123sudo firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -p tcp -m multiport --dports 4307,554,1720,5060,52000:52499 -j SNAT --to-source 192.168.10.2sudo firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -p udp -m multiport --dports 5060,50000:51999 -j SNAT --to-source 192.168.10.2
Расшифровка используемых параметров:
--direct– включает direct-синтаксис, позволяющий сделать более тонкую настройку (по сути это синтаксис пакета iptables);--add-rule– позволяет добавить правило iptables;ipv4– указываем, что настройка производится для трафика IPv4;nat– включаем таблицу NAT;POSTROUTING– включаем цепочкуPOSTROUTING;0– приоритет задаваемого правила (0 — наивысший);POSTROUTING– задаёт адрес машины, на которую пробрасываем исходный порт.-p tcp– задаём сетевой протокол TCP;-p upd– задаём сетевой протокол UDP;-m multiport– включаем использование правилом нескольких портов;--dports– список портов, на которых правило будет действовать;-j SNAT– задаём действие, которое будет выполняться, если пакет подходит под описанное правило;--to-source 192.168.10.2– указываем IP-адрес, на который будем подменять исходный (в нашем случае это IP-адрес прокси).
Проверка настроек
После того как настройка произведена, перезапустите firewalld, чтобы сохранить изменения:
|
1 |
sudo firewall-cmd --reload |
Затем проверьте, применились ли настройки. Для этого необходимо в терминале выполнить точно такую же команду, как для проброса порта, только заменив --add-forward-port на -–query-forward-port. Например, чтобы проверить, проброшен ли 554 порт, выполните следующую команду:
|
1 |
sudo firewall-cmd --permanent --zone="public" --query-forward-port=port=554:proto=udp:toport=554:toaddr=192.168.10.1 |
Если в консоль вывелось слово no – это значит, что порт не проброшен. Причиной этому может быть то, что вы не прописали ключ --permanent в соответствующей команде. Выполните команду в терминале снова, удостоверившись, что этот ключ присутствует.
Если же в консоль вывелось слово yes – значит настройка проброса порта на машину с TrueConf Server успешно выполнена.