Публикация INFRAX в продакшн

Обзор

Для публикации INFRAX в продакшн рекомендуется использовать reverse proxy сервер (например, Nginx). Это обеспечивает:

  • Централизованное управление SSL сертификатами
  • Возможность использования доменных имен вместо IP:порт
  • Дополнительный уровень безопасности
  • Балансировку нагрузки (при необходимости)
  • Единую точку входа для всех сервисов
ℹ️ Архитектура

В данном руководстве описывается настройка Nginx в качестве reverse proxy для основных сервисов INFRAX:

  • INFRAX - основное приложение (порты 8045 - веб-интерфейс, 8042 - нативные клиенты)
  • Identyx - система управления пользователями (порт 8040)
⚠️ Важно для нативных клиентов

Если вы планируете использовать нативные клиенты (RDP, SSH, VNC) для удаленных подключений извне вашей сети, порт 8042 контейнера INFRAX должен быть доступен напрямую, без проксирования через Nginx. См. раздел Доступ для нативных клиентов.

Настройка URL приложений

Перед настройкой reverse proxy необходимо настроить URL приложений в самой системе INFRAX:

Шаг 1: Запуск меню управления

Linux / macOS / Git Bash:

sudo bash infrax.sh

Windows (Command Prompt или PowerShell):

infrax.bat

Шаг 2: Настройка URL

  1. Выберите пункт "7. ⚙️ Настроить URL приложений"
  2. Выберите пункт "3. Полностью ввести свой URL"
  3. Укажите домены для ваших сервисов:
    Введите URL для INFRAX: https://infrax.mydomain.ru
    Введите URL для IDENTYX: https://auth.mydomain.ru
⚠️ Важно

Используйте реальные доменные имена, которые будут настроены в вашем DNS. Убедитесь, что:

  • DNS записи A или CNAME указывают на IP адрес вашего сервера
  • Используется протокол https://
  • Домены доступны для проверки при получении SSL сертификатов

Установка Nginx

Установите Nginx и утилиты для управления SSL сертификатами:

Ubuntu / Debian

sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx

CentOS / RHEL

sudo yum install -y epel-release
sudo yum install -y nginx certbot python3-certbot-nginx

Временный SSL сертификат

Для начальной настройки установите самоподписанный сертификат:

sudo apt install -y ssl-cert

Этот пакет создает временные сертификаты, которые позволят запустить Nginx с HTTPS до получения реальных сертификатов от Let's Encrypt.

💡 Примечание

Самоподписанные сертификаты расположены в:

  • /etc/ssl/certs/ssl-cert-snakeoil.pem - сертификат
  • /etc/ssl/private/ssl-cert-snakeoil.key - приватный ключ

Настройка Nginx

Создайте конфигурационный файл для reverse proxy:

sudo nano /etc/nginx/conf.d/reverse-proxy.conf

Содержимое конфигурационного файла

# /etc/nginx/conf.d/reverse-proxy.conf

# Общие настройки прокси
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# Reverse Proxy для Identyx (IAM система)
server {
    listen 443 ssl;
    server_name auth.mydomain.ru;

    # Временные самоподписанные сертификаты
    ssl_certificate     /etc/ssl/certs/ssl-cert-snakeoil.pem;
    ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass https://127.0.0.1:8040;
        proxy_ssl_verify off;
        
        # Поддержка WebSocket для реального времени
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}

# Reverse Proxy для INFRAX (основное приложение)
server {
    listen 443 ssl;
    server_name infrax.mydomain.ru;

    # Временные самоподписанные сертификаты
    ssl_certificate     /etc/ssl/certs/ssl-cert-snakeoil.pem;
    ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass https://127.0.0.1:8045;
        proxy_ssl_verify off;

        # Увеличенный лимит для загрузки файлов
        client_max_body_size 20G;
        
        # Отключение буферизации для больших файлов
        proxy_buffering off;
        proxy_request_buffering off;

        # Увеличенные таймауты для длительных операций
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;

        # Поддержка WebSocket
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}

# HTTP → HTTPS редирект
server {
    listen 80;
    server_name auth.mydomain.ru infrax.mydomain.ru;
    return 301 https://$host$request_uri;
}

# Переменная для корректной установки Connection на Upgrade/keep-alive
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
⚠️ Замените домены

Не забудьте заменить auth.mydomain.ru и infrax.mydomain.ru на ваши реальные домены!

Описание параметров конфигурации

Параметр Значение Назначение
proxy_http_version 1.1 Использование HTTP/1.1 для поддержки WebSocket
proxy_set_header Host $host Передача оригинального заголовка Host
proxy_set_header X-Real-IP $remote_addr Передача реального IP клиента
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for Цепочка прокси-серверов
proxy_set_header X-Forwarded-Proto $scheme Передача протокола (http/https)
client_max_body_size 20G Максимальный размер загружаемых файлов
proxy_buffering off Отключение буферизации для больших файлов
proxy_read_timeout 300s Таймаут чтения ответа от бэкенда
proxy_ssl_verify off Отключение проверки самоподписанного сертификата бэкенда

Проверка и применение конфигурации

Проверьте синтаксис конфигурации и перезагрузите Nginx:

sudo nginx -t && sudo systemctl reload nginx

Если проверка прошла успешно, вы увидите:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Доступ для нативных клиентов

Если вы планируете использовать нативные клиенты (mstsc.exe для RDP, PuTTY для SSH и т.д.) для удаленных подключений извне вашей сети, необходимо обеспечить прямой доступ к порту 8042 контейнера INFRAX.

⚠️ Важное отличие

Порт 8042 НЕ проксируется через Nginx, в отличие от порта 8045 (веб-интерфейс) и 8040 (Identyx). Это связано с особенностями работы нативных протоколов RDP/SSH/VNC, которые требуют прямого подключения к Video Gateway через контейнер INFRAX.

Настройка доступа к порту 8042

Для работы нативных клиентов извне необходимо:

  1. Открыть порт 8042 в firewall:
    # UFW (Ubuntu/Debian)
    sudo ufw allow 8042/tcp
    
    # Firewalld (CentOS/RHEL)
    sudo firewall-cmd --permanent --add-port=8042/tcp
    sudo firewall-cmd --reload
    
    # Iptables
    sudo iptables -A INPUT -p tcp --dport 8042 -j ACCEPT
    sudo iptables-save > /etc/iptables/rules.v4
  2. Настроить проброс порта на роутере/файерволе (если сервер находится за NAT):
    • Порт: 8042
    • Протокол: TCP
    • Целевой IP: IP адрес вашего сервера INFRAX
  3. Убедиться, что контейнер INFRAX использует валидный SSL сертификат для порта 8042 (самоподписанный сертификат по умолчанию может вызывать проблемы с некоторыми клиентами)

Режимы подключения в INFRAX

INFRAX поддерживает два режима удаленного доступа:

Режим Порт Описание Требования
Веб-клиент 8045 Подключение через браузер (Apache Guacamole) Работает через Nginx, не требует дополнительных настроек
Нативный клиент 8042 Использование системных приложений (mstsc, PuTTY, VNC Viewer) Требует прямого доступа к порту 8042

Сценарии использования

Только веб-доступ (рекомендуется)

Если пользователи работают только через браузер:

  • ✅ Порт 8042 можно НЕ открывать извне
  • ✅ Все подключения идут через Nginx (порты 80/443)
  • ✅ Максимальная безопасность

Веб + нативные клиенты

Если требуются подключения через нативные клиенты извне:

  • ⚠️ Порт 8042 должен быть открыт и доступен извне
  • ⚠️ Убедитесь в наличии валидного SSL сертификата для порта 8042 контейнера INFRAX
  • ⚠️ Рекомендуется ограничить доступ по IP (белые списки)

Ограничение доступа к порту 8042

Для повышения безопасности рекомендуется разрешить доступ к порту 8042 только с определенных IP адресов:

# UFW - разрешить доступ только с конкретных IP
sudo ufw allow from 203.0.113.0/24 to any port 8042 proto tcp

# Firewalld - создание зоны с ограничениями
sudo firewall-cmd --permanent --new-zone=infrax-native
sudo firewall-cmd --permanent --zone=infrax-native --add-port=8042/tcp
sudo firewall-cmd --permanent --zone=infrax-native --add-source=203.0.113.0/24
sudo firewall-cmd --reload
💡 Рекомендация

Если пользователи работают из фиксированных офисов или через VPN, настройте белые списки IP адресов для доступа к порту 8042. Это значительно повысит безопасность системы.

Установка реальных SSL сертификатов

После успешной настройки Nginx с временными сертификатами, установите реальные SSL сертификаты от Let's Encrypt:

Получение сертификатов

Certbot автоматически обновит конфигурацию Nginx и заменит временные сертификаты на настоящие:

# Для домена Identyx
sudo certbot --nginx -d auth.mydomain.ru

# Для домена INFRAX
sudo certbot --nginx -d infrax.mydomain.ru

Следуйте инструкциям на экране:

  1. Введите email адрес для важных уведомлений
  2. Согласитесь с условиями использования
  3. Выберите, хотите ли вы получать новости от EFF (опционально)
✅ Автоматическое обновление

Certbot автоматически настраивает задание cron для обновления сертификатов. Сертификаты будут обновляться автоматически до истечения срока действия.

Проверка после установки сертификатов

Проверьте конфигурацию и перезагрузите Nginx:

sudo nginx -t && sudo systemctl reload nginx

Проверка статуса сертификатов

Просмотрите установленные сертификаты:

sudo certbot certificates

Тестирование автоматического обновления

Проверьте, что автоматическое обновление настроено корректно:

sudo certbot renew --dry-run

Проверка работоспособности

После завершения настройки проверьте доступность сервисов:

Проверка с помощью curl

# Проверка Identyx
curl -I https://auth.mydomain.ru

# Проверка INFRAX
curl -I https://infrax.mydomain.ru

Успешный ответ должен содержать HTTP/2 200 или HTTP/1.1 200 OK.

Проверка в браузере

  1. Откройте https://infrax.mydomain.ru в браузере
  2. Убедитесь, что отображается зеленый замок (валидный SSL сертификат)
  3. Войдите в систему с учетными данными
  4. Проверьте основные функции приложения

Проверка WebSocket соединений

Откройте консоль разработчика в браузере (F12) и убедитесь, что:

  • Нет ошибок подключения к WebSocket
  • Уведомления в реальном времени работают корректно
  • Обновления данных происходят мгновенно

Устранение неполадок

502 Bad Gateway

Причина: Nginx не может подключиться к бэкенд-сервису INFRAX.

Решение:

  1. Убедитесь, что INFRAX запущен:
    docker ps
  2. Проверьте, что порты 8040 и 8045 открыты и слушаются:
    sudo netstat -tlnp | grep -E '8040|8045'
  3. Проверьте логи Nginx:
    sudo tail -f /var/log/nginx/error.log
  4. Проверьте логи INFRAX:
    docker compose logs infrax
    docker compose logs identyx

SSL сертификат не получен

Причина: Certbot не может подтвердить владение доменом.

Решение:

  1. Проверьте DNS записи:
    nslookup infrax.mydomain.ru
    nslookup auth.mydomain.ru
  2. Убедитесь, что порт 80 открыт (нужен для проверки Let's Encrypt)
  3. Проверьте firewall:
    # UFW (Ubuntu)
    sudo ufw allow 'Nginx Full'
    
    # Firewalld (CentOS)
    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-service=https
    sudo firewall-cmd --reload

WebSocket не работает

Причина: Nginx не передает заголовки Upgrade для WebSocket.

Решение:

Убедитесь, что в конфигурации присутствуют строки:

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

Большие файлы не загружаются

Причина: Ограничение на размер загружаемых файлов.

Решение:

Увеличьте лимит в конфигурации Nginx:

client_max_body_size 20G;

Также проверьте настройки PHP (если применимо) в php.ini:

upload_max_filesize = 20G
post_max_size = 20G

Медленная работа через прокси

Решение:

Отключите буферизацию и увеличьте таймауты:

proxy_buffering off;
proxy_request_buffering off;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
🎉 Поздравляем!

Ваша установка INFRAX теперь доступна через доменные имена с валидными SSL сертификатами и готова к продакшн использованию!