summaryrefslogtreecommitdiff
path: root/config/networking/services/firewall/default.nix
blob: d7a541f7173e31790fd667d6e15c34b2b367cd77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{ config, lib, ... }:

let
  # { any } -> (string -> any -> string) -> string
  mapAttrsStrings = attrs: f: lib.concatStrings (lib.mapAttrsToList f attrs);
  bracket = title: content:
    ''
      ${title} {
    '' + content + ''
      }
    '';
in {
  boot.kernel.sysctl = { "net.ipv4.conf.all.forwarding" = true; };

  networking = {
    nftables = {
      enable = true;
      checkRuleset = false;
      ruleset = mapAttrsStrings (import ./ruleset.nix {
        inherit lib;
        nets = config.personal.networking.networks;
      }) (family: tables:
        mapAttrsStrings tables (tableName:
          { flowtables, chains, ... }:
          bracket "table ${family} ${tableName}" (
            mapAttrsStrings flowtables
              (flowtableName: flowtable:
                bracket "flowtable ${flowtableName}" (with flowtable;
                  ''
                    hook ${hook} priority ${priority}; devices = { ${
                      lib.concatStringsSep ", " devices
                    } };
                  '' + lib.optionalString offload ''
                    flags offload;
                  ''
                )
              )
            + mapAttrsStrings chains (chainName: chain:
                  bracket "chain ${chainName}" (
                    lib.optionalString (chain ? base) (with chain.base; ''
                      type ${type} hook ${hook} priority ${priority}; policy ${policy};
                    '')
                    + chain.rules
                  )
            )
          )
        )
      );
    };
    firewall.enable = lib.mkForce false;
  };
}