# Shadowsocks Протокол [Shadowsocks](https://ru.wikipedia.org/wiki/Shadowsocks), совместимый с большинством других реализаций. Текущая совместимость: - Поддерживается пересылка TCP- и UDP-пакетов, при этом UDP можно при необходимости отключить. - Рекомендуемые методы шифрования: - 2022-blake3-aes-128-gcm - 2022-blake3-aes-256-gcm - 2022-blake3-chacha20-poly1305 - Другие методы шифрования: - aes-256-gcm - aes-128-gcm - chacha20-poly1305 или chacha20-ietf-poly1305 - xchacha20-poly1305 или xchacha20-ietf-poly1305 - none или plain Новый формат протокола Shadowsocks 2022 повышает производительность и обеспечивает полноценную защиту от повторов, устраняя следующие проблемы безопасности старого протокола: - [Серьезные уязвимости в конструкции AEAD-шифрования Shadowsocks, не позволяющие гарантировать надежность связи](https://github.com/shadowsocks/shadowsocks-org/issues/183) - Рост частоты ложных срабатываний исходного TCP-фильтра повторов со временем - Отсутствие защиты от повторов для UDP - Поведение TCP, которое может использоваться для активного зондирования ::: danger При использовании метода шифрования "none" трафик передается в открытом виде. В целях безопасности не используйте этот метод в публичных сетях. ::: ## InboundConfigurationObject `InboundConfigurationObject` соответствует элементу `settings` в [`InboundObject`](../inbound.md). ```json { "inbounds": [ { // ... "protocol": "shadowsocks", // [!code focus:13] "settings": { "network": "tcp,udp", "method": "aes-256-gcm", "password": "114514", "level": 0, "email": "love@xray.com", "users": [ { "password": "1919810", "method": "aes-128-gcm" } ] } } ] } ``` > `network`: "tcp" | "udp" | "tcp,udp" Тип сети, которую **прослушивает** серверный порт. Значение по умолчанию: `"tcp"`. Обратите внимание, что этот параметр относится только к прослушиванию; он в основном влияет на встроенную передачу UDP в Shadowsocks и управляет ею. Значение `"tcp"` не означает, что inbound отклонит UDP-прокси-запросы, потому что такие запросы все еще могут быть упакованы в TCP-пакеты через XUDP в Mux.Cool и отправлены на сервер. > `method`: string Метод шифрования. Список вариантов приведен выше. > `password`: string Обязательный параметр. - Shadowsocks 2022 В качестве пароля используется предварительно согласованный ключ, аналогичный WireGuard. Используйте `openssl rand -base64 <длина>` для генерации ключа, совместимого с shadowsocks-rust; длина зависит от выбранного метода шифрования. | Метод шифрования | Длина ключа | | ----------------------------- | ----------: | | 2022-blake3-aes-128-gcm | 16 | | 2022-blake3-aes-256-gcm | 32 | | 2022-blake3-chacha20-poly1305 | 32 | В реализации на Go 32-байтовые ключи работают всегда. - Другие методы шифрования Подходит любая строка. Длина пароля не ограничена, но короткие пароли легче подобрать, поэтому рекомендуется использовать пароль длиной не менее 16 символов. > `level`: number Уровень пользователя. Для соединения будет использоваться [локальная политика](../policy.md#levelpolicyobject), соответствующая этому уровню пользователя. Значение `level` соответствует значению `level` в разделе [policy](../policy.md#levelpolicyobject). Если не указано, по умолчанию используется 0. > `email`: string Адрес электронной почты пользователя, используемый для различения трафика разных пользователей (журналы, статистика). > `users`: [ [UserObject](#userobject) ] Массив, представляющий группу пользователей, распознаваемых сервером. Каждый элемент массива является [UserObject](#userobject). Наличие этой опции означает, что включен многопользовательский режим. ### UserObject ```json { "password": "1919810", "method": "aes-256-gcm", "level": 0, "email": "love@xray.com" } ``` > `method`: string - Если `method` в `InboundConfigurationObject` не относится к SS2022, здесь можно указать `"method"` для каждого пользователя (в `"method"` также поддерживаются только не-SS2022 варианты) вместе с `"password"`; при этом `"password"`, заданный в `InboundConfigurationObject`, будет проигнорирован. - Если `method` в `InboundConfigurationObject` относится к SS2022, из соображений безопасности больше не поддерживается установка `"method"` для отдельных пользователей. Используется единый `"method"`, указанный в `InboundConfigurationObject`. > `password`: string Обратите внимание: SS2022, в отличие от старого SS, не игнорирует верхнеуровневый `"password"`. Правильный формат пароля на клиенте: `ServerPassword:UserPassword`. Например: `"password": "114514:1919810"` > Остальные опции Имеют то же значение, что и в `InboundConfigurationObject`.