Ubuntu最小構成でのQuadlet運用
Ubuntu 24.04 minimizedの常駐ノードをsystemdとQuadletで管理する設計です。インフラ構築の監視、Firewall、定期監査、ログ容量、バックアップ対象を整理しました。
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, chrony | Firewall, 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 restart | WantedBy=default.target |
| 再起動ポリシー | 手動設定 | [Service] Restart=always |
| ログ統合 | podman logs | journalctl -u |
| セキュリティ | CLI引数管理 | systemd sandbox 設定可能 |
| 管理方法 | podman start/stop | systemctl 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つに分けます。
journald— ログ管理の一元化ufw+fail2ban— 攻撃面防御clamav+chkrootkit— ファイルと侵入検知lynis— 設定監査(週次)
rootful/rootless、公開ポート、ログ、バックアップ対象を揃えた構成です。
今後の改善
- rootless / rootfulのサービス名、公開ポート、バックアップ対象を表にする
cron.weeklyの監査とスキャンをsystemd timerへ移す- Quadletの名前とディレクトリで責務が分かるようにする
