nixos/iodine: hardening

Changed files
+38
nixos
modules
services
networking
+38
nixos/modules/services/networking/iodine.nix
···
iodinedUser = "iodined";
+
/* is this path made unreadable by ProtectHome = true ? */
+
isProtected = x: hasPrefix "/root" x || hasPrefix "/home" x;
in
{
imports = [
···
serviceConfig = {
RestartSec = "30s";
Restart = "always";
+
+
# hardening :
+
# Filesystem access
+
ProtectSystem = "strict";
+
ProtectHome = if isProtected cfg.passwordFile then "read-only" else "true" ;
+
PrivateTmp = true;
+
ReadWritePaths = "/dev/net/tun";
+
PrivateDevices = false;
+
ProtectKernelTunables = true;
+
ProtectKernelModules = true;
+
ProtectControlGroups = true;
+
# Caps
+
NoNewPrivileges = true;
+
# Misc.
+
LockPersonality = true;
+
RestrictRealtime = true;
+
PrivateMounts = true;
+
MemoryDenyWriteExecute = true;
};
};
in
···
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
script = "exec ${pkgs.iodine}/bin/iodined -f -u ${iodinedUser} ${cfg.server.extraConfig} ${optionalString (cfg.server.passwordFile != "") "< \"${cfg.server.passwordFile}\""} ${cfg.server.ip} ${cfg.server.domain}";
+
serviceConfig = {
+
# Filesystem access
+
ProtectSystem = "strict";
+
ProtectHome = if isProtected cfg.server.passwordFile then "read-only" else "true" ;
+
PrivateTmp = true;
+
ReadWritePaths = "/dev/net/tun";
+
PrivateDevices = false;
+
ProtectKernelTunables = true;
+
ProtectKernelModules = true;
+
ProtectControlGroups = true;
+
# Caps
+
NoNewPrivileges = true;
+
# Misc.
+
LockPersonality = true;
+
RestrictRealtime = true;
+
PrivateMounts = true;
+
MemoryDenyWriteExecute = true;
+
};
};
};