Skip to main content
CLI man page: safesquid-profiles(5)
The Access Profiles section (safesquid-profiles(5)) is the central content-policy hub. Access restrictions decide who connects; Access Profiles decide what they may fetch. It combines Time Profiler, Request Types, Response Types, categories, and User-Groups, then adds profile tags and sets Allow/Deny.
Unlike Access restrictions (first match), every matching row in Default and Secondary Policies applies. Later rows see tags changed by earlier rows.

Profile pipeline

On each request (non-interface), SafeSquid builds label lists in this order before Access Profiles runs:
  1. Time Profilertime_schedules
  2. Request Typesrequest_types
  3. Domain categorization → website_categories
  4. Access Profilesprofiles + action
  5. Response Types on response headers/body → updates response_types; Access Profiles runs again
Access restrictions User-Groups populate user_groups (not profiles). Access Profiles User Groups gate matches those tags.

Core mechanics

List order

  1. Clear the connection’s profile tags; set the action to ALLOW.
  2. Walk Default Policies top-down — every match applies.
  3. Walk Secondary Policies top-down — same cumulative rules.
  4. Final action not Allow → block (bypass cookie may apply).
Access Profiles row gate flow

Access Profiles — gate order per row

Action values

  • Allow — Default. Downstream sections use applied profile tags.
  • Deny — Block. With Access Allow bypassing, temporary bypass cookie may be offered.
  • Do not bypass — Hard block; no bypass cookie.
  • Inherit — Keep action from earlier matching rows; use when row only adds/removes tags.

Rule fields

All configured criteria on a row must match. Blank = any. Use ! to negate tags in list fields.
  • Applicable Profiles — Tags on connection from earlier rows in this pass (list is cleared at start).
  • Time Schedule — Tags from Time Profiler.
  • Request Types — Tags from Request Types.
  • Response Types — Tags from Response Types; requires response header when field set.
  • User Groups — From Access restrictions. Non-blank + empty user_groups → row skipped.
  • Categories — Domain categories; empty lookup tests as UNCATEGORIZED.

Examples

LAN users + category deny

Config: Default: User Groups LAN_USERS, add users, Inherit. Secondary: Categories Social, profiles users, Deny.Result: LAN traffic tagged; Social category blocked with row comment as reason.

Time-gated exception

Config: Time Profiler adds LUNCH_TIME; Secondary matches Time Schedule LUNCH_TIME, Allow streaming.Result: exception only during lunch window local time.

Response-side deny

Config: Response Types adds executable_download; Secondary matches that tag, Deny.Result: may not match until response headers arrive and profile matching runs again.

How to verify

  1. Reports → Detailed logs — profiles, request/response/time profile columns.
  2. Enable Trace Entry on one row; check native logs.
  3. Debug headers — X-SafeSquid-Profiles, X-SafeSquid-Access-Policy.