Конфигурация
Все настройки сервера хранятся в одном файле config.toml. На этой странице описано каждое поле.
Основные настройки
| Поле | Описание | Пример |
domain | Доменное имя вашего сервера | "chat.example.com" |
listen_addr | Адрес прослушивания | ":443" или ":8080" |
data_dir | Путь к каталогу данных (БД + файлы) | "./data" |
transport | Режим транспорта | "https", "cloudflare" или "vless" |
Безопасность
| Поле | Описание |
secret | 64-символьная hex-строка. Мастер-секрет для генерации ключей JWT и шифрования через HKDF. Генерируется мастером настройки. Никогда не раскрывайте. Если запустить freedom-mess protect-secret, на диске поле будет пустым, а зашифрованный контейнер появится в [encrypted_secret]. |
[encrypted_secret] | Необязательный AES-256-GCM контейнер для текущего мастер-секрета. Ключ разблокировки выводится из серверной passphrase через Argon2id. Старые секреты хранятся в [[encrypted_previous_secrets]]. Для автоматических перезапусков используйте FREEDOM_MESS_CONFIG_PASSPHRASE_FILE или systemd credentials. |
previous_secrets | Массив старых секретов. При ротации мастер-секрета старый перемещается сюда. Старые сообщения продолжают расшифровываться. В защищённом конфиге они хранятся как записи [[encrypted_previous_secrets]]. |
salt | 64-символьная hex-строка. Используется в HKDF вместе с секретом. |
bootstrap_token | UUID для первой ссылки-приглашения. Используется один раз при начальной настройке. |
Защита мастер-секрета
Актуальные Linux-скрипты защищают новые конфиги автоматически. Старые конфиги с открытым secret продолжают работать; чтобы зашифровать такой конфиг на месте, выполните:
freedom-mess protect-secret
При интерактивном запуске сервер спросит passphrase. Для автоматического systemd-перезапуска храните passphrase в файле только для владельца и передайте путь сервису:
sudo install -d -o freedom-mess -g freedom-mess -m 700 /etc/freedom-mess
sudo sh -c 'umask 077; cat > /etc/freedom-mess/config-passphrase'
sudo chown freedom-mess:freedom-mess /etc/freedom-mess/config-passphrase
Environment=FREEDOM_MESS_CONFIG_PASSPHRASE_FILE=/etc/freedom-mess/config-passphrase
На современных systemd-серверах лучше использовать credentials:
LoadCredential=freedom-mess-config-passphrase:/etc/freedom-mess/config-passphrase
TURN-сервер
| Поле | Описание | По умолчанию |
public_ip | Публичный IP-адрес сервера для TURN | Автоопределение |
turn_port | UDP-порт для TURN-сервера | 3478 |
Секция [acme] (режим HTTPS)
| Поле | Описание |
email | Email для уведомлений Let's Encrypt |
cert_dir | Каталог для хранения TLS-сертификатов |
http_addr | Адрес для HTTP-01 challenge (по умолчанию ":80") |
Секция [cloudflare] (режим Cloudflare)
| Поле | Описание |
trust_proxy | Доверять заголовку CF-Connecting-IP |
origin_cert | Путь к origin-сертификату Cloudflare (необязательно) |
origin_key | Путь к origin-ключу Cloudflare |
Секция [stealth] (режим VLESS)
| Поле | Описание |
keys.uuid | UUID клиента VLESS |
keys.private_key | Приватный ключ X25519 для REALITY |
keys.public_key | Публичный ключ X25519 (передаётся клиентам) |
keys.short_id | Короткий ID для аутентификации клиентов |
sni | Server Name Indication (по умолчанию "www.microsoft.com") |
fallback_addr | Куда перенаправляется не-VLESS трафик (сайт-прикрытие) |
Пример config.toml
domain = "chat.example.com"
listen_addr = ":443"
data_dir = "./data"
transport = "https"
secret = "a1b2c3d4...64-символьный-hex..."
salt = "e5f6a7b8...64-символьный-hex..."
bootstrap_token = "uuid-здесь"
public_ip = "203.0.113.10"
turn_port = 3478
[acme]
email = "[email protected]"
cert_dir = "./certs"
http_addr = ":80"
Файл config.toml содержит мастер-секрет, пока не выполнен protect-secret. Храните резервные копии конфига и passphrase разблокировки отдельно. Сервер требует права доступа 0600 и предупреждает, если файл более доступен.