なるほど、つまりこういう状況ですね:
-
複数台の NixOSマシン がある
-
それぞれ個別にスキャンや管理をするのは面倒
-
1台のPC でまとめてセキュリティチェックや管理をしたい
-
かつ、各PCのセキュリティを守れる形にしたい
🔹 実現の考え方
-
集中管理PC(セキュリティマスター)
-
1台の管理PCを用意して、各NixOSマシンに対して監査・スキャンを集中実行
-
各マシンは SSH + sudo権限 を使ってスキャンコマンドをリモート実行
-
結果は管理PCに集約 → HTMLレポートや通知で確認
-
-
各マシンは最低限セキュリティを維持
-
ローカルでも ClamAV/rkhunter/Firewall を常時稼働
-
自動アップデートや auditd を有効
-
集中管理PCは「監査・レポート集約用」であり、攻撃防御は各マシンが担当
-
-
集中管理の具体例
-
リモートスキャンスクリプト(管理PCから実行)
#!/usr/bin/env bash
HOSTS=("nixos1" "nixos2" "nixos3")
USER="youruser"
REPORT_DIR="$HOME/security_reports"
mkdir -p "$REPORT_DIR"
DATE=$(date +"%Y-%m-%d")
for HOST in "${HOSTS[@]}"; do
echo "Scanning $HOST ..."
ssh $USER@$HOST "sudo clamscan -r /home --log=/tmp/clamav_scan.log; sudo rkhunter --check --quiet; sudo chkrootkit; sudo lynis audit system --quiet --logfile /tmp/lynis_audit.log"
scp $USER@$HOST:/tmp/clamav_scan.log $REPORT_DIR/clamav_$HOST_$DATE.log
scp $USER@$HOST:/tmp/rkhunter.log $REPORT_DIR/rkhunter_$HOST_$DATE.log
scp $USER@$HOST:/tmp/chkrootkit.log $REPORT_DIR/chkrootkit_$HOST_$DATE.log
scp $USER@$HOST:/tmp/lynis_audit.log $REPORT_DIR/lynis_$HOST_$DATE.log
done
-
これを管理PC上で実行すれば、複数台の結果を一括収集可能
-
HTML統合レポート化や通知も管理PC側で可能
🔹 ポイント
-
各マシンが最低限守る
-
Firewall・ClamAV・rkhunter・auditd は常時有効
-
-
管理PCで集中監査・レポート集約
-
SSH権限があることが前提
-
ネットワーク経由で安全にログを収集
-
-
HTMLレポートやGUI通知は管理PCだけで完結
-
各PCでGUI操作をする必要なし
-
💡 注意点:
-
SSHキーでパスワードレス認証を設定すると便利
-
sudo権限をリモートで使えるように
/etc/sudoers
を調整 -
ネットワーク経由でのリモートスキャンなので、ファイルサイズが大きい場合はログのみ転送
要するに、各PCは守り役、管理PCは監査・集約役 という構成が最も安全かつ効率的です。
希望なら、この集中管理用の NixOS configuration 例 + HTML統合レポート自動生成スクリプト も作れます。
作りますか?
了解です!では、複数台 NixOS を 1台の管理PCから集中監査 し、結果を HTML統合レポート にまとめる構成を作ります。
1️⃣ 管理PC側の NixOS configuration.nix
例
{ config, pkgs, ... }:
{
imports = [ ];
services.xserver.enable = true;
services.xserver.windowManager.xfce.enable = true;
environment.systemPackages = with pkgs; [
openssh
bash
libnotify
xdg-utils
rofi
yad
];
# systemd timer で自動監査
systemd.timers = {
"multi-nixos-scan.timer" = {
description = "Daily multi-NixOS security scan and HTML report";
wantedBy = [ "timers.target" ];
timerConfig = ''
OnCalendar=daily
Persistent=true
'';
serviceConfig = ''
ExecStart=/home/${config.users.users.yourusername.name}/bin/multi-nixos-scan.sh
'';
};
};
}
2️⃣ スクリプト例 multi-nixos-scan.sh
#!/usr/bin/env bash
USER="youruser"
HOSTS=("nixos1" "nixos2" "nixos3") # ホスト名またはIP
REPORT_DIR="$HOME/security_reports"
mkdir -p "$REPORT_DIR"
DATE=$(date +"%Y-%m-%d")
REPORT_FILE="$REPORT_DIR/security_report_$DATE.html"
# HTMLヘッダー
{
echo "<html><head><title>Multi-NixOS Security Report $DATE</title></head><body>"
echo "<h1>Multi-NixOS Security Report $DATE</h1>"
} > "$REPORT_FILE"
# 各ホストをスキャン
for HOST in "${HOSTS[@]}"; do
echo "<h2>$HOST</h2>" >> "$REPORT_FILE"
echo "<pre>" >> "$REPORT_FILE"
# リモートスキャン実行 & ログ収集
ssh $USER@$HOST "
sudo clamscan -r /home --log=/tmp/clamav_scan.log;
sudo rkhunter --check --quiet;
sudo chkrootkit;
sudo lynis audit system --quiet --logfile /tmp/lynis_audit.log
"
scp $USER@$HOST:/tmp/clamav_scan.log $REPORT_DIR/clamav_$HOST_$DATE.log
scp $USER@$HOST:/tmp/rkhunter.log $REPORT_DIR/rkhunter_$HOST_$DATE.log
scp $USER@$HOST:/tmp/chkrootkit.log $REPORT_DIR/chkrootkit_$HOST_$DATE.log
scp $USER@$HOST:/tmp/lynis_audit.log $REPORT_DIR/lynis_$HOST_$DATE.log
# HTMLにまとめる
for LOG in clamav_$HOST_$DATE.log rkhunter_$HOST_$DATE.log chkrootkit_$HOST_$DATE.log lynis_$HOST_$DATE.log; do
echo "<b>$LOG</b>" >> "$REPORT_FILE"
echo "<pre>" >> "$REPORT_FILE"
cat "$REPORT_DIR/$LOG" >> "$REPORT_FILE"
echo "</pre>" >> "$REPORT_FILE"
done
echo "</pre>" >> "$REPORT_FILE"
done
echo "</body></html>" >> "$REPORT_FILE"
# ブラウザで表示
xdg-open "$REPORT_FILE"
# 通知
notify-send "Multi-NixOS Security Scan Completed" "Report: $REPORT_FILE"
🔹 ポイント
-
各NixOSマシンに SSH + sudo 権限 が必要
-
ローカルでは firewall / ClamAV / rkhunter / auditd を常時有効にして安全維持
-
管理PCで スキャン・ログ収集・HTML統合レポート作成 を一括実行
-
xdg-open
でブラウザ表示、notify-send
で通知
💡 注意:
-
chmod +x multi-nixos-scan.sh
を付与 -
yourusername
を管理PCのユーザー名に置き換え -
各ホストで SSH キー認証を設定すると自動化がスムーズ
-
大量データの場合はログのみ転送を推奨
この構成で、複数台のNixOSを1台の管理PCからまとめて監査し、HTMLレポートで一目で確認可能 になります。
希望なら、さらに GUIでボタン式操作して「個別PCを再スキャン」「ログを直接開く」 機能も追加できます。
追加しますか?