4 boot.kernelPackages = mkDefault pkgs.linuxPackages;
5 #boot.kernelPackages = pkgs.linuxPackages_latest;
6 #boot.kernelPackages = pkgs.linuxPackages_hardened;
7 #boot.kernelPackages = pkgs.linuxPackages_latest_hardened;
8 #environment.memoryAllocator.provider = "libc";
9 nix.settings.allowed-users = [ "@users" ];
10 networking.firewall.pingLimit = "--limit 60/minute --limit-burst 5";
11 security.allowSimultaneousMultithreading = false;
12 security.apparmor.enable = lib.mkDefault true;
13 security.forcePageTableIsolation = true;
14 security.lockKernelModules = lib.mkDefault true;
15 security.protectKernelImage = true;
16 security.virtualisation.flushL1DataCache = "always";
17 # Only allow members of the wheel group to execute sudo by setting
18 # the executable’s permissions accordingly.
19 # This prevents users that are not members of wheel
20 # from exploiting vulnerabilities in sudo such as CVE-2021-3156.
21 security.sudo.execWheelOnly = true;
22 boot.blacklistedKernelModules = [
23 # Obscure network protocols
28 # Old or rare or insufficiently audited filesystems
51 boot.kernel.sysctl = {
52 # Mitigate kernel pointer leaks
53 "kernel.kptr_restrict" = 2;
54 # Restricts the kernel log to the CAP_SYSLOG capability
55 "kernel.dmesg_restrict" = 1;
56 # Prevent information leaks
57 #kernel.printk = "3 3 3 3";
58 # Restrict eBPF to the CAP_BPF capability
59 # and enable JIT hardening techniques
60 # such as constant blinding.
61 "kernel.unprivileged_bpf_disabled" = 1;
62 "net.core.bpf_jit_harden" = 2;
63 # Restricts loading TTY line disciplines
64 # to the CAP_SYS_MODULE capability to prevent
65 # unprivileged attackers from loading vulnerable
66 # line disciplines with the TIOCSETD ioctl
67 "dev.tty.ldisc_autoload" = 0;
68 # The userfaultfd() syscall is often abused to exploit
69 # use-after-free flaws.
70 # Due to this, this sysctl is used to restrict
71 # this syscall to the CAP_SYS_PTRACE capability.
72 "vm.unprivileged_userfaultfd" = 0;
73 # kexec is a system call that is used
74 # to boot another kernel during runtime.
75 "kernel.kexec_load_disabled" = 1;
76 # User namespaces are a feature in the kernel which aim to
77 # improve sandboxing and make it easily accessible for
78 # unprivileged users however, this feature exposes
79 # significant kernel attack surface for privilege
80 # escalation so this sysctl restricts the usage of user
81 # namespaces to the CAP_SYS_ADMIN capability.
82 "kernel.unprivileged_userns_clone" = 0;
83 # Restricts all usage of performance events to the
84 # CAP_PERFMON capability
85 "kernel.perf_event_paranoid" = 3;
86 # Helps protect against SYN flood attacks
87 "net.ipv4.tcp_syncookies" = 1;
88 # Protects against time-wait assassination
89 # by dropping RST packets for sockets
90 # in the time-wait state.
91 "net.ipv4.tcp_rfc1337" = 1;
92 # Disable ICMP redirect acceptance and sending to prevent
93 # man-in-the-middle attacks and minimize information disclosure.
94 "net.ipv4.conf.all.accept_redirects" = 0;
95 "net.ipv4.conf.default.accept_redirects" = 0;
96 "net.ipv4.conf.all.secure_redirects" = 0;
97 "net.ipv4.conf.default.secure_redirects" = 0;
98 "net.ipv6.conf.all.accept_redirects" = 0;
99 "net.ipv6.conf.default.accept_redirects" = 0;
100 "net.ipv4.conf.all.send_redirects" = 0;
101 "net.ipv4.conf.default.send_redirects" = 0;
102 # Disable source routing, a mechanism
103 # that allows users to redirect network traffic.
104 "net.ipv4.conf.all.accept_source_route" = 0;
105 "net.ipv4.conf.default.accept_source_route" = 0;
106 "net.ipv6.conf.all.accept_source_route" = 0;
107 "net.ipv6.conf.default.accept_source_route" = 0;
109 # Disable TCP SACK, which is commonly exploited
110 # and unnecessary for many circumstances.
111 # https://serverfault.com/questions/10955/when-to-turn-tcp-sack-off
112 "net.ipv4.tcp_sack" = 0;
113 "net.ipv4.tcp_dsack" = 0;
114 "net.ipv4.tcp_fack" = 0;
116 # Generate a random IPv6 address
117 "net.ipv6.conf.all.use_tempaddr" = lib.mkForce 2;
118 "net.ipv6.conf.default.use_tempaddr" = lib.mkForce 2;
119 # Restricts usage of ptrace to only processes
120 # with the CAP_SYS_PTRACE capability
121 "kernel.yama.ptrace_scope" = 2;
122 # Do source validation by confirming reverse path
123 "net.ipv4.conf.all.rp_filter" = 1;
124 "net.ipv4.conf.default.rp_filter" = 1;
126 boot.kernelParams = [
131 "page_alloc.shuffle=1"
136 # Disabled because zfs and wireguard modules are not signed
137 "module.sig_enforce=0"
138 "lockdown=confidentiality"
143 services.journald.extraConfig = ''
145 MaxRetentionSec=1month
150 enable = lib.mkDefault false;
158 openFirewall = lib.mkDefault false;
160 PasswordAuthentication = false;