You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(proxy,telegram): SNI policy evaluation, approval UX improvements, Docker API negotiation
- Add SNI-based policy evaluation as happy path for IP-only SOCKS5
CONNECT requests on TLS ports. Peeks TLS ClientHello after CONNECT
success to recover hostname, re-evaluates policy with it, and
populates DNS reverse cache for future connections. Falls back to
DNS reverse cache for non-TLS or missing SNI.
- Fix timeout message format: CancelApproval now preserves the
original approval message text and appends the reason instead of
replacing the entire message. Timed-out requests now show what
destination was being requested.
- Add "Always Deny" button to Telegram approval prompts. Saves a
persistent deny rule to the store, same as "Always Allow" does
for allow rules.
- Reorganize approval buttons into two rows to prevent truncation
on narrow screens: [Allow | Deny] / [Always Allow | Always Deny].
- Add /start command handler and register bot commands via
setMyCommands API so they appear in Telegram's command menu.
- Replace hardcoded Docker API v1.25 with version negotiation.
Queries /version on the daemon at startup and uses the reported
API version.
- Document DNS approval flow design in CLAUDE.md: DNS intentionally
only blocks denied domains so ask destinations can reach SOCKS5
approval.
@@ -162,6 +162,8 @@ Two-phase detection: port-based guess first, then byte-level for non-standard po
162
162
163
163
`CouldBeAllowed(dest, includeAsk)`: when broker configured, Ask-matching destinations resolve via DNS for approval flow. When no broker, Ask treated as Deny at DNS stage to prevent leaking queries.
164
164
165
+
**DNS approval design**: The DNS interceptor intentionally only blocks explicitly denied domains (returns NXDOMAIN). All other queries (allow, ask, default) are forwarded to the upstream resolver. This is by design. Policy enforcement for "ask" destinations happens at the SOCKS5 CONNECT layer, not at DNS. Blocking DNS for "ask" destinations would prevent the TCP connection from ever reaching the SOCKS5 handler where the approval flow triggers. The DNS layer populates the reverse DNS cache (IP -> hostname) so the SOCKS5 handler can recover hostnames from IP-only CONNECT requests.
166
+
165
167
### Audit logger
166
168
167
169
Optional. JSON lines with blake3 hash chain (`prev_hash` field). Genesis hash: blake3(""). Recovers chain across restarts by reading last line. `sluice audit verify` walks log and reports broken links.
0 commit comments