TGViewer
ServerAdmin.ru ServerAdmin.ru @srv_admin · 32.6K subscribers
Post #5129 8.92K
Вчера была заметка про Angie. Хочу подробнее остановиться на одной из его настроек, о которой кто-то возможно не знает. Привычное применение веб сервера - непосредственно обработка HTTP запросов или их проксирование с балансировкой куда-то ещё. Последнее обычно называют работой в качестве обратного прокси. Но помимо HTTP трафика Angie может обрабатывать и другие соединения.

У Nginx, следовательно и у Angie, есть модуль Stream для обработки TCP и UDP соединений. По умолчанию он не включён в стандартный состав веб-сервера, да и появился он в Nginx не сразу. С его помощью можно проксировать соединения, к примеру RDP протокола, DNS запросов или подключений к VPN серверу. Применений можно найти массу. Очень удобно управлять всеми соединениями в единой точке входа.

Раньше для подобных задач проще было взять HAProxy, потому что он изначально всё это умеет. Не надо ничего пересобирать. Сейчас, в принципе, тоже это просто сделать, но если у вас уже есть Angie и хочется всё реализовать с его помощью, то удобнее будет именно его и использовать.

У Angie модуль stream включён в сборку в стандартных пакетах, так что ничего не нужно дополнительно делать. Можно сразу настраивать нужную функциональность. Выглядит она примерно так:

stream {
  limit_conn_zone $binary_remote_addr zone=addr:10m;
  log_format basic '$remote_addr [$time_local] '
    '$protocol $status $bytes_sent $bytes_received '
    '$session_time ' "$upstream_addr";
include /etc/angie/stream.d/*.conf;
}

upstream rdp {
  server 192.168.100.2:3389;
  server 192.168.100.3:3389;
}

server {
  listen 3390;
  allow 192.168.100.0/24;
  deny all;
  limit_conn addr 1;
  proxy_pass rdp;
  access_log /var/log/angie/rdp-access.log basic;
}


❓Что мы тут сделали:

- Запустили Angie на TCP порту 3390 слушать входящие соединения.
- Настроили перенаправление соединений на 2 терминальных сервера:
  server 192.168.100.2:3389;
  server 192.168.100.3:3389;
- Настроили ограничение на 1 соединение с одного IP адреса.
- Настроили ограничение на доступ только из подсети 192.168.100.0/24.
- Настроили логирование соединений в rdp-access.log с заданным форматом.

Это немного синтетический пример просто для демонстрации возможностей. Конкретно RDP протокол может не только транслироваться куда-то дальше, но и разбираться прямо на сервере с помощью ещё одного модуля stream_rdp_preread_module. Можно идентифицировать сессию и направить её на конкретный сервер. Отдельно отмечу, что подобная настройка будет актуальна и для одного RDP сервера. Мы просто скрываем его за Angie.

В чём вообще смысл подобных настроек? Балансировщиков много разных, плюс сам сервис может иметь свой балансировщик, как тот же RD Gateway (Remote Desktop Gateway).

Основное удобство в том, что вы получаете все инструменты по управлению, ограничению, логированию запросов, которые уже есть в Angie. Я тут как раз их и продемонстрировал. Мы, во-первых, логируем все запросы, в том числе и неудачные, мы, во-вторых, ограничили число запросов и доступ с определённых подсетей. И это далеко не всё, что умеет Angie.

В дополнение к этому можно настроить TLS соединения с клиентами для тех сервисов, которые сами это не умеют делать. То есть клиенты подключатся к Angie по TLS, а дальше соединения проксируются на сервис без шифрования. Какой-нибудь старый почтовый сервер так можно закрыть, который стоит локально и не умеет в шифрование. Или соединения к СУБД временно направить извне, не меняя конфигурацию, которая настроена на локальные подключения без шифрования.

Плюс, можно на основе имени домена в SNI направить трафик в нужном направлении. Например, при обращении к домену example.com направлять запросы на веб сервер с сайтом, а при запросе домена rdp.example.com направить соединения на бэкенды с RDP. То есть мы не по портам раскидываем трафик, а по доменным именам в TLS соединениях.

В общем, функциональность очень удобная и простая в настройке. По хорошему, имеет смысл так закрывать все публичные службы.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX

#angie
Telegram ServerAdmin.ru Думаю, все уже слышали или знают такой продукт, как Angie. Это веб сервер, форк Nginx, который развивается, насколько я понимаю, независимо от него. Я уже давно нигде не устанавливаю Nginx. Если только по привычке на тестах каких-нибудь, потому что он есть…
  • 👍 141
  • 👎 6
More from @srv_admin
  1. Sep 23, 2026Очередная подборка статей авторов, которые согласились в ней участвовать. Кто не понимает,…
  2. Sep 23, 2026Контейнеры в одном инструменте, виртуалки — в другом, частное облако — вообще отдельная ис…
  3. Sep 23, 2026Расскажу тем, кто не знает, и напомню тем, кто забыл, как я. Не надо в Proxmox в LXC конте…
  4. Sep 22, 2026Недавно случайно заметил любопытную информацию на тему Proxmox VE и новой функциональности…
  5. Sep 22, 2026✔️ Сети для всех — сообщество для тех, кто развивается в сетевом и системном администриров…
  6. Sep 22, 2026Я ранее уже рассказывал, что приобрёл себе домой полноценную серверную платформу на базе S…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →