aboutsummaryrefslogtreecommitdiff
path: root/modules/nessus-daemon
diff options
context:
space:
mode:
Diffstat (limited to 'modules/nessus-daemon')
-rw-r--r--modules/nessus-daemon/default.nix7
-rw-r--r--modules/nessus-daemon/fhs.nix59
-rw-r--r--modules/nessus-daemon/module.nix38
3 files changed, 104 insertions, 0 deletions
diff --git a/modules/nessus-daemon/default.nix b/modules/nessus-daemon/default.nix
new file mode 100644
index 0000000..57ec584
--- /dev/null
+++ b/modules/nessus-daemon/default.nix
@@ -0,0 +1,7 @@
+{ pkgs, ... }:
+{
+ imports = [ ./module.nix ];
+ environment.systemPackages = [
+ (pkgs.callPackage ./fhs.nix {})
+ ];
+}
diff --git a/modules/nessus-daemon/fhs.nix b/modules/nessus-daemon/fhs.nix
new file mode 100644
index 0000000..97f5016
--- /dev/null
+++ b/modules/nessus-daemon/fhs.nix
@@ -0,0 +1,59 @@
+{ pkgs ? import <nixpkgs> {}, ... }:
+let
+ debUrl = "https://www.tenable.com/downloads/api/v1/public/pages/nessus-agents/downloads/26786/download?i_agree_to_tenable_license_agreement=true";
+
+ setupNessusAgentDir = pkgs.writeShellScriptBin "setup-nessus-agent-dir" ''
+ set -eu -o pipefail
+ outdir=/opt/nessus_agent
+ if ! [ -f "$outdir/.installed" ]; then
+ echo "First install setup"
+ mkdir -p "$outdir"
+ cp -rf ${nessus-files}/nessus/* "$outdir"
+ chmod -R 755 "$outdir"
+ touch "$outdir/.installed"
+ fi
+ '';
+
+ nessus-files = pkgs.stdenv.mkDerivation {
+ pname = "nessus-files";
+ version = "11.0.2";
+ nativeBuildInputs = [ pkgs.dpkg ];
+ src = pkgs.fetchurl {
+ url = debUrl;
+ sha256 = "sha256-TlO7l50sqILcF/xga+RifvzptcSBk/PGqunhJYzUFYA=";
+ };
+ dontConfigure = true;
+ dontBuild = true;
+ unpackPhase = ''dpkg-deb -x $src .'';
+ installPhase = ''
+ mkdir -p $out/nessus
+ mv opt/nessus_agent/* $out/nessus
+ '';
+ };
+in
+pkgs.buildFHSEnv {
+ name = "nessus-agent-fhs";
+
+ targetPkgs = pkgs: with pkgs; [
+ coreutils
+ openssl_3
+ nettools
+ iproute2
+ procps
+ util-linux
+ glibc
+ zlib
+ sqlite
+ ];
+
+ profile = ''
+ export NESSUS_TZ_DIR=/etc/zoneinfo;
+ export PATH="$PATH:/opt/nessus_agent/bin:/opt/nessus_agent/sbin"
+ '';
+
+ runScript = ''bash -c '
+ echo "Starting service with args: $@";
+ ${setupNessusAgentDir}/bin/setup-nessus-agent-dir;
+ "$@";
+ ' -- '';
+}
diff --git a/modules/nessus-daemon/module.nix b/modules/nessus-daemon/module.nix
new file mode 100644
index 0000000..f33cf0c
--- /dev/null
+++ b/modules/nessus-daemon/module.nix
@@ -0,0 +1,38 @@
+{ config, lib, pkgs, ... }:
+with lib;
+let
+ cfg = config.services.nessus-agent;
+ nessus-agent-fhs = (pkgs.callPackage ./fhs.nix {});
+in {
+ options.services.nessus-agent = {
+ enable = mkEnableOption "nessus agent";
+ openFirewall = mkEnableOption "open firewall for nessus";
+ port = mkOption { type = types.int; default = 8834; };
+ };
+
+ config = mkIf cfg.enable {
+ systemd.tmpfiles.rules = [
+ "d /opt/nessus_agent 0755 root root -"
+ ];
+
+ networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.port ];
+
+ systemd.services.nessus-agent = {
+ description = "Tenable Nessus Agent Service";
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network.target" ];
+ path = [ pkgs.coreutils ];
+ serviceConfig = {
+ Type = "simple";
+ Restart = "on-abort";
+ User = "root";
+ Group = "root";
+ PIDFile = "/opt/nessus_agent/var/nessus/nessus-service.pid";
+ ExecStart = "${nessus-agent-fhs}/bin/nessus-agent-fhs /opt/nessus_agent/sbin/nessus-service -q --port ${toString cfg.port}";
+ ExecReload = "/usr/bin/pkill nessusd";
+ EnvironmentFile = "-/etc/sysconfig/nessusagent";
+ PrivateNetwork = false;
+ };
+ };
+ };
+}