# NaiveProxy: bezpečná alternativa k VLESS na bázi Chromium
V podmínkách aktivních blokací protokol NaiveProxy nabízí unikátní přístup k maskování provozu – prostřednictvím použití originálního síťového stacku Chromium. Podíváme se, jak nastavit klient a server s sing-box a Caddy, a vyhnout se všem úskalím.
Základy maskování: proč je NaiveProxy lepší než uTLS?
Standardní proxy-protokoly se maskují jako HTTPS provoz, ale první paket ClientHello zůstává zranitelný. V něm je přenášená verze TLS, seznam šifr, a doména v otevřeném textu. Implementace v Go (včetně Xray a sing-box) mají charakteristický pro tento jazyk vzor ClientHello, což umožňuje jejich identifikaci i při použití uTLS. Knihovna uTLS imituje chování prohlížeče jen na úrovni prvního paketu, ale nevytváří nuance síťového stacku: rytmus přenosu dat, délky frameů, specifika HTTP/2. NaiveProxy tento problém řeší radikálně – integrací fragmentu Chromium, který zajišťuje plnou shodu s prohlížečovým provozem.
Architektura NaiveProxy: od Chromium k proxy
Autor protokolu klzgrad upravil zdrojový kód Chromium a ponechal jen 0,3 % funkcionality nezbytné pro síťovou komunikaci. Klíčové vlastnosti:
- Použití originálního HTTP/2 stacku Chromium pro multiplexování
- Plná identita ClientHello a následujících paketů s prohlížečovým provozem
- Odmítnutí vlastních šifr ve prospěch standardních TLS mechanismů
Důležité: kompatibilita s běžnými HTTP/2 proxy funguje oběma směry. Naive-klienti fungují s jakýmkoli HTTP/2 proxy a Naive-servry přijímají spojení od standardních klientů. Plná maskování se ale dosáhne jen při použití síťového stacku Chromium – jako v implementaci sing-box. Jiní klienti (např. na bázi Go) mohou být kompatibilní s Naive-serverem, ale nezaručují plnou anonymitu.
Padding: tři úrovně ochrany proti analýze provozu
Protokol zavádí víceúrovňový padding pro ztížení analýzy podle délky paketů:
- DATA-framy: V prvních 8 framech každého streamu se přidává hlavička (2 bajty délky dat + 1 bajt délky paddingu), za níž následují originální data a padding-bajty.
- CONNECT-žádosti: Náhodné hlavičky libovolné délky zvětšují velikost frameů.
- END_STREAM: Dodatečné framy před každým RST_STREAM.
Při testování byl odhalen kritický nedostatek v implementaci sing-box: místo vynulování bufferu při přidávání paddingu se posílaly rezidua z předchozích požadavků. To vedlo k úniku důvěrných informací (např. doménových jmen a hlaviček). Problém byl opraven ve verzích 1.13.1+ po přijetí dvou PR, kde bylo přidáno vynucené nulování bufferů.
Nastavení klienta: sing-box outbound
Vyžaduje sing-box 1.13+. Konfigurace klienta:
{
"type": "naive",
"tag": "Proxy1",
"server": "1.2.3.4",
"server_port": 443,
"username": "username",
"password": "password",
"insecure_concurrency": 1,
"udp_over_tcp": {
"enabled": true
},
"quic": false,
"tls": {
"enabled": true,
"server_name": "s1.example.com"
}
}
Klíčové parametry:
insecure_concurrency: Doporučeno nastavení 1. Zvýšení počtu spojení usnadňuje analýzu provozu.udp_over_tcp: Nutné zapnout pro podporu UDP provozu.server_name: Doména nastavená v Caddy. Musí se shodovat se server_name v TLS sekci.
Caddy jako TLS-terminátor: konfigurace a fallback
Caddy zpracovává TLS-spojení a odděluje provoz na proxy a návnadu. Konfigurace (/etc/caddy/Caddyfile):
{
email [email protected]
auto_https disable_redirects
}
:443, https://s1.example.com {
tls {
issuer acme {
disable_http_challenge
}
}
route {
@naive {
method CONNECT
header Proxy-Authorization "Basic dXNlcm5hbWU6cGFzc3dvcmQ="
}
handle @naive {
reverse_proxy h2c://127.0.0.1:1080 {
header_up Proxy-Authorization {header.Proxy-Authorization}
}
}
handle {
root * /srv/naive-fallback
file_server
}
}
}
Specifika:
- Hlavička
Proxy-Authorizationobsahuje base64 kódováníusername:password(generuje se přesecho -n "username:password" | base64). - Adresář
/srv/naive-fallbackobsahuje statický web jako návnadu proti skenování. - Parametr
auto_https disable_redirectsvypíná přesměrování HTTP→HTTPS, protože port 443 zpracovává jen HTTPS.
Serverní část: sing-box inbound a integrace s Caddy
Serverní konfigurace sing-box (/etc/sing-box/config.json):
{
"log": {
"level": "warn",
"output": "/var/log/sing-box/sing-box.log"
},
"inbounds": [
{
"type": "naive",
"tag": "naive-in",
"network": "tcp",
"listen": "127.0.0.1",
"listen_port": 1080,
"users": [
{
"username": "username",
"password": "password"
}
]
}
],
"outbounds": [
{
"type": "direct"
}
]
}
Důležité:
- Server poslouchá jen localhost:1080, protože externí připojení zpracovává Caddy.
- Úroveň logování
warnminimalizuje zátěž na disk. - Hesla se musí přesně shodovat s nastavením Caddy a klienta.
Co je důležité
- Plná maskování vyžaduje Chromium-stack: Pouze implementace na bázi originálního síťového kódu (jako v sing-box) zajišťují plnou shodu s prohlížečovým provozem.
- Konkurentnost = riziko: Parametr
insecure_concurrencyvyšší než 1 zvyšuje zranitelnost vůči analýze provozu podle délky paketů. - Aktualizujte komponenty: Používejte sing-box 1.13.1+ pro odstranění úniku dat přes padding.
- Návnad je povinná: Statický web v Caddy brání odhalení proxy při skenování.
- Reality není lék na vše: Jak ukázala historie s Reality, i promyšlená řešení mohou být blokována podle nových znaků (např. podle počtu spojení).
— Editorial Team
Zatím žádné komentáře.