Добавлена документация приватной сети между FastPanel proxy и Core
Этот коммит содержится в:
@@ -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.
|
||||||
Ссылка в новой задаче
Block a user