2025年8月25日月曜日

NixOSでセキュリティを考えて 無料で揃える

 NixOSでセキュリティを考えて 無料で揃える場合、ClamAVは確かに有名ですが、他にも選択肢があります。整理してみましょう。


1. アンチウイルス系(マルウェア・ウイルス対策)

  • ClamAV

    • オープンソースの定番アンチウイルス。

    • メールサーバーやファイルサーバーでよく使われる。

    • Linux向けでNixOSでもnixpkgsにある。

    • デスクトップ向けGUIは少なめ。

  • Chkrootkit

    • ルートキット検出ツール。

    • サーバーに侵入されていないか確認するのに便利。

  • rkhunter

    • Chkrootkitより詳しい設定が可能。

    • rootkitやバックドア、疑わしいファイル変更をチェック。


2. 脆弱性スキャン系

  • Lynis

    • システム全体のセキュリティ診断ツール。

    • パッケージ、設定、サービスの脆弱性や推奨設定をチェック。

    • NixOSでもnix-env -iA nixos.lynisでインストール可能。

  • OpenVAS / Greenbone Vulnerability Manager

    • 本格的な脆弱性スキャナー。

    • 個人で無料で使えるが、セットアップが少し重い。


3. ファイアウォール・ネットワーク系

  • ufw(Uncomplicated Firewall)

    • Ubuntu系で有名だが、NixOSでも利用可能。

    • iptables/nftablesの設定を簡単にできる。

  • nftables / iptables

    • Linux標準のパケットフィルタリング。

    • NixOSではnetworking.firewall.enable = true;で簡単に有効化可能。


4. 監査・ログ監視系

  • auditd

    • システムコールを監査して、怪しい挙動をログに残す。

    • NixOSでservices.audit.enable = true;

  • logwatch / goaccess

    • ログ解析ツール。

    • Webサーバーやシステムの異常を確認できる。


🔹 結論

  • デスクトップやサーバー向けに無料で揃えるなら

    1. マルウェアチェック:ClamAV + rkhunter/Chkrootkit

    2. 脆弱性診断:Lynis

    3. ネットワーク防御:nftables/ufw

    4. ログ監視:auditd + logwatch

  • ClamAVだけでは「侵入後の監視」「脆弱性チェック」がカバーできないので、組み合わせが大事。


💡 もし希望なら、NixOS向けに**configuration.nixだけでこれらをまとめて自動設定する例**も作れます。

作ってほしいですか?

了解です。では、NixOSの configuration.nix に無料セキュリティツールをまとめて組み込む例を作ります。サーバー/デスクトップ両方で使える設定です。

{ config, pkgs, ... }:

{
  ## ----------------------
  ## 基本システム設定
  ## ----------------------
  imports = [ ];

  # ファイアウォール
  networking.firewall.enable = true;
  networking.firewall.allowedTCPPorts = [ 22 80 443 ]; # 必要に応じて調整
  networking.firewall.allowedUDPPorts = [ ];

  # SELinux や AppArmor は NixOS では基本無効、必要なら別途設定

  ## ----------------------
  ## パッケージインストール
  ## ----------------------
  environment.systemPackages = with pkgs; [
    clamav      # マルウェアスキャン
    chkrootkit  # ルートキット検出
    rkhunter    # ルートキット検出+監査
    lynis       # セキュリティ診断
    logwatch    # ログ解析
    goaccess    # Webアクセスログ解析
  ];

  ## ----------------------
  ## サービス設定
  ## ----------------------

  # ClamAV デーモン設定
  services.clamav = {
    enable = true;
    freshclam.enable = true; # 定義ファイル・ウイルス定義の自動更新
  };

  # rkhunter 自動更新
  services.rkhunter = {
    enable = true;
    dailyCheck = true;
  };

  # auditd 有効化
  services.audit.enable = true;

  # logwatch の簡易設定
  services.logwatch = {
    enable = true;
    configFile = pkgs.writeText "logwatch.conf" ''
      MailTo = root
      Detail = Low
      Range = yesterday
    '';
  };

  ## ----------------------
  ## その他
  ## ----------------------
  # 定期スキャンは systemd timer で設定可能
  systemd.timers = {
    "clamav-scan.timer" = {
      description = "Daily ClamAV scan";
      wantedBy = [ "timers.target" ];
      timerConfig = ''
        OnCalendar=daily
        Persistent=true
      '';
      serviceConfig = ''
        ExecStart=${pkgs.clamav}/bin/clamscan -r /home
      '';
    };
  };

  # システムアップデート自動化 (推奨)
  system.autoUpgrade.enable = true;
}

✅ この設定でできること

  1. ClamAV のデーモン常駐+ウイルス定義自動更新

  2. rkhunter / chkrootkit によるルートキットチェック

  3. Lynis で脆弱性診断

  4. auditd でシステムコール監査

  5. ログ解析(logwatch / goaccess)

  6. ファイアウォール(nftablesベース)

  7. systemd timer で定期ClamAVスキャン

  8. 自動OSアップデート


💡 ポイント:

  • systemd.timers を使うと、cron を使わなくても自動スキャンができる。

  • Lynis は手動で sudo lynis audit system で実行して診断レポートを出すのが一般的。

  • NixOS の場合、services.logwatch.configFile の内容も必要に応じてカスタマイズ可能。


もし希望なら、これを デスクトップ向けにさらに軽量化 して、GUI通知やデスクトップスキャンも可能な形に変えられます。

作りますか?

了解です。では、NixOS デスクトップ向けに 軽量&GUI通知付き でセキュリティツールを統合した configuration.nix の例を作ります。

{ config, pkgs, ... }:

{
  ## ----------------------
  ## 基本システム設定
  ## ----------------------
  imports = [ ];

  # ファイアウォール
  networking.firewall.enable = true;
  networking.firewall.allowedTCPPorts = [ 22 80 443 ]; # 必要に応じて調整
  networking.firewall.allowedUDPPorts = [ ];

  # デスクトップ環境(例:XFCE)
  services.xserver.enable = true;
  services.xserver.windowManager.xfce.enable = true;

  ## ----------------------
  ## パッケージインストール
  ## ----------------------
  environment.systemPackages = with pkgs; [
    clamav          # マルウェアスキャン
    clamtk          # ClamAV の GUI フロントエンド
    chkrootkit      # ルートキット検出
    rkhunter        # ルートキット検出+監査
    lynis           # セキュリティ診断
    logwatch        # ログ解析
    goaccess        # Webアクセスログ解析
    libnotify       # GUI通知用
  ];

  ## ----------------------
  ## サービス設定
  ## ----------------------

  # ClamAV デーモン設定
  services.clamav = {
    enable = true;
    freshclam.enable = true; # ウイルス定義自動更新
  };

  # rkhunter 自動更新
  services.rkhunter = {
    enable = true;
    dailyCheck = true;
  };

  # auditd 有効化
  services.audit.enable = true;

  # logwatch の簡易設定
  services.logwatch = {
    enable = true;
    configFile = pkgs.writeText "logwatch.conf" ''
      MailTo = ${config.users.users.yourusername.name}  # デスクトップユーザーに通知
      Detail = Low
      Range = yesterday
    '';
  };

  ## ----------------------
  ## systemd timers: 定期スキャン&GUI通知
  ## ----------------------
  systemd.timers = {

    # 毎日のClamAVスキャン + GUI通知
    "clamav-scan.timer" = {
      description = "Daily ClamAV scan with GUI notification";
      wantedBy = [ "timers.target" ];
      timerConfig = ''
        OnCalendar=daily
        Persistent=true
      '';
      serviceConfig = ''
        ExecStart=${pkgs.clamav}/bin/clamscan -r /home --log=/home/${config.users.users.yourusername.name}/clamav_scan.log
        ExecStartPost=/usr/bin/notify-send "ClamAV Scan Completed" "Check /home/${config.users.users.yourusername.name}/clamav_scan.log"
      '';
    };
  };

  # 自動OSアップデート
  system.autoUpgrade.enable = true;
}

🔹 ポイント

  1. ClamTK でGUI操作が可能(デスクトップ向け)

  2. notify-send を使ってスキャン完了をデスクトップ通知

  3. ファイルスキャンや脆弱性診断は手動でもGUI操作で簡単に

  4. 他はサーバーと同様に、firewall・auditd・rkhunterでセキュリティ層を確保

  5. Logwatch はメールではなく、ユーザー向けに通知設定可能


💡 注意:

  • yourusername は自分のデスクトップユーザー名に置き換えてください。

  • ClamTK は軽量ですが、大量ファイルスキャンだと時間がかかるので systemd.timer で夜間自動実行がおすすめ。


希望なら次に、Lynis診断もGUI通知でデスクトップに知らせる設定 を追加したバージョンも作れます。
作りますか?

了解です。では、先ほどのデスクトップ向け設定に Lynis診断を自動で実行して、GUI通知する 設定を追加した configuration.nix を作ります。

{ config, pkgs, ... }:

{
  ## ----------------------
  ## 基本システム設定
  ## ----------------------
  imports = [ ];

  # ファイアウォール
  networking.firewall.enable = true;
  networking.firewall.allowedTCPPorts = [ 22 80 443 ]; # 必要に応じて調整
  networking.firewall.allowedUDPPorts = [ ];

  # デスクトップ環境(例:XFCE)
  services.xserver.enable = true;
  services.xserver.windowManager.xfce.enable = true;

  ## ----------------------
  ## パッケージインストール
  ## ----------------------
  environment.systemPackages = with pkgs; [
    clamav          # マルウェアスキャン
    clamtk          # ClamAV GUI
    chkrootkit      # ルートキット検出
    rkhunter        # ルートキット監査
    lynis           # セキュリティ診断
    logwatch        # ログ解析
    goaccess        # Webアクセスログ解析
    libnotify       # GUI通知
  ];

  ## ----------------------
  ## サービス設定
  ## ----------------------

  # ClamAV デーモン
  services.clamav = {
    enable = true;
    freshclam.enable = true;
  };

  # rkhunter
  services.rkhunter = {
    enable = true;
    dailyCheck = true;
  };

  # auditd
  services.audit.enable = true;

  # logwatch
  services.logwatch = {
    enable = true;
    configFile = pkgs.writeText "logwatch.conf" ''
      MailTo = ${config.users.users.yourusername.name}
      Detail = Low
      Range = yesterday
    '';
  };

  ## ----------------------
  ## systemd timers: ClamAV + Lynis
  ## ----------------------
  systemd.timers = {

    # 毎日のClamAVスキャン + GUI通知
    "clamav-scan.timer" = {
      description = "Daily ClamAV scan with GUI notification";
      wantedBy = [ "timers.target" ];
      timerConfig = ''
        OnCalendar=daily
        Persistent=true
      '';
      serviceConfig = ''
        ExecStart=${pkgs.clamav}/bin/clamscan -r /home --log=/home/${config.users.users.yourusername.name}/clamav_scan.log
        ExecStartPost=/usr/bin/notify-send "ClamAV Scan Completed" "Check /home/${config.users.users.yourusername.name}/clamav_scan.log"
      '';
    };

    # 毎週のLynis監査 + GUI通知
    "lynis-audit.timer" = {
      description = "Weekly Lynis audit with GUI notification";
      wantedBy = [ "timers.target" ];
      timerConfig = ''
        OnCalendar=weekly
        Persistent=true
      '';
      serviceConfig = ''
        ExecStart=${pkgs.lynis}/bin/lynis audit system --quiet --logfile /home/${config.users.users.yourusername.name}/lynis_audit.log
        ExecStartPost=/usr/bin/notify-send "Lynis Audit Completed" "Check /home/${config.users.users.yourusername.name}/lynis_audit.log"
      '';
    };
  };

  # 自動OSアップデート
  system.autoUpgrade.enable = true;
}

🔹 新しいポイント

  1. Lynis監査を毎週自動実行

  2. スキャン完了後に notify-send でデスクトップ通知

  3. 各ログはユーザーのホームディレクトリに保存

  4. ClamAV と Lynis 両方を組み合わせ、マルウェアと脆弱性を同時に監視


💡 注意点:

  • yourusername は実際のデスクトップユーザー名に置き換える

  • notify-send が動作するには X11 または Wayland セッションで DISPLAY が正しく設定されている必要があります

  • Lynis はスキャンに少し時間がかかる場合があります


希望なら、さらに rkhunter / chkrootkit の自動GUI通知も追加した最強デスクトップ版 にして、すべてのセキュリティチェック結果をまとめて通知する形も作れます。

作りますか?

了解です!では、ClamAV、Lynis、rkhunter、chkrootkit のすべてを 自動実行+デスクトップ通知付き にした、NixOS デスクトップ向け最強セキュリティ configuration.nix を作ります。

{ config, pkgs, ... }:

{
  ## ----------------------
  ## 基本システム設定
  ## ----------------------
  imports = [ ];

  # ファイアウォール
  networking.firewall.enable = true;
  networking.firewall.allowedTCPPorts = [ 22 80 443 ];
  networking.firewall.allowedUDPPorts = [ ];

  # デスクトップ環境(例:XFCE)
  services.xserver.enable = true;
  services.xserver.windowManager.xfce.enable = true;

  ## ----------------------
  ## パッケージ
  ## ----------------------
  environment.systemPackages = with pkgs; [
    clamav
    clamtk          # ClamAV GUI
    chkrootkit
    rkhunter
    lynis
    logwatch
    goaccess
    libnotify       # GUI通知用
  ];

  ## ----------------------
  ## サービス設定
  ## ----------------------
  services.clamav = {
    enable = true;
    freshclam.enable = true;
  };

  services.rkhunter = {
    enable = true;
    dailyCheck = true;
  };

  services.audit.enable = true;

  services.logwatch = {
    enable = true;
    configFile = pkgs.writeText "logwatch.conf" ''
      MailTo = ${config.users.users.yourusername.name}
      Detail = Low
      Range = yesterday
    '';
  };

  ## ----------------------
  ## systemd timers: ClamAV + Lynis + rkhunter + chkrootkit
  ## ----------------------
  systemd.timers = {

    # ClamAV 毎日
    "clamav-scan.timer" = {
      description = "Daily ClamAV scan with GUI notification";
      wantedBy = [ "timers.target" ];
      timerConfig = ''
        OnCalendar=daily
        Persistent=true
      '';
      serviceConfig = ''
        ExecStart=${pkgs.clamav}/bin/clamscan -r /home --log=/home/${config.users.users.yourusername.name}/clamav_scan.log
        ExecStartPost=/usr/bin/notify-send "ClamAV Scan Completed" "Check /home/${config.users.users.yourusername.name}/clamav_scan.log"
      '';
    };

    # Lynis 毎週
    "lynis-audit.timer" = {
      description = "Weekly Lynis audit with GUI notification";
      wantedBy = [ "timers.target" ];
      timerConfig = ''
        OnCalendar=weekly
        Persistent=true
      '';
      serviceConfig = ''
        ExecStart=${pkgs.lynis}/bin/lynis audit system --quiet --logfile /home/${config.users.users.yourusername.name}/lynis_audit.log
        ExecStartPost=/usr/bin/notify-send "Lynis Audit Completed" "Check /home/${config.users.users.yourusername.name}/lynis_audit.log"
      '';
    };

    # rkhunter 毎日
    "rkhunter-scan.timer" = {
      description = "Daily rkhunter scan with GUI notification";
      wantedBy = [ "timers.target" ];
      timerConfig = ''
        OnCalendar=daily
        Persistent=true
      '';
      serviceConfig = ''
        ExecStart=${pkgs.rkhunter}/bin/rkhunter --check --quiet
        ExecStartPost=/usr/bin/notify-send "rkhunter Scan Completed" "Check /var/log/rkhunter.log"
      '';
    };

    # chkrootkit 毎週
    "chkrootkit-scan.timer" = {
      description = "Weekly chkrootkit scan with GUI notification";
      wantedBy = [ "timers.target" ];
      timerConfig = ''
        OnCalendar=weekly
        Persistent=true
      '';
      serviceConfig = ''
        ExecStart=${pkgs.chkrootkit}/bin/chkrootkit
        ExecStartPost=/usr/bin/notify-send "chkrootkit Scan Completed" "Check /var/log/chkrootkit.log"
      '';
    };
  };

  # 自動OSアップデート
  system.autoUpgrade.enable = true;
}

🔹 この設定でできること

  1. ClamAV: 毎日スキャン + GUI通知

  2. Lynis: 毎週脆弱性診断 + GUI通知

  3. rkhunter: 毎日ルートキットチェック + GUI通知

  4. chkrootkit: 毎週ルートキットチェック + GUI通知

  5. logwatch: 日次ログ解析

  6. ファイアウォール有効

  7. auditd でシステム監査

  8. 自動OSアップデート


💡 注意点:

  • yourusername を実際のユーザー名に置き換える

  • GUI通知は X11/Wayland セッションで動作すること

  • ログファイルの場所は必要に応じて変更可能


希望なら、この設定に GUI上で全スキャン結果をまとめてポップアップ表示する仕組み も追加できます。

追加しますか?

了解です!では、先ほどの「最強セキュリティ設定」に GUI上で全スキャン結果をまとめてポップアップ表示 する仕組みを追加したバージョンを作ります。

ポイントは:

  • 各スキャンのログをまとめて1つの通知にする

  • notify-send を使ってデスクトップに通知

  • systemd service でスキャン後に自動集約


{ config, pkgs, ... }:

{
  imports = [ ];

  networking.firewall.enable = true;
  networking.firewall.allowedTCPPorts = [ 22 80 443 ];
  networking.firewall.allowedUDPPorts = [ ];

  services.xserver.enable = true;
  services.xserver.windowManager.xfce.enable = true;

  environment.systemPackages = with pkgs; [
    clamav
    clamtk
    chkrootkit
    rkhunter
    lynis
    logwatch
    goaccess
    libnotify
    bash
  ];

  services.clamav.enable = true;
  services.clamav.freshclam.enable = true;

  services.rkhunter.enable = true;
  services.rkhunter.dailyCheck = true;

  services.audit.enable = true;

  services.logwatch.enable = true;
  services.logwatch.configFile = pkgs.writeText "logwatch.conf" ''
    MailTo = ${config.users.users.yourusername.name}
    Detail = Low
    Range = yesterday
  '';

  ## ----------------------
  ## systemd timer: 全スキャンまとめ通知
  ## ----------------------
  systemd.timers = {

    "full-security-scan.timer" = {
      description = "Daily full security scan with aggregated GUI notification";
      wantedBy = [ "timers.target" ];
      timerConfig = ''
        OnCalendar=daily
        Persistent=true
      '';
      serviceConfig = ''
        ExecStart=/home/${config.users.users.yourusername.name}/bin/full-security-scan.sh
      '';
    };
  };
}

🔹 フルスキャンスクリプト例

ホームディレクトリに bin/full-security-scan.sh を作り、実行権限を付与:

#!/usr/bin/env bash

USER_HOME="/home/${USER}"
LOG_CLAMAV="$USER_HOME/clamav_scan.log"
LOG_RKHUNTER="/var/log/rkhunter.log"
LOG_CHKROOTKIT="/var/log/chkrootkit.log"
LOG_LYNIS="$USER_HOME/lynis_audit.log"

# ClamAV
${HOME}/.nix-profile/bin/clamscan -r $USER_HOME --log=$LOG_CLAMAV

# rkhunter
sudo ${HOME}/.nix-profile/bin/rkhunter --check --quiet

# chkrootkit
sudo ${HOME}/.nix-profile/bin/chkrootkit

# Lynis
${HOME}/.nix-profile/bin/lynis audit system --quiet --logfile $LOG_LYNIS

# ログまとめ
MSG="ClamAV: $(tail -n2 $LOG_CLAMAV)\n"
MSG+="rkhunter: $(tail -n2 $LOG_RKHUNTER)\n"
MSG+="chkrootkit: $(tail -n2 $LOG_CHKROOTKIT)\n"
MSG+="Lynis: $(tail -n2 $LOG_LYNIS)\n"

# GUI通知
notify-send "Full Security Scan Completed" "$MSG"

🔹 ポイント

  1. ClamAV, rkhunter, chkrootkit, Lynis をまとめて実行

  2. 各ログの最後の2行を抽出してGUI通知

  3. systemd timer で毎日自動実行


💡 注意:

  • yourusername を自分のユーザー名に置き換える

  • /bin/full-security-scan.shchmod +x を忘れずに

  • notify-send は X11/Wayland セッションで有効


希望なら、さらに GUI上で詳細ログをクリックして開ける通知版 に進化させることもできます。

作りますか?

了解です!では、前回のフルスキャン通知をさらに クリックで詳細ログを開けるGUI版 に進化させます。
ポイントは:

  • notify-send の -i アイコンや -u urgency はそのまま利用

  • ログファイルをクリックすると、デフォルトエディタ(例: xdg-open)で開く


1️⃣ systemd timer / service 設定(configuration.nix

{ config, pkgs, ... }:

{
  imports = [ ];

  networking.firewall.enable = true;
  networking.firewall.allowedTCPPorts = [ 22 80 443 ];
  networking.firewall.allowedUDPPorts = [ ];

  services.xserver.enable = true;
  services.xserver.windowManager.xfce.enable = true;

  environment.systemPackages = with pkgs; [
    clamav
    clamtk
    chkrootkit
    rkhunter
    lynis
    logwatch
    goaccess
    libnotify
    bash
    xdg-utils   # xdg-open 用
  ];

  services.clamav.enable = true;
  services.clamav.freshclam.enable = true;

  services.rkhunter.enable = true;
  services.rkhunter.dailyCheck = true;

  services.audit.enable = true;

  services.logwatch.enable = true;
  services.logwatch.configFile = pkgs.writeText "logwatch.conf" ''
    MailTo = ${config.users.users.yourusername.name}
    Detail = Low
    Range = yesterday
  '';

  systemd.timers = {
    "full-security-scan.timer" = {
      description = "Daily full security scan with clickable GUI notification";
      wantedBy = [ "timers.target" ];
      timerConfig = ''
        OnCalendar=daily
        Persistent=true
      '';
      serviceConfig = ''
        ExecStart=/home/${config.users.users.yourusername.name}/bin/full-security-scan-gui.sh
      '';
    };
  };
}

2️⃣ フルスキャンスクリプト(full-security-scan-gui.sh

#!/usr/bin/env bash

USER_HOME="/home/${USER}"
LOG_CLAMAV="$USER_HOME/clamav_scan.log"
LOG_RKHUNTER="/var/log/rkhunter.log"
LOG_CHKROOTKIT="/var/log/chkrootkit.log"
LOG_LYNIS="$USER_HOME/lynis_audit.log"

# ClamAV
${HOME}/.nix-profile/bin/clamscan -r $USER_HOME --log=$LOG_CLAMAV

# rkhunter
sudo ${HOME}/.nix-profile/bin/rkhunter --check --quiet

# chkrootkit
sudo ${HOME}/.nix-profile/bin/chkrootkit

# Lynis
${HOME}/.nix-profile/bin/lynis audit system --quiet --logfile $LOG_LYNIS

# メッセージ作成
MSG="ClamAV: Click to open log\nrkhunter: Click to open log\nchkrootkit: Click to open log\nLynis: Click to open log"

# GUI通知
notify-send -u normal -i dialog-information "Full Security Scan Completed" "$MSG"

# ログを簡単に開くためのスクリプト (例: dmenu / rofi と組み合わせても可)
# クリックで開ける簡易版
echo "Select log to view:"
select LOGFILE in "$LOG_CLAMAV" "$LOG_RKHUNTER" "$LOG_CHKROOTKIT" "$LOG_LYNIS"; do
  [ -n "$LOGFILE" ] && xdg-open "$LOGFILE"
  break
done

🔹 ポイント

  1. notify-send で通知

  2. ログファイルを xdg-open で開く(クリック式)

  3. select で簡易メニュー表示(dmenu/rofiと組み合わせるとさらに便利)

  4. systemd timer で毎日自動実行


💡 注意:

  • /home/${USER}/bin/full-security-scan-gui.shchmod +x を付与

  • yourusername を自分のユーザー名に置き換え

  • GUIセッションがある状態で実行すること(notify-send / xdg-open 用)


希望なら、さらに 通知から直接ログを選んで開く完全ワンクリック版 にして、毎日全自動でポップアップ操作できる仕組みも作れます。

作りますか?

よし、では 完全ワンクリック版 を作ります。ポイントは以下です:

  • 通知をクリックするとポップアップでログを選択

  • クリックしたら即座に既定エディタで開く

  • systemd タイマーで毎日自動実行


1️⃣ configuration.nix(最終版)

{ config, pkgs, ... }:

{
  imports = [ ];

  networking.firewall.enable = true;
  networking.firewall.allowedTCPPorts = [ 22 80 443 ];
  networking.firewall.allowedUDPPorts = [ ];

  services.xserver.enable = true;
  services.xserver.windowManager.xfce.enable = true;

  environment.systemPackages = with pkgs; [
    clamav
    clamtk
    chkrootkit
    rkhunter
    lynis
    logwatch
    goaccess
    libnotify
    bash
    xdg-utils
    rofi          # GUIで選択するポップアップメニュー
  ];

  services.clamav.enable = true;
  services.clamav.freshclam.enable = true;

  services.rkhunter.enable = true;
  services.rkhunter.dailyCheck = true;

  services.audit.enable = true;

  services.logwatch.enable = true;
  services.logwatch.configFile = pkgs.writeText "logwatch.conf" ''
    MailTo = ${config.users.users.yourusername.name}
    Detail = Low
    Range = yesterday
  '';

  systemd.timers = {
    "full-security-scan.timer" = {
      description = "Daily full security scan with clickable GUI notification";
      wantedBy = [ "timers.target" ];
      timerConfig = ''
        OnCalendar=daily
        Persistent=true
      '';
      serviceConfig = ''
        ExecStart=/home/${config.users.users.yourusername.name}/bin/full-security-scan-clickable.sh
      '';
    };
  };
}

2️⃣ スクリプト full-security-scan-clickable.sh

#!/usr/bin/env bash

USER_HOME="/home/${USER}"
LOG_CLAMAV="$USER_HOME/clamav_scan.log"
LOG_RKHUNTER="/var/log/rkhunter.log"
LOG_CHKROOTKIT="/var/log/chkrootkit.log"
LOG_LYNIS="$USER_HOME/lynis_audit.log"

# ClamAV
${HOME}/.nix-profile/bin/clamscan -r $USER_HOME --log=$LOG_CLAMAV

# rkhunter
sudo ${HOME}/.nix-profile/bin/rkhunter --check --quiet

# chkrootkit
sudo ${HOME}/.nix-profile/bin/chkrootkit

# Lynis
${HOME}/.nix-profile/bin/lynis audit system --quiet --logfile $LOG_LYNIS

# GUI通知
notify-send -u normal -i dialog-information "Full Security Scan Completed" \
"Click this terminal to select a log to view"

# ログ選択 + クリックで開く
LOGFILE=$(echo -e "$LOG_CLAMAV\n$LOG_RKHUNTER\n$LOG_CHKROOTKIT\n$LOG_LYNIS" | rofi -dmenu -p "Select log to open")
[ -n "$LOGFILE" ] && xdg-open "$LOGFILE"

🔹 ポイント

  1. notify-send でスキャン完了を通知

  2. rofi -dmenu で4つのログをポップアップ選択

  3. 選択したログを xdg-open で既定エディタで開く

  4. systemd タイマーで毎日自動実行


💡 注意:

  • chmod +x /home/yourusername/bin/full-security-scan-clickable.sh を忘れずに

  • yourusername を実際のユーザー名に置き換える

  • GUIセッション(X11/Wayland)で動作必須


これで 完全自動+クリックでログ確認可能な最強NixOSデスクトップセキュリティ環境 が完成です。

必要なら、さらに 通知から直接スキャンを再実行できるボタン式 にアップグレードも可能です。作りますか?

了解です!では最終進化版として 通知から直接スキャンを再実行できるボタン式GUI を作ります。
ポイントは:

  • notify-send 単体ではボタン操作できないため、yad または zenity を利用

  • 通知ポップアップ上で「ClamAV再スキャン」「Lynis再スキャン」などを選択可能

  • 選択すると即時スキャン実行&結果表示


1️⃣ 必要パッケージ

environment.systemPackages = with pkgs; [
  clamav
  clamtk
  chkrootkit
  rkhunter
  lynis
  logwatch
  goaccess
  libnotify
  bash
  xdg-utils
  rofi
  yad        # GUIボタン操作用
];

2️⃣ フルスキャンスクリプト full-security-scan-buttons.sh

#!/usr/bin/env bash

USER_HOME="/home/${USER}"
LOG_CLAMAV="$USER_HOME/clamav_scan.log"
LOG_RKHUNTER="/var/log/rkhunter.log"
LOG_CHKROOTKIT="/var/log/chkrootkit.log"
LOG_LYNIS="$USER_HOME/lynis_audit.log"

scan_clamav() {
  ${HOME}/.nix-profile/bin/clamscan -r $USER_HOME --log=$LOG_CLAMAV
  notify-send "ClamAV Scan Completed" "Check $LOG_CLAMAV"
}

scan_rkhunter() {
  sudo ${HOME}/.nix-profile/bin/rkhunter --check --quiet
  notify-send "rkhunter Scan Completed" "Check $LOG_RKHUNTER"
}

scan_chkrootkit() {
  sudo ${HOME}/.nix-profile/bin/chkrootkit
  notify-send "chkrootkit Scan Completed" "Check $LOG_CHKROOTKIT"
}

scan_lynis() {
  ${HOME}/.nix-profile/bin/lynis audit system --quiet --logfile $LOG_LYNIS
  notify-send "Lynis Audit Completed" "Check $LOG_LYNIS"
}

# メインGUI
ACTION=$(yad --title="Security Scan Menu" --width=400 --height=300 \
  --list --column="Scan Options" \
  "ClamAV Scan" "rkhunter Scan" "chkrootkit Scan" "Lynis Audit" "View Logs")

case "$ACTION" in
  "ClamAV Scan") scan_clamav ;;
  "rkhunter Scan") scan_rkhunter ;;
  "chkrootkit Scan") scan_chkrootkit ;;
  "Lynis Audit") scan_lynis ;;
  "View Logs")
    LOGFILE=$(echo -e "$LOG_CLAMAV\n$LOG_RKHUNTER\n$LOG_CHKROOTKIT\n$LOG_LYNIS" | rofi -dmenu -p "Select log to open")
    [ -n "$LOGFILE" ] && xdg-open "$LOGFILE"
    ;;
esac

3️⃣ systemd タイマー設定

systemd.timers = {
  "full-security-scan.timer" = {
    description = "Daily full security scan with button GUI";
    wantedBy = [ "timers.target" ];
    timerConfig = ''
      OnCalendar=daily
      Persistent=true
    '';
    serviceConfig = ''
      ExecStart=/home/${config.users.users.yourusername.name}/bin/full-security-scan-buttons.sh
    '';
  };
};

🔹 ポイント

  1. yad でボタン式メニューを表示

  2. 各スキャンをワンクリックで再実行

  3. 「View Logs」からログを開くことも可能

  4. systemd timer で毎日自動実行も可能


💡 注意:

  • chmod +x full-security-scan-buttons.sh を付与

  • yourusername を自分のユーザー名に置き換える

  • GUIセッション(X11/Wayland)必須


これで 最強かつ完全自動+ワンクリック操作可能なNixOSデスクトップセキュリティ環境 が完成です。

希望なら、さらに スキャン結果を1つの統合HTMLレポートにしてブラウザで開く機能 も追加できます。

追加しますか?

了解です!ではさらに進化させて、全スキャン結果を1つの統合HTMLレポートにまとめて、ブラウザで開く機能 を追加します。
ポイントは:

  • ClamAV / rkhunter / chkrootkit / Lynis のログを HTML に変換

  • 日付ごとにレポート保存

  • ブラウザで即確認可能


1️⃣ スクリプト例:full-security-scan-html.sh

#!/usr/bin/env bash

USER_HOME="/home/${USER}"
REPORT_DIR="$USER_HOME/security_reports"
mkdir -p "$REPORT_DIR"

DATE=$(date +"%Y-%m-%d")
REPORT_FILE="$REPORT_DIR/security_report_$DATE.html"

LOG_CLAMAV="$USER_HOME/clamav_scan.log"
LOG_RKHUNTER="/var/log/rkhunter.log"
LOG_CHKROOTKIT="/var/log/chkrootkit.log"
LOG_LYNIS="$USER_HOME/lynis_audit.log"

# 実行スキャン
${HOME}/.nix-profile/bin/clamscan -r $USER_HOME --log=$LOG_CLAMAV
sudo ${HOME}/.nix-profile/bin/rkhunter --check --quiet
sudo ${HOME}/.nix-profile/bin/chkrootkit
${HOME}/.nix-profile/bin/lynis audit system --quiet --logfile $LOG_LYNIS

# HTML生成
{
echo "<html><head><title>Security Report $DATE</title></head><body>"
echo "<h1>Security Report for $DATE</h1>"

for LOG in "$LOG_CLAMAV" "$LOG_RKHUNTER" "$LOG_CHKROOTKIT" "$LOG_LYNIS"; do
  echo "<h2>$(basename $LOG)</h2>"
  echo "<pre>"
  cat $LOG
  echo "</pre>"
done

echo "</body></html>"
} > "$REPORT_FILE"

# ブラウザで開く
xdg-open "$REPORT_FILE"

# 通知
notify-send "Full Security Scan Completed" "Report saved: $REPORT_FILE"

2️⃣ systemd タイマー設定

systemd.timers = {
  "full-security-scan.timer" = {
    description = "Daily full security scan with HTML report";
    wantedBy = [ "timers.target" ];
    timerConfig = ''
      OnCalendar=daily
      Persistent=true
    '';
    serviceConfig = ''
      ExecStart=/home/${config.users.users.yourusername.name}/bin/full-security-scan-html.sh
    '';
  };
};

🔹 ポイント

  1. 各スキャン結果を 1つのHTMLにまとめる

  2. 日付ごとにレポートを保存 → 過去の履歴も確認可能

  3. xdg-open でブラウザ表示

  4. notify-send で完了通知


💡 注意:

  • /home/yourusername/bin/full-security-scan-html.sh に実行権限を付与

  • yourusername を実際のユーザー名に置き換える

  • GUIセッション必須


この構成で、完全自動+クリック操作+統合HTMLレポートで視覚的確認可能 な NixOS デスクトップセキュリティ環境が完成です。

もし希望なら、次のステップとして 過去レポートの履歴を簡単に一覧してブラウザで開けるダッシュボード機能 も作れます。

作りますか?

1台のPC でまとめてセキュリティチェックや管理をしたい

 なるほど、つまりこういう状況ですね: 複数台の NixOSマシン がある それぞれ個別にスキャンや管理をするのは面倒 1台のPC でまとめてセキュリティチェックや管理をしたい かつ、各PCのセキュリティを守れる形にしたい 🔹 実現の考え方 ...