
Инструмент для обхода цензуры, предназначенный для избежания обнаружения авторитарными государственными противниками.
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"]
}
CDNOriginHost — это доменное имя исходного сервера (т.е. сервера, на котором работает Cloak) в режиме CDN. Этот параметр действует только когда Transport установлен в CDN. Если не задан, по умолчанию будет использоваться удаленное имя хоста, переданное через аргумент командной строки (в автономном режиме) или через Shadowsocks (в режиме плагина). После установления TLS-сессии с CDN-сервером это доменное имя будет использоваться в заголовке Host HTTP-запроса, чтобы попросить CDN-сервер установить WebSocket-соединение с этим хостом.
CDNWsUrlPath — это путь URL, используемый для построения запроса WebSocket, отправляемого в режиме CDN. Также действует только когда Transport установлен в CDN. Если не задан, по умолчанию "/". Эта опция используется для построения первой строки HTTP-запроса после установления TLS-сессии. В основном предназначена для сервера Cloak, работающего за обратным прокси, когда пересылаются только запросы на определенный путь.
NumConn — это количество базовых TCP-соединений, которое вы хотите использовать. Значение по умолчанию 4 подходит для большинства пользователей. Слишком высокое значение ухудшит производительность. Установка 0 отключит мультиплексирование соединений: каждое TCP-соединение будет порождать отдельную короткоживущую сессию, которая закроется после её завершения. Это делает поведение похожим на GoQuiet. Может быть полезно для пользователей с нестабильным соединением.
BrowserSig — это браузер, который вы хотите выдавать за используемый. Не относится к реально используемому браузеру. В настоящее время поддерживаются chrome, firefox и safari.
KeepAlive — это количество секунд, после которых ОС будет отправлять TCP KeepAlive-пробы серверу Cloak после отсутствия активности. Нулевое или отрицательное значение отключает. По умолчанию 0 (отключено). Предупреждение: включение может сделать ваш сервер более обнаруживаемым как прокси, но позволит клиенту Cloak быстрее обнаруживать прерывание интернет-соединения.
StreamTimeout — это количество секунд, в течение которых Cloak ожидает данные от прокси-программы на входящем соединении, после чего соединение будет закрыто Cloak. После установки TCP-соединения Cloak не будет принудительно применять тайм-аут.
ck-server -key. Открытый ключ следует передать пользователям, закрытый ключ должен храниться в секрете.ck-server -uid. Новый UID будет использоваться как AdminUID.PrivateKey на полученный закрытый ключ; измените AdminUID на полученный UID.ProxyBook в конфигурационном файле соответствующим образом.sudo ck-server -c <путь к ckserver.json>. ck-server требует права root, так как привязывается к порту с низким номером (443). Альтернативно вы можете следовать https://superuser.com/a/892391, чтобы не давать ck-server права root без необходимости.Запустите ck-server -uid и добавьте UID в поле BypassUID в ckserver.json.
AdminUID в ckserver.json, а также указали путь к userinfo.db в DatabasePath (Cloak создаст этот файл, если его ещё нет).ck-client -s <IP сервера> -l <локальный порт> -a <AdminUID> -c <путь к ckclient.json>, чтобы войти в режим администратора.index.html в браузере. Веб-сервер не требуется.)127.0.0.1:<порт, который вы указали в шаге 1> в качестве API Base и нажмите List.+.Примечание: база данных пользователей сохраняется на диске. Вам не нужно добавлять пользователей заново при каждом запуске ck-server.
Android-клиент доступен здесь: https://github.com/cbeuw/Cloak-android
example_config/ckclient.json в выбранное вами место. Введите полученные UID и PublicKey. Установите ProxyMethod так, чтобы он в точности соответствовал соответствующей записи в ProxyBook на стороне сервера.ck-client -c <путь к ckclient.json> -s <ip вашего сервера>Если вы находите этот проект полезным, вы можете посетить мой магазин мерча; также вы можете сделать пожертвование напрямую мне
BTC: bc1q59yvpnh0356qq9vf0j2y7hx36t9ysap30spx9h
ETH: 0x8effF29a8F9bD38A367580527AC303972c92b60c