egress: reject needs the intercept
This commit is contained in:
parent
dad15ca855
commit
70a8e54038
2 changed files with 40 additions and 2 deletions
|
|
@ -473,6 +473,17 @@ in
|
||||||
the low 17 bits of the agent's address.
|
the low 17 bits of the agent's address.
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
assertion = cfg.egress.forward != "reject" || cfg.egress.intercept.enable;
|
||||||
|
message = ''
|
||||||
|
services.hyperhive.network.egress.forward = "reject" needs
|
||||||
|
services.hyperhive.network.egress.intercept.enable = true:
|
||||||
|
without the intercept nothing redirects the agents' web traffic into
|
||||||
|
squid, and the reject would refuse all of it.
|
||||||
|
Enable the intercept (hive-squid.nix does on a hive controller host),
|
||||||
|
or keep forward = "log".
|
||||||
|
'';
|
||||||
|
}
|
||||||
{
|
{
|
||||||
assertion = !(lib.any (k: isOn (config.boot.kernel.sysctl.${k} or 0)) routeLocalnetKeys);
|
assertion = !(lib.any (k: isOn (config.boot.kernel.sysctl.${k} or 0)) routeLocalnetKeys);
|
||||||
message = ''
|
message = ''
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,10 @@ let
|
||||||
network.egress.forward = "accept";
|
network.egress.forward = "accept";
|
||||||
network.egress.antiSpoof = "log";
|
network.egress.antiSpoof = "log";
|
||||||
};
|
};
|
||||||
egressForwardReject = hive {
|
egressForwardReject = hiveWithController {
|
||||||
|
network.egress.forward = "reject";
|
||||||
|
};
|
||||||
|
egressRejectNoIntercept = hive {
|
||||||
network.enable = true;
|
network.enable = true;
|
||||||
network.egress.forward = "reject";
|
network.egress.forward = "reject";
|
||||||
};
|
};
|
||||||
|
|
@ -1699,7 +1702,9 @@ let
|
||||||
logged = lib.filter (lib.hasInfix "log prefix") rules;
|
logged = lib.filter (lib.hasInfix "log prefix") rules;
|
||||||
bareText = bare.services.hyperhive.network.egress.ruleset;
|
bareText = bare.services.hyperhive.network.egress.ruleset;
|
||||||
in
|
in
|
||||||
!(lib.any (a: !a.assertion) egressForwardReject.assertions)
|
!(lib.any (
|
||||||
|
a: !a.assertion && lib.hasInfix "network.egress" a.message
|
||||||
|
) egressForwardReject.assertions)
|
||||||
&& lib.hasInfix "type filter hook forward priority filter - 10; policy accept;" chain
|
&& lib.hasInfix "type filter hook forward priority filter - 10; policy accept;" chain
|
||||||
&& lib.hasInfix "chain input" text
|
&& lib.hasInfix "chain input" text
|
||||||
&& idx ''oifname "wg-hive" accept'' < idx "ether saddr @direct_mac accept"
|
&& idx ''oifname "wg-hive" accept'' < idx "ether saddr @direct_mac accept"
|
||||||
|
|
@ -1722,6 +1727,28 @@ let
|
||||||
&& !(lib.hasInfix "reject with" bareText)
|
&& !(lib.hasInfix "reject with" bareText)
|
||||||
&& lib.hasInfix "would-drop" bareText;
|
&& lib.hasInfix "would-drop" bareText;
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
# `reject` without the intercept is refused by an assertion that names
|
||||||
|
# the option and both ways out; the controller host with `reject` (the
|
||||||
|
# intercept on) and `bare` (`log`) are the controls that the lookup
|
||||||
|
# finds nothing for them.
|
||||||
|
name = "egress.forward reject without the intercept is refused";
|
||||||
|
ok =
|
||||||
|
let
|
||||||
|
refused =
|
||||||
|
m:
|
||||||
|
lib.filter (
|
||||||
|
a:
|
||||||
|
!a.assertion
|
||||||
|
&& lib.hasInfix "services.hyperhive.network.egress.forward = \"reject\" needs" a.message
|
||||||
|
) m.assertions;
|
||||||
|
in
|
||||||
|
lib.length (refused egressRejectNoIntercept) == 1
|
||||||
|
&& lib.hasInfix "intercept.enable = true" (lib.head (refused egressRejectNoIntercept)).message
|
||||||
|
&& lib.hasInfix "keep forward = \"log\"" (lib.head (refused egressRejectNoIntercept)).message
|
||||||
|
&& refused egressForwardReject == [ ]
|
||||||
|
&& refused bare == [ ];
|
||||||
|
}
|
||||||
{
|
{
|
||||||
# The redirect of the agents' web traffic: IPv4 TCP 80 and 443 from the
|
# The redirect of the agents' web traffic: IPv4 TCP 80 and 443 from the
|
||||||
# bridge go to squid's two intercept ports, after the rules that leave
|
# bridge go to squid's two intercept ports, after the rules that leave
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue