diff --git a/nixos/modules/services/web-apps/echoip.nix b/nixos/modules/services/web-apps/echoip.nix index 4bfba2ae138a..369ff35f4978 100644 --- a/nixos/modules/services/web-apps/echoip.nix +++ b/nixos/modules/services/web-apps/echoip.nix @@ -75,9 +75,12 @@ in ); # Hardening + AmbientCapabilities = ""; CapabilityBoundingSet = [ "" ]; - DeviceAllow = [ "" ]; + DevicePolicy = "closed"; LockPersonality = true; + MemoryDenyWriteExecute = true; + NoNewPrivileges = true; PrivateDevices = true; PrivateTmp = true; PrivateUsers = true; @@ -91,15 +94,19 @@ in ProtectKernelTunables = true; ProtectProc = "invisible"; ProtectSystem = "strict"; - RestrictAddressFamilies = [ - "AF_INET" - "AF_INET6" - "AF_UNIX" - ]; + RemoveIPC = true; + RestrictAddressFamilies = [ "AF_INET AF_INET6 AF_UNIX" ]; RestrictNamespaces = true; RestrictRealtime = true; RestrictSUIDSGID = true; SystemCallArchitectures = "native"; + SystemCallFilter = [ + "@system-service" + "~@privileged" + "~@resources" + "setrlimit" + ]; + UMask = "0077"; }; }; diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index d3f60ec9104f..43103c6b91c1 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -353,7 +353,7 @@ in { early-mount-options = handleTest ./early-mount-options.nix {}; ec2-config = (handleTestOn ["x86_64-linux"] ./ec2.nix {}).boot-ec2-config or {}; ec2-nixops = (handleTestOn ["x86_64-linux"] ./ec2.nix {}).boot-ec2-nixops or {}; - echoip = handleTest ./echoip.nix {}; + echoip = runTest ./echoip.nix; ecryptfs = handleTest ./ecryptfs.nix {}; fscrypt = handleTest ./fscrypt.nix {}; fastnetmon-advanced = runTest ./fastnetmon-advanced.nix; diff --git a/nixos/tests/echoip.nix b/nixos/tests/echoip.nix index 036018b26438..0e7747d713c1 100644 --- a/nixos/tests/echoip.nix +++ b/nixos/tests/echoip.nix @@ -1,29 +1,28 @@ -import ./make-test-python.nix ( - { lib, ... }: - { - name = "echoip"; - meta.maintainers = with lib.maintainers; [ defelo ]; +{ lib, ... }: - nodes.machine = { - services.echoip = { - enable = true; - virtualHost = "echoip.local"; - }; +{ + name = "echoip"; + meta.maintainers = with lib.maintainers; [ defelo ]; - networking.hosts = { - "127.0.0.1" = [ "echoip.local" ]; - "::1" = [ "echoip.local" ]; - }; + nodes.machine = { + services.echoip = { + enable = true; + virtualHost = "echoip.local"; }; - testScript = '' - machine.wait_for_unit("echoip.service") - machine.wait_for_open_port(8080) + networking.hosts = { + "127.0.0.1" = [ "echoip.local" ]; + "::1" = [ "echoip.local" ]; + }; + }; - resp = machine.succeed("curl -4 http://echoip.local/ip") - assert resp.strip() == "127.0.0.1" - resp = machine.succeed("curl -6 http://echoip.local/ip") - assert resp.strip() == "::1" - ''; - } -) + testScript = '' + machine.wait_for_unit("echoip.service") + machine.wait_for_open_port(8080) + + resp = machine.succeed("curl -4 http://echoip.local/ip") + assert resp.strip() == "127.0.0.1" + resp = machine.succeed("curl -6 http://echoip.local/ip") + assert resp.strip() == "::1" + ''; +}