deny private and reserved destinations for every squid user
This commit is contained in:
parent
501445ebc3
commit
3d9561a9a6
1 changed files with 167 additions and 37 deletions
|
|
@ -491,7 +491,7 @@ let
|
|||
# reaches loopback, link-local and the bridge through the proxy. The two
|
||||
# IP-literal denies stay ahead of every allow: `dstdomain` on an IP
|
||||
# literal does a reverse lookup.
|
||||
name = "squid refuses loopback, link-local and bridge destinations and IP literals, then a missing credential, before any allow";
|
||||
name = "squid refuses loopback, link-local, bridge and private destinations and IP literals, then a missing credential, before any allow";
|
||||
ok =
|
||||
let
|
||||
lines = lib.splitString "\n" hiveOtel.services.squid.configText;
|
||||
|
|
@ -507,22 +507,51 @@ let
|
|||
&& at "http_access deny to_localhost" != null
|
||||
&& at "http_access deny to_linklocal" != null
|
||||
&& at "http_access deny to_bridge" != null
|
||||
&& at "http_access deny to_private" != null
|
||||
&& at "http_access deny ip_v4_host" != null
|
||||
&& at "http_access deny ip_v6_host" != null
|
||||
&& lib.all (l: at l < firstAllow) [
|
||||
"http_access deny to_localhost"
|
||||
"http_access deny to_linklocal"
|
||||
"http_access deny to_bridge"
|
||||
"http_access deny to_private"
|
||||
"http_access deny ip_v4_host"
|
||||
"http_access deny ip_v6_host"
|
||||
]
|
||||
&& at "http_access deny to_localhost" < authed
|
||||
&& at "http_access deny to_linklocal" < authed
|
||||
&& at "http_access deny to_bridge" < authed
|
||||
&& at "http_access deny to_private" < authed
|
||||
&& authed < firstAllow
|
||||
&& builtins.elem "cache deny all" lines
|
||||
&& lib.last (lib.filter (l: l != "") lines) == "http_access deny all";
|
||||
}
|
||||
{
|
||||
# The ranges are what keeps an unrestricted user on the public internet.
|
||||
# Control: the bridge deny and the ACL line are found, so a range missing
|
||||
# below is not a lookup of nothing.
|
||||
name = "squid's private-destination ACL names every private, shared, multicast and reserved range";
|
||||
ok =
|
||||
let
|
||||
lines = lib.splitString "\n" hiveOtel.services.squid.configText;
|
||||
acl = lib.findFirst (l: lib.hasPrefix "acl to_private dst " l) null lines;
|
||||
ranges = lib.splitString " " (lib.removePrefix "acl to_private dst " acl);
|
||||
in
|
||||
acl != null
|
||||
&& builtins.elem "acl to_bridge dst ${hiveOtel.services.hyperhive.network.networkCidr}" lines
|
||||
&&
|
||||
lib.sort lib.lessThan ranges == lib.sort lib.lessThan [
|
||||
"10.0.0.0/8"
|
||||
"172.16.0.0/12"
|
||||
"192.168.0.0/16"
|
||||
"100.64.0.0/10"
|
||||
"0.0.0.0/8"
|
||||
"224.0.0.0/4"
|
||||
"240.0.0.0/4"
|
||||
"fc00::/7"
|
||||
"ff00::/8"
|
||||
];
|
||||
}
|
||||
{
|
||||
# An unrestricted user is let through before the unlisted-name deny and
|
||||
# everyone else is held to the listed names after it. Control: both are
|
||||
|
|
|
|||
Loading…
Reference in a new issue