3.8 KiB
SWChat — приватная сеть между FastPanel proxy и Core
Если FastPanel proxy сервер и SWChat Core можно объединить в приватную локальную сеть, это предпочтительная схема.
Почему это лучше
Преимущества:
- Matrix Core не светит порт
8008в публичный интернет; - FastPanel ходит к Synapse по внутреннему IP;
- меньше зависимость от публичного firewall;
- проще ограничить доступ;
- безопаснее для production;
- ниже риск случайного сканирования Matrix endpoint.
Рекомендуемая схема
Пользователь
↓ HTTPS
matrix.stackworks.ru
↓
FastPanel/Nginx reverse proxy
↓ private network
CORE_PRIVATE_IP:8008
↓
SWChat Core / Synapse
DNS
Публичные DNS-записи остаются на FastPanel proxy сервер:
matrix.stackworks.ru A FASTPANEL_PUBLIC_IP
chat.stackworks.ru A FASTPANEL_PUBLIC_IP
Core-сервер не обязан иметь публичный домен для Matrix API.
Core-сервер
На Core-сервере нужно узнать приватный IP:
ip -4 addr
ip route
Пример приватного IP:
10.10.0.12
FastPanel-сервер
С FastPanel-сервера проверить доступ до Core по приватному IP:
ping CORE_PRIVATE_IP
curl http://CORE_PRIVATE_IP:8008/_matrix/client/versions
Ожидается JSON Matrix API.
Nginx proxy для FastPanel
Для matrix.stackworks.ru использовать приватный IP Core-сервера:
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-сервера.
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 так:
ports:
- '127.0.0.1:8008:8008'
Для приватной сети потребуется изменить на один из вариантов:
ports:
- 'CORE_PRIVATE_IP:8008:8008'
или:
ports:
- '8008:8008'
Второй вариант допустим только при строгом firewall.
Выбранная рекомендация
Предпочтительно:
ports:
- 'CORE_PRIVATE_IP:8008:8008'
Так Synapse будет доступен только по приватному интерфейсу.
Проверка
С FastPanel proxy сервера:
curl http://CORE_PRIVATE_IP:8008/_matrix/client/versions
С внешнего интернета прямой доступ к Core:8008 должен быть закрыт.
Публичная проверка:
curl https://matrix.stackworks.ru/_matrix/client/versions
Ожидается JSON Matrix API.