66 lines
2.3 KiB
Nix
66 lines
2.3 KiB
Nix
{
|
|
config,
|
|
inputs,
|
|
lib,
|
|
pkgsMaster,
|
|
...
|
|
}: let
|
|
cfg = config.module.dpi.bypass;
|
|
in {
|
|
disabledModules = [ "services/networking/zapret.nix" ];
|
|
# imports = [ "${inputs.nixpkgsMaster}/nixos/modules/services/networking/zapret.nix" ];
|
|
|
|
config = lib.mkIf cfg.enable (lib.mkMerge [
|
|
systemd.services.zapret = {
|
|
description = "DPI bypass service";
|
|
wantedBy = [ "multi-user.target" ];
|
|
after = [ "network.target" ];
|
|
serviceConfig = {
|
|
ExecStart = "${cfg.package}/bin/nfqws --pidfile=/run/nfqws.pid ${params} ${whitelist} ${blacklist} --qnum=${qnum}";
|
|
Type = "simple";
|
|
PIDFile = "/run/nfqws.pid";
|
|
Restart = "always";
|
|
RuntimeMaxSec = "1h"; # This service loves to crash silently or cause network slowdowns. It also restarts instantly. Restarting it at least hourly provided the best experience.
|
|
|
|
# Hardening.
|
|
DevicePolicy = "closed";
|
|
KeyringMode = "private";
|
|
PrivateTmp = true;
|
|
PrivateMounts = true;
|
|
ProtectHome = true;
|
|
ProtectHostname = true;
|
|
ProtectKernelModules = true;
|
|
ProtectKernelTunables = true;
|
|
ProtectSystem = "strict";
|
|
ProtectProc = "invisible";
|
|
RemoveIPC = true;
|
|
RestrictNamespaces = true;
|
|
RestrictRealtime = true;
|
|
RestrictSUIDSGID = true;
|
|
SystemCallArchitectures = "native";
|
|
};
|
|
};
|
|
|
|
# Route system traffic via service for specified ports.
|
|
(lib.mkIf cfg.configureFirewall {
|
|
networking.firewall.extraCommands =
|
|
let
|
|
httpParams = lib.optionalString (
|
|
cfg.httpMode == "first"
|
|
) "-m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6";
|
|
|
|
udpPorts = lib.concatStringsSep "," cfg.udpPorts;
|
|
in
|
|
''
|
|
iptables -t mangle -I POSTROUTING -p tcp --dport 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num ${qnum} --queue-bypass
|
|
''
|
|
+ lib.optionalString (cfg.httpSupport) ''
|
|
iptables -t mangle -I POSTROUTING -p tcp --dport 80 ${httpParams} -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num ${qnum} --queue-bypass
|
|
''
|
|
+ lib.optionalString (cfg.udpSupport) ''
|
|
iptables -t mangle -A POSTROUTING -p udp -m multiport --dports ${udpPorts} -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num ${qnum} --queue-bypass
|
|
'';
|
|
})
|
|
];);
|
|
}
|