Zpět na domů

Nastavení NaiveProxy v sing-box: bezpečná alternativa k VLESS

Článek popisuje nastavení NaiveProxy s použitím sing-box a Caddy. Podrobně rozebrány mechanismy maskování přes Chromium stack, odstranění zranitelnosti v paddingu a konfigurace TLS-terminace. Představeny praktické doporučení pro middle/senior vývojáře.

NaiveProxy: úplný návod na nastavení s Chromium stackem
Advertisement 728x90

# 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:

Google AdInline article slot
  • 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ů.

Google AdInline article slot

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):

Google AdInline article slot
{
    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-Authorization obsahuje base64 kódování username:password (generuje se přes echo -n "username:password" | base64).
  • Adresář /srv/naive-fallback obsahuje statický web jako návnadu proti skenování.
  • Parametr auto_https disable_redirects vypí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í warn minimalizuje 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_concurrency vyšší 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

Advertisement 728x90

Číst dál