Ubuntu 24.04 minimizedで、常駐サービスをsystemdとQuadletで管理する構成を整理しました。軽量なOSに、監視、ログ、防御、監査、バックアップを追加するインフラ構築の案です。

ログ確認はjournalctl、自動起動と再起動はsystemctlにまとめます。

背景と設計の前提

コンテナをLinuxのサービスとして管理し、保守に必要な設定も初期構成に含めます。

Loki、Prometheus、mktxpはrootless、Exporter群はrootfulに分けます。関連するPodman Pods案も、GPU・ネットワーク・基盤をrootful、UI・開発をrootlessにする方針です。

ベース構成の方針

/opt/containersの中で共通資産、ビルド、compose、実行時マウント、systemd定義を分けます。バックアップと権限の対象を明確にするためです。

  /opt/containers/
├─ _shared/                # 共通資産 (certs, secrets, config)
├─ build/                  # 各appのDockerfile等
├─ compose/                # docker/podman-compose (rootful/rootless)
├─ runtime/                # 実行構成・マウント先
│  ├─ loki/
│  ├─ prometheus/
│  └─ ...
└─ systemd/
   ├─ rootless/
   └─ rootful/
  

Quadletを/home/ksh3/.config/containers/systemdに配置し、systemdのユーザーユニットとして動かします。

基本構成です。

  • OS: Ubuntu 24.04 (minimized)
  • 管理: systemd + Quadlet (/opt/containers/systemd/{rootless,rootful})
  • コンテナ: rootless(Loki, Prometheus, mktxp)+ rootful(Exporter 群)
  • ストレージ: /opt/containers/runtime 配下に用途別で整理

必須パッケージ(minimized 補完セット)

minimizedにない運用ツールを、用途ごとに追加します。

分類推奨パッケージ理由
基本運用sudo, less, vim, bash-completion, curl, wget操作・編集・確認用
監視・診断htop, iotop, iftop, ncdu, needrestart状況確認・再起動検出
システム管理ufw, fail2ban, chronyFirewall, SSH防御, 時刻同期
ユーティリティjq, yq, git設定やJSON/YAMLの整形
セキュリティ監査lynis, chkrootkit設定診断、rootkit検出
ウイルススキャンclamav, clamav-daemonファイル監査・定期スキャン

防御にはufwとfail2ban、定期監査にはlynisとchkrootkitを使います。

Firewall と防御

ufwで公開ポートを制限し、rootfulコンテナに必要なポートだけ許可する方針です。rootless側はslirp4netnsを使い、直接外部公開しない前提です。

  sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment "SSH"
sudo ufw allow 9090/tcp comment "Prometheus"
sudo ufw allow 3100/tcp comment "Loki"
sudo ufw allow 9633/tcp comment "smartctl exporter"
sudo ufw enable
sudo systemctl enable --now ufw
  

公開ポートを持つユニットを決め、対応するFirewallルールを管理します。

セキュリティ監査と整備

lynisは週次、chkrootkitは月次で実行する案です。

Lynis(システム全体の設定診断)

  sudo apt install lynis
sudo lynis audit system
  

週次実行用の/etc/cron.weekly/lynisです。

  /usr/sbin/lynis audit system --quiet --no-colors \
  --logfile /var/log/lynis-$(date +%F).log
  

Chkrootkit(月次で十分)

  sudo apt install chkrootkit
sudo chkrootkit
  

定期監査のログを保存し、後から状態の変化を比較します。

ウイルス・マルウェア対策

共有領域や取得ファイルをclamavとclamav-daemonでスキャンし、chkrootkitを侵入検出の補助に使います。

ClamAV(ファイルスキャン)

  sudo apt install clamav clamav-daemon
sudo systemctl enable --now clamav-freshclam
  

定期スキャン例

/etc/cron.weekly/clamav-scan:

  #!/bin/bash
LOG=/var/log/clamav/scan_$(date +%F).log
clamscan -r --bell -i /home /opt /srv > "$LOG"
  

Rootkit 検出の併用

  sudo chkrootkit
  

対象は/home、/opt、/srvです。/opt/containersの資産と、/srvのバックアップも含みます。

journalctlとsystemctlで管理

Quadletの状態確認はjournalctlとsystemctlに集めます。コンテナごとのpodman logsへ分散させない運用です。

操作コマンド例
追尾ログjournalctl --user -u loki.service -f
エラーのみjournalctl --user -u loki.service -p err..alert
このブート以降journalctl --user -u prometheus.service -b
Quadlet generator ログ確認journalctl --user -g 'generator|quadlet'
一覧確認systemctl --user list-units --type=service --state=running
監視モードwatch -n 2 'SYSTEMD_COLORS=1 systemctl --user list-units --type=service'

PodsではPod単位、Quadletではsystemdユニット単位でライフサイクルを揃えます。

compose・runとの比較

compose / runとQuadletの違いです。

機能旧来 (compose/run)Quadlet 化後
自動起動cron or compose restartWantedBy=default.target
再起動ポリシー手動設定[Service] Restart=always
ログ統合podman logsjournalctl -u
セキュリティCLI引数管理systemd sandbox 設定可能
管理方法podman start/stopsystemctl start/stop

自動起動、再起動、ログをLinuxのサービス管理にまとめられます。

journald 設定チューニング

journaldの保存容量も設定します。

/etc/systemd/journald.conf 例:

  SystemMaxUse=1G
SystemMaxFileSize=100M
RuntimeMaxUse=512M
Storage=persistent
Compress=yes
  

永続保存しつつ容量を制限し、ローテーションと圧縮はjournaldに任せます。このログに別のlogrotateは使いません。

バックアップ運用

再作成できる実行環境と、失えないデータ・共有資産を分けて保存します。

Podman volume バックアップ

  podman run --rm -v loki-data:/data -v /srv/backup:/backup alpine \
  sh -lc 'tar czf /backup/loki-data_$(date +%F_%H%M).tar.gz -C /data .'
  

systemd 構成 + _shared 資産バックアップ

  tar czf /srv/backup/containers_config_$(date +%F).tar.gz \
    -C /opt/containers systemd runtime/_shared
  

volumeのデータと、systemd定義・共有資産を別々に回収します。

運用の構成

運用は次の4つに分けます。

  1. journald — ログ管理の一元化
  2. ufw + fail2ban — 攻撃面防御
  3. clamav + chkrootkit — ファイルと侵入検知
  4. lynis — 設定監査(週次)

rootful/rootless、公開ポート、ログ、バックアップ対象を揃えた構成です。

今後の改善

  • rootless / rootfulのサービス名、公開ポート、バックアップ対象を表にする
  • cron.weeklyの監査とスキャンをsystemd timerへ移す
  • Quadletの名前とディレクトリで責務が分かるようにする