python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / networking / envoy.nix
blob20cfebb7991449b42a4a780aff39936270aae4f3
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   cfg = config.services.envoy;
7   format = pkgs.formats.json { };
8   conf = format.generate "envoy.json" cfg.settings;
9   validateConfig = file:
10     pkgs.runCommand "validate-envoy-conf" { } ''
11       ${pkgs.envoy}/bin/envoy --log-level error --mode validate -c "${file}"
12       cp "${file}" "$out"
13     '';
18   options.services.envoy = {
19     enable = mkEnableOption (lib.mdDoc "Envoy reverse proxy");
21     settings = mkOption {
22       type = format.type;
23       default = { };
24       example = literalExpression ''
25         {
26           admin = {
27             access_log_path = "/dev/null";
28             address = {
29               socket_address = {
30                 protocol = "TCP";
31                 address = "127.0.0.1";
32                 port_value = 9901;
33               };
34             };
35           };
36           static_resources = {
37             listeners = [];
38             clusters = [];
39           };
40         }
41       '';
42       description = lib.mdDoc ''
43         Specify the configuration for Envoy in Nix.
44       '';
45     };
46   };
48   config = mkIf cfg.enable {
49     environment.systemPackages = [ pkgs.envoy ];
50     systemd.services.envoy = {
51       description = "Envoy reverse proxy";
52       after = [ "network-online.target" ];
53       requires = [ "network-online.target" ];
54       wantedBy = [ "multi-user.target" ];
55       serviceConfig = {
56         ExecStart = "${pkgs.envoy}/bin/envoy -c ${validateConfig conf}";
57         DynamicUser = true;
58         Restart = "no";
59         CacheDirectory = "envoy";
60         LogsDirectory = "envoy";
61         AmbientCapabilities = "CAP_NET_BIND_SERVICE";
62         CapabilityBoundingSet = "CAP_NET_BIND_SERVICE";
63         RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK AF_XDP";
64         SystemCallArchitectures = "native";
65         LockPersonality = true;
66         RestrictNamespaces = true;
67         RestrictRealtime = true;
68         PrivateUsers = false;  # breaks CAP_NET_BIND_SERVICE
69         PrivateDevices = true;
70         ProtectClock = true;
71         ProtectControlGroups = true;
72         ProtectHome = true;
73         ProtectKernelLogs = true;
74         ProtectKernelModules = true;
75         ProtectKernelTunables = true;
76         ProtectProc = "ptraceable";
77         ProtectHostname = true;
78         ProtectSystem = "strict";
79         UMask = "0066";
80         SystemCallFilter = "~@clock @module @mount @reboot @swap @obsolete @cpu-emulation";
81       };
82     };
83   };