
Инструмент для обхода цензуры, предназначенный для избежания обнаружения авторитарными государственными противниками.
Cloak — это подключаемый транспорт, который расширяет возможности традиционных прокси-инструментов, таких как OpenVPN, для обхода сложной цензуры и дискриминации данных.
Cloak не является самостоятельной прокси-программой. Вместо этого он работает, маскируя прокси-трафик под обычную активность веб-серфинга. В отличие от традиционных инструментов, которые имеют очень заметные отпечатки трафика и могут быть заблокированы простыми правилами фильтрации, точно нацелиться на Cloak с малым количеством ложных срабатываний чрезвычайно сложно. Это увеличивает побочный ущерб от действий цензуры, поскольку попытки заблокировать Cloak могут также нанести ущерб сервисам, на которые полагается государство-цензор.
Для любого стороннего наблюдателя хост, на котором работает сервер Cloak, неотличим от обычного веб-сервера. Это касается как пассивного наблюдения за потоком трафика к серверу и от него, так и активного зондирования поведения сервера Cloak. Это достигается за счет использования серии методов криптографической стеганографии.
Cloak можно использовать совместно с любой прокси-программой, которая туннелирует трафик через TCP или UDP, такой как Shadowsocks, OpenVPN и Tor. На одном сервере может работать несколько прокси-серверов, а сервер Cloak будет действовать как обратный прокси, соединяя клиентов с нужным прокси-сервером.
Cloak мультиплексирует трафик через несколько базовых TCP-соединений, что уменьшает блокировку HOL и устраняет накладные расходы на рукопожатие TCP. Это также делает паттерн трафика более похожим на реальные веб-сайты.
Cloak предоставляет поддержку нескольких пользователей, позволяя нескольким клиентам подключаться к прокси-серверу на одном порту (по умолчанию 443). Он также предоставляет функции управления трафиком, такие как кредит использования и контроль пропускной способности. Это позволяет прокси-серверу обслуживать нескольких пользователей, даже если базовое прокси-программное обеспечение не было разработано для нескольких пользователей.
Cloak также поддерживает туннелирование через промежуточный CDN-сервер, такой как Amazon Cloudfront. Подобные сервисы настолько широко используются, что попытки нарушить трафик к ним могут привести к очень высокому побочному ущербу для цензора.
Для быстрого развертывания Cloak с Shadowsocks на сервере можно запустить этот скрипт, написанный @HirbodBehnam
git clone https://github.com/cbeuw/Cloak
cd Cloak
go get ./...
make
Собранные бинарные файлы будут в папке build.
Примеры конфигурационных файлов можно найти в папке example_config.
RedirAddr — это адрес перенаправления, когда входящий трафик не от клиента Cloak. В идеале он должен быть установлен на крупный сайт, разрешенный цензором (например, www.bing.com).
BindAddr — это список адресов, которые Cloak будет привязывать и прослушивать (например, [":443",":80"] для прослушивания портов 443 и 80 на всех интерфейсах).
ProxyBook — это объект, ключом которого является имя ProxyMethod, используемое на стороне клиента (чувствительно к регистру). Его значение представляет собой массив, первый элемент которого — протокол, а второй элемент — строка IP:PORT вышестоящего прокси-сервера, которому Cloak будет перенаправлять трафик.
Пример:
{
"ProxyBook": {
"shadowsocks": [
"tcp",
"localhost:51443"
],
"openvpn": [
"tcp",
"localhost:12345"
]
}
}
PrivateKey — это статический закрытый ключ curve25519 Diffie-Hellman, закодированный в base64.
BypassUID — это список UID, которые авторизованы без каких-либо ограничений по пропускной способности или кредиту.
AdminUID — это UID администратора в base64. Вы можете оставить это поле пустым, если вы добавляете пользователей только в BypassUID.
DatabasePath — это путь к userinfo.db, который используется для хранения информации об использовании и ограничениях пользователей. Cloak создаст файл автоматически, если он не существует. Вы можете оставить это поле пустым, если вы добавляете пользователей только в BypassUID. Это поле также не действует, если AdminUID не является действительным UID или пуст.
KeepAlive — это количество секунд, после которых ОС будет отправлять TCP KeepAlive-пробы вышестоящему прокси-серверу после отсутствия активности. Нулевое или отрицательное значение отключает эту функцию. По умолчанию 0 (отключено).
UID — ваш UID в base64.
Transport может быть direct или CDN. Если хост сервера хочет, чтобы вы подключались к нему напрямую, используйте direct. Если вместо этого используется CDN, используйте CDN.
PublicKey — это открытый ключ curve25519 в base64, предоставленный администратором сервера.
ProxyMethod — это имя используемого вами прокси-метода. Оно должно точно соответствовать одной из записей в ProxyBook сервера.
EncryptionMethod — это имя алгоритма шифрования, который вы хотите использовать в Cloak. Варианты: plain, aes-256-gcm (синоним aes-gcm), aes-128-gcm и chacha20-poly1305. Примечание: Cloak не предназначен для обеспечения безопасности транспорта. Смысл шифрования — скрыть отпечатки прокси-протоколов и сделать полезную нагрузку статистически случайной. Вы можете оставить значение plain только в том случае, если уверены, что ваш основной прокси-инструмент уже обеспечивает И шифрование, И аутентификацию (с помощью AEAD или аналогичных методов).
ServerName — это домен, который вы хотите, чтобы ваш провайдер или брандмауэр думали, что вы посещаете. В идеале он должен соответствовать RedirAddr в конфигурации сервера — крупному сайту, разрешенному цензором, но это не обязательно. Используйте random, чтобы рандомизировать имя сервера для каждого нового соединения.
AlternativeNames — это массив, используемый вместе с ServerName для переключения между разными ServerNames для каждого нового соединения. Это может конфликтовать с режимом транспорта CDN, если провайдер CDN запрещает подмену домена (domain fronting) и отклоняет альтернативные домены.
Пример:
{
"ServerName": "bing.com",
"AlternativeNames": ["cloudflare.com", "github.com"]
}