From 7e73f065c04daacaacbeaeda4ad8a4d78797bbfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= <78488229+viktor138irk@users.noreply.github.com> Date: Sat, 9 May 2026 00:33:41 +0900 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B8=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=82=D0=B8=20=D0=BC=D0=B5?= =?UTF-8?q?=D0=B6=D0=B4=D1=83=20FastPanel=20proxy=20=D0=B8=20Core?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/PRIVATE_NETWORK_BETWEEN_SERVERS.md | 150 ++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 docs/PRIVATE_NETWORK_BETWEEN_SERVERS.md diff --git a/docs/PRIVATE_NETWORK_BETWEEN_SERVERS.md b/docs/PRIVATE_NETWORK_BETWEEN_SERVERS.md new file mode 100644 index 0000000..c3157b3 --- /dev/null +++ b/docs/PRIVATE_NETWORK_BETWEEN_SERVERS.md @@ -0,0 +1,150 @@ +# SWChat — приватная сеть между FastPanel proxy и Core + +Если FastPanel proxy сервер и SWChat Core можно объединить в приватную локальную сеть, это предпочтительная схема. + +## Почему это лучше + +Преимущества: +- Matrix Core не светит порт `8008` в публичный интернет; +- FastPanel ходит к Synapse по внутреннему IP; +- меньше зависимость от публичного firewall; +- проще ограничить доступ; +- безопаснее для production; +- ниже риск случайного сканирования Matrix endpoint. + +## Рекомендуемая схема + +```text +Пользователь + ↓ HTTPS +matrix.stackworks.ru + ↓ +FastPanel/Nginx reverse proxy + ↓ private network +CORE_PRIVATE_IP:8008 + ↓ +SWChat Core / Synapse +``` + +## DNS + +Публичные DNS-записи остаются на FastPanel proxy сервер: + +```text +matrix.stackworks.ru A FASTPANEL_PUBLIC_IP +chat.stackworks.ru A FASTPANEL_PUBLIC_IP +``` + +Core-сервер не обязан иметь публичный домен для Matrix API. + +## Core-сервер + +На Core-сервере нужно узнать приватный IP: + +```bash +ip -4 addr +ip route +``` + +Пример приватного IP: + +```text +10.10.0.12 +``` + +## FastPanel-сервер + +С FastPanel-сервера проверить доступ до Core по приватному IP: + +```bash +ping CORE_PRIVATE_IP +curl http://CORE_PRIVATE_IP:8008/_matrix/client/versions +``` + +Ожидается JSON Matrix API. + +## Nginx proxy для FastPanel + +Для `matrix.stackworks.ru` использовать приватный IP Core-сервера: + +```nginx +location / { + proxy_pass http://CORE_PRIVATE_IP:8008; + + 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 https; + + client_max_body_size 100M; + proxy_read_timeout 600s; + proxy_send_timeout 600s; +} +``` + +## Firewall на Core + +Разрешить порт 8008 только с приватного IP FastPanel-сервера. + +```bash +ufw allow from FASTPANEL_PRIVATE_IP to any port 8008 proto tcp +ufw deny 8008/tcp +ufw status numbered +``` + +Если сервис слушает `127.0.0.1:8008`, FastPanel не сможет подключиться по приватной сети. В этом случае нужно пробросить Synapse на приватный IP или на `0.0.0.0:8008`, но закрыть firewall для всех кроме FastPanel private IP. + +## Важное замечание про docker-compose + +Текущий compose публикует Synapse так: + +```yaml +ports: + - '127.0.0.1:8008:8008' +``` + +Для приватной сети потребуется изменить на один из вариантов: + +```yaml +ports: + - 'CORE_PRIVATE_IP:8008:8008' +``` + +или: + +```yaml +ports: + - '8008:8008' +``` + +Второй вариант допустим только при строгом firewall. + +## Выбранная рекомендация + +Предпочтительно: + +```yaml +ports: + - 'CORE_PRIVATE_IP:8008:8008' +``` + +Так Synapse будет доступен только по приватному интерфейсу. + +## Проверка + +С FastPanel proxy сервера: + +```bash +curl http://CORE_PRIVATE_IP:8008/_matrix/client/versions +``` + +С внешнего интернета прямой доступ к Core:8008 должен быть закрыт. + +Публичная проверка: + +```bash +curl https://matrix.stackworks.ru/_matrix/client/versions +``` + +Ожидается JSON Matrix API.