squid intercepts restricted and log agents' web traffic, named from the bound source address
This commit is contained in:
parent
03b9c39498
commit
712dcf2b25
1 changed files with 1005 additions and 154 deletions
|
|
@ -513,17 +513,24 @@ let
|
|||
}
|
||||
{
|
||||
# Control for the absence checks: the bridge listener is there, so the
|
||||
# absences below are not a misspelled lookup.
|
||||
name = "squid listens on the bridge IP only, without a second listener or ssl_bump";
|
||||
# absences below are not a misspelled lookup. The two intercept ports are
|
||||
# on the bridge IP too, and the only TLS directives are the ones that
|
||||
# peek and splice.
|
||||
name = "squid listens on the bridge IP only, with one proxy port, two intercept ports and no decryption";
|
||||
ok =
|
||||
let
|
||||
conf = hiveOtel.services.squid.configText;
|
||||
lines = lib.splitString "\n" conf;
|
||||
ip = hiveOtel.services.hyperhive.network.bridgeIp;
|
||||
listeners = lib.filter (l: lib.hasPrefix "http_port " l || lib.hasPrefix "https_port " l) lines;
|
||||
in
|
||||
builtins.elem "http_port ${hiveOtel.services.hyperhive.network.bridgeIp}:3128" lines
|
||||
&& lib.length (lib.filter (l: lib.hasPrefix "http_port " l) lines) == 1
|
||||
&& !(lib.hasInfix "ssl_bump" conf)
|
||||
&& !(lib.hasInfix "ssl-bump" conf)
|
||||
builtins.elem "http_port ${ip}:3128" lines
|
||||
&& lib.length listeners == 3
|
||||
&& lib.all (l: lib.hasPrefix "${lib.head (lib.splitString " " l)} ${ip}:" l) listeners
|
||||
&& lib.length (lib.filter (lib.hasInfix " intercept ") listeners) == 2
|
||||
&& lib.elem "ssl_bump peek first_hop" lines
|
||||
&& lib.elem "ssl_bump splice all" lines
|
||||
&& lib.length (lib.filter (lib.hasPrefix "ssl_bump ") lines) == 2
|
||||
&& !(lib.hasInfix "localnet" conf);
|
||||
}
|
||||
{
|
||||
|
|
@ -540,8 +547,8 @@ let
|
|||
at = l: lib.lists.findFirstIndex (x: x == l) null lines;
|
||||
allow = at "http_access allow allowed_dst";
|
||||
base = at "http_access allow base_dst";
|
||||
unrestricted = at "http_access allow unrestricted";
|
||||
authed = at "http_access deny !authed";
|
||||
unrestricted = at "http_access allow !icpt unrestricted";
|
||||
authed = at "http_access deny !icpt !authed";
|
||||
# The generated per-agent `http_access allow` rules sit in this file.
|
||||
agentRules = at "include ${hiveOtel.services.hyperhive.deploy.hive-controller.squid.agentAllowFile}";
|
||||
firstAllow = lib.min agentRules (lib.min base (lib.min unrestricted allow));
|
||||
|
|
@ -631,11 +638,11 @@ let
|
|||
at = l: lib.lists.findFirstIndex (x: x == l) null lines;
|
||||
list = hiveOtel.services.hyperhive.deploy.hive-controller.squid.unrestrictedFile;
|
||||
in
|
||||
at "http_access allow unrestricted" != null
|
||||
at "http_access allow !icpt unrestricted" != null
|
||||
&& at "http_access deny !allowed_dst" != null
|
||||
&& at "http_access deny !authed" < at "http_access allow base_dst"
|
||||
&& at "http_access allow base_dst" < at "http_access allow unrestricted"
|
||||
&& at "http_access allow unrestricted" < at "http_access deny !allowed_dst"
|
||||
&& at "http_access deny !icpt !authed" < at "http_access allow base_dst"
|
||||
&& at "http_access allow base_dst" < at "http_access allow !icpt unrestricted"
|
||||
&& at "http_access allow !icpt unrestricted" < at "http_access deny !allowed_dst"
|
||||
&& at "http_access deny !allowed_dst" < at "http_access allow allowed_dst"
|
||||
&& builtins.elem ''acl unrestricted proxy_auth "${list}"'' lines
|
||||
&& list == "/var/lib/hive-squid/unrestricted";
|
||||
|
|
@ -655,7 +662,7 @@ let
|
|||
allows = map at [
|
||||
"http_access allow base_dst"
|
||||
"include ${sq.agentAllowFile}"
|
||||
"http_access allow unrestricted"
|
||||
"http_access allow !icpt unrestricted"
|
||||
"http_access allow allowed_dst"
|
||||
];
|
||||
in
|
||||
|
|
@ -665,7 +672,7 @@ let
|
|||
&& lib.all (a: deny < a) allows
|
||||
&& at "http_access deny to_private" < deny
|
||||
&& at "http_access deny ip_v4_host" < deny
|
||||
&& deny < at "http_access deny !authed"
|
||||
&& deny < at "http_access deny !icpt !authed"
|
||||
# Two includes: this one and the per-agent allow rules.
|
||||
&& lib.length (lib.filter (l: lib.hasPrefix "include " l) lines) == 2;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue