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サーバーやシステムの異常を確認できる。
-
🔹 結論
-
デスクトップやサーバー向けに無料で揃えるなら:
-
マルウェアチェック:ClamAV + rkhunter/Chkrootkit
-
脆弱性診断:Lynis
-
ネットワーク防御:nftables/ufw
-
ログ監視: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;
}
✅ この設定でできること
-
ClamAV のデーモン常駐+ウイルス定義自動更新
-
rkhunter / chkrootkit によるルートキットチェック
-
Lynis で脆弱性診断
-
auditd でシステムコール監査
-
ログ解析(logwatch / goaccess)
-
ファイアウォール(nftablesベース)
-
systemd timer で定期ClamAVスキャン
-
自動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;
}
🔹 ポイント
-
ClamTK でGUI操作が可能(デスクトップ向け)
-
notify-send を使ってスキャン完了をデスクトップ通知
-
ファイルスキャンや脆弱性診断は手動でもGUI操作で簡単に
-
他はサーバーと同様に、firewall・auditd・rkhunterでセキュリティ層を確保
-
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;
}
🔹 新しいポイント
-
Lynis監査を毎週自動実行
-
スキャン完了後に notify-send でデスクトップ通知
-
各ログはユーザーのホームディレクトリに保存
-
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;
}
🔹 この設定でできること
-
ClamAV: 毎日スキャン + GUI通知
-
Lynis: 毎週脆弱性診断 + GUI通知
-
rkhunter: 毎日ルートキットチェック + GUI通知
-
chkrootkit: 毎週ルートキットチェック + GUI通知
-
logwatch: 日次ログ解析
-
ファイアウォール有効
-
auditd でシステム監査
-
自動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"
🔹 ポイント
-
ClamAV, rkhunter, chkrootkit, Lynis をまとめて実行
-
各ログの最後の2行を抽出してGUI通知
-
systemd timer で毎日自動実行
💡 注意:
-
yourusername
を自分のユーザー名に置き換える -
/bin/full-security-scan.sh
にchmod +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
🔹 ポイント
-
notify-send で通知
-
ログファイルを
xdg-open
で開く(クリック式) -
select
で簡易メニュー表示(dmenu/rofiと組み合わせるとさらに便利) -
systemd timer で毎日自動実行
💡 注意:
-
/home/${USER}/bin/full-security-scan-gui.sh
にchmod +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"
🔹 ポイント
-
notify-send
でスキャン完了を通知 -
rofi -dmenu
で4つのログをポップアップ選択 -
選択したログを
xdg-open
で既定エディタで開く -
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
'';
};
};
🔹 ポイント
-
yad
でボタン式メニューを表示 -
各スキャンをワンクリックで再実行
-
「View Logs」からログを開くことも可能
-
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つのHTMLにまとめる
-
日付ごとにレポートを保存 → 過去の履歴も確認可能
-
xdg-open
でブラウザ表示 -
notify-send
で完了通知
💡 注意:
-
/home/yourusername/bin/full-security-scan-html.sh
に実行権限を付与 -
yourusername
を実際のユーザー名に置き換える -
GUIセッション必須
この構成で、完全自動+クリック操作+統合HTMLレポートで視覚的確認可能 な NixOS デスクトップセキュリティ環境が完成です。
もし希望なら、次のステップとして 過去レポートの履歴を簡単に一覧してブラウザで開けるダッシュボード機能 も作れます。
作りますか?