Proxmox VE Cluster Audit Trail Logging —

Proxmox VE Cluster คืออะไรและทำไมต้อง Audit

Proxmox Virtual Environment (VE) เป็น open source virtualization platform ที่รวม KVM hypervisor และ LXC containers ไว้ใน platform เดียว รองรับ high availability clustering, live migration, software-defined storage (Ceph, ZFS) และ backup/restore มี web-based management interface ที่ใช้งานง่าย
Proxmox VE Cluster คือการรวม Proxmox nodes หลายตัวเข้าด้วยกันเป็น cluster ทำให้จัดการ VMs และ containers จากจุดเดียว รองรับ HA (High Availability) ที่ migrate VMs อัตโนมัติเมื่อ node ล่ม และ distributed storage ด้วย Ceph
Audit Trail Logging สำคัญมากสำหรับ Proxmox cluster เพราะต้องรู้ว่าใครทำอะไร เมื่อไหร่ กับ VM/container ไหน สำหรับ security incident investigation, compliance requirements (SOC 2, ISO 27001, PCI DSS), change management tracking และ capacity planning
Proxmox เก็บ logs หลายที่ได้แก่ /var/log/pveproxy/ สำหรับ API access logs, /var/log/pve/tasks/ สำหรับ task logs, /var/log/syslog สำหรับ system events, /var/log/auth.log สำหรับ authentication events และ pve-firewall.log สำหรับ firewall events
ตั้งค่า Proxmox VE Cluster
สร้าง Proxmox cluster และตั้งค่าพื้นฐาน
=== สร้าง Proxmox VE Cluster ===
Node 1 (สร้าง cluster)
pvecm create my-cluster
Node 2,3 (join cluster)
pvecm add 192.168.1.10
ใส่ root password ของ node 1
ตรวจสอบ cluster status
pvecm status
pvecm nodes
=== ตั้งค่า HA ===
เปิด HA สำหรับ VM
ha-manager add vm:100 --state started --group ha-group1
ha-manager status
=== Storage Configuration ===
เพิ่ม Ceph storage
pveceph init --network 10.10.10.0/24
pveceph createmon
pveceph createosd /dev/sdb
pveceph createpool vm-pool
=== Network Configuration ===
/etc/network/interfaces
auto vmbr0
iface vmbr0 inet static
address 192.168.1.10/24
gateway 192.168.1.1
bridge-ports eno1
bridge-stp off
เนื้อหาเกี่ยวข้อง — แนะนำให้อ่าน ONNX Runtime Kubernetes Deployment
bridge-fd 0
auto vmbr1
iface vmbr1 inet static
address 10.10.10.10/24
bridge-ports eno2
bridge-stp off
bridge-fd 0
=== User and Permission Setup ===
สร้าง audit user
แนะนำเพิ่มเติม — คอร์สเทรด Forex ที่ iCafeForex
pveum useradd auditor@pve -comment "Audit User"
pveum passwd auditor@pve
สร้าง role
pveum roleadd AuditRole -privs "Sys.Audit, VM.Audit, Datastore.Audit, Pool.Audit"
Assign role
pveum aclmod / -user auditor@pve -role AuditRole
สร้าง API token สำหรับ monitoring
pveum user token add root@pam monitoring --privsep 0
เก็บ token ไว้ใช้กับ monitoring tools
=== Enable Detailed Logging ===
/etc/default/pveproxy
ALLOW_FROM="192.168.1.0/24"
DENY_FROM="all"
LOG_LEVEL=info
Restart pveproxy
systemctl restart pveproxy
ตรวจสอบ logs
journalctl -u pveproxy -f
tail -f /var/log/pveproxy/access.log
ระบบ Audit Trail Logging สำหรับ Proxmox
สร้างระบบเก็บ audit logs แบบครบถ้วน
Centralized Logging ด้วย ELK Stack
ส่ง Proxmox logs ไป ELK Stack
=== Filebeat Configuration สำหรับ Proxmox ===
เนื้อหาเกี่ยวข้อง — demand and supply analysis ppt
/etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/pveproxy/access.log
fields:
log_type: pve_access
fields_under_root: true
- type: log
enabled: true
paths:
- /var/log/syslog
fields:
log_type: pve_syslog
fields_under_root: true
multiline:
pattern: '^\w{3}\s+\d{1,2}\s+\d{2}:\d{2}:\d{2}'
negate: true
match: after
- type: log
enabled: true
paths:
- /var/log/auth.log
fields:
log_type: pve_auth
fields_under_root: true
- type: log
enabled: true
paths:
- /var/log/pve-firewall.log
fields:

log_type: pve_firewall
fields_under_root: true
output.elasticsearch:
hosts: ["http://elk-server:9200"]
แนะนำเพิ่มเติม — ดูสัญญาณเทรดที่ XM Signal
index: "proxmox-%{+yyyy.MM.dd}"
setup.kibana:
host: "http://elk-server:5601"
ติดตั้ง Filebeat บน Proxmox
apt-get install -y filebeat
systemctl enable filebeat
systemctl start filebeat
=== rsyslog สำหรับ centralized logging ===
/etc/rsyslog.d/50-proxmox-audit.conf
Template สำหรับ JSON output
template(name="proxmox-json" type="list") {
constant(value="{")
constant(value="\"timestamp\":\"")
property(name="timereported" dateFormat="rfc3339")
constant(value="\",\"hostname\":\"")
property(name="hostname")
เนื้อหาเกี่ยวข้อง — แนะนำให้อ่าน PagerDuty Incident Zero Downtime Deployment — วิธีตั้งค่าและใช้งานจริงพร้อมตั…
constant(value="\",\"severity\":\"")
property(name="syslogseverity-text")
constant(value="\",\"facility\":\"")
property(name="syslogfacility-text")
constant(value="\",\"program\":\"")
property(name="programname")
constant(value="\",\"message\":\"")
property(name="msg" format="jsonf")
constant(value="\"}\n")
}
# ส่งไป remote syslog server
*.* @@elk-server:514;proxmox-json
# เก็บ local copy
*.* /var/log/proxmox-audit.json;proxmox-json
Restart rsyslog
systemctl restart rsyslog
=== Docker Compose สำหรับ ELK Stack ===
docker-compose.yml
services:
elasticsearch:
image: elasticsearch:8.12.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
ports: ["9200:9200"]
volumes: ["es-data:/usr/share/elasticsearch/data"]
kibana:
image: kibana:8.12.0
ports: ["5601:5601"]
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
depends_on: [elasticsearch]
logstash:
image: logstash:8.12.0
ports: ["5044:5044", "514:514/tcp", "514:514/udp"]
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
depends_on: [elasticsearch]
volumes:
es-data:
=== Logstash Pipeline ===
logstash.conf
input {
beats { port => 5044 }
เนื้อหาเกี่ยวข้อง — low tension fuse switch คือ
syslog { port => 514 }
}
filter {
if [log_type] == "pve_access" {
grok {
match => { "message" => "%{IP:client_ip} - %{DATA:user} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request}\"" }
}
}
if [log_type] == "pve_auth" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:node} %{DATA:program}: %{GREEDYDATA:auth_message}" }
}
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "proxmox-%{+YYYY.MM.dd}"
}
}
สร้าง Audit Dashboard และ Alerts
Monitoring dashboard สำหรับ Proxmox audit
Compliance และ Log Retention Policies
นโยบายการเก็บรักษา logs และ compliance
#!/bin/bash
# log_retention.sh — Proxmox Log Retention and Compliance
set -euo pipefail
LOG_DIR="/var/log"
ARCHIVE_DIR="/backup/audit-logs"
RETENTION_DAYS=365 # SOC 2 requires 1 year minimum
COMPRESS_AFTER_DAYS=7
ELASTICSEARCH_URL="http://elk-server:9200"
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"; }
# 1. Archive logs ที่เก่ากว่า 7 วัน
log "Archiving old logs..."
mkdir -p "$ARCHIVE_DIR/$(date +%Y/%m)"
for logfile in \
"$LOG_DIR/pveproxy/access.log" \
"$LOG_DIR/auth.log" \
"$LOG_DIR/syslog" \
"$LOG_DIR/pve-firewall.log"; do
if [ -f "$logfile" ]; then
BASENAME=$(basename "$logfile")
ARCHIVE_NAME="_$(date +%Y%m%d_%H%M).gz"
# Compress and archive
gzip -c "$logfile" > "$ARCHIVE_DIR/$(date +%Y/%m)/$ARCHIVE_NAME"
log "Archived: $BASENAME -> $ARCHIVE_NAME"
fi
done
# 2. ลบ archives ที่เก่ากว่า retention period
log "Cleaning old archives (> $RETENTION_DAYS days)..."
find "$ARCHIVE_DIR" -name "*.gz" -mtime "+$RETENTION_DAYS" -delete
DELETED=$(find "$ARCHIVE_DIR" -name "*.gz" -mtime "+$RETENTION_DAYS" | wc -l)
log "Deleted $DELETED old archive files"
# 3. Rotate Elasticsearch indices
log "Managing Elasticsearch indices..."
# Delete indices older than retention period
CUTOFF_DATE=$(date -d "- days" +%Y.%m.%d)
curl -s -X DELETE "$ELASTICSEARCH_URL/proxmox-*-$(date -d "- days" +%Y)*" \
> /dev/null 2>&1 || true
# 4. Verify log integrity
log "Verifying log integrity..."
CHECKSUM_FILE="$ARCHIVE_DIR/checksums_$(date +%Y%m%d).sha256"
find "$ARCHIVE_DIR/$(date +%Y)" -name "*.gz" -newer "$ARCHIVE_DIR/.last_check" 2>/dev/null | \
while read -r file; do
sha256sum "$file" >> "$CHECKSUM_FILE"
done
touch "$ARCHIVE_DIR/.last_check"
log "Checksums updated: $CHECKSUM_FILE"
# 5. Compliance report
log "Generating compliance summary..."
TOTAL_ARCHIVES=$(find "$ARCHIVE_DIR" -name "*.gz" | wc -l)
OLDEST_ARCHIVE=$(find "$ARCHIVE_DIR" -name "*.gz" -printf '%T+ %p\n' 2>/dev/null | sort | head -1 | cut -d' ' -f1)
NEWEST_ARCHIVE=$(find "$ARCHIVE_DIR" -name "*.gz" -printf '%T+ %p\n' 2>/dev/null | sort -r | head -1 | cut -d' ' -f1)
TOTAL_SIZE=$(du -sh "$ARCHIVE_DIR" 2>/dev/null | cut -f1)
cat << EOF
=== Compliance Summary ===
Date: $(date '+%Y-%m-%d %H:%M')
Retention Policy: $RETENTION_DAYS days
Total Archives: $TOTAL_ARCHIVES files
Archive Size: $TOTAL_SIZE
Oldest Archive: $OLDEST_ARCHIVE
Newest Archive: $NEWEST_ARCHIVE
Standards Coverage:
SOC 2 (1 year retention): $([ "$RETENTION_DAYS" -ge 365 ] && echo "PASS" || echo "FAIL")
ISO 27001 (log protection): PASS (checksums verified)
PCI DSS (1 year online, archive): $([ "$RETENTION_DAYS" -ge 365 ] && echo "PASS" || echo "FAIL")
===========================
EOF
log "Log retention completed"
# Cron job: 0 2 * * * /opt/scripts/log_retention.sh >> /var/log/log_retention.log 2>&1
FAQ คำถามที่พบบ่อย
Q: Proxmox VE ฟรีจริงไหม?
A: Proxmox VE เป็น open source ใช้ฟรีได้โดยไม่มีข้อจำกัด feature มี Community Edition ที่ใช้ no-subscription repository สำหรับ updates Subscription plans เริ่มต้นที่ EUR 95/year/socket ให้ enterprise repository (stable updates), technical support, access to Proxmox Customer Portal สำหรับ production environments แนะนำซื้อ subscription เพื่อความมั่นใจใน stability
Q: Audit logs เก็บนานแค่ไหนถึงจะ comply?
A: ขึ้นอยู่กับ compliance framework SOC 2 ต้องเก็บอย่างน้อย 1 ปี PCI DSS ต้องเก็บ 1 ปี online + archive ISO 27001 ไม่กำหนดระยะเวลาแน่นอนแต่ต้อง appropriate HIPAA ต้องเก็บ 6 ปี GDPR ต้องเก็บเท่าที่จำเป็น (data minimization) แนะนำเก็บ 1 ปีเป็นขั้นต่ำ 3-7 ปีสำหรับ regulated industries
Q: Proxmox กับ VMware ต่างกันอย่างไร?
A: Proxmox เป็น open source ฟรี ใช้ KVM/QEMU hypervisor มี web UI ที่ใช้งานง่าย รองรับ LXC containers built-in storage ด้วย Ceph/ZFS VMware vSphere เป็น commercial product มี feature enterprise มากกว่า (vMotion, DRS, NSX) มี ecosystem ใหญ่กว่า แต่ค่า license สูงมาก (vSphere 8 Standard เริ่มที่ $580/CPU) สำหรับ SME และ home lab Proxmox คุ้มค่ากว่ามาก
Q: ELK Stack กิน resources มากไหม?
A: Elasticsearch ต้องการ RAM อย่างน้อย 4GB (แนะนำ 8-16GB สำหรับ production) สำหรับ Proxmox cluster เล็ก (3-5 nodes) ELK Stack แบบ single node พร้อม 8GB RAM และ 100GB SSD เพียงพอ สำหรับ cluster ใหญ่ควรใช้ dedicated ELK cluster ทางเลือกที่ lightweight กว่าคือ Grafana Loki ที่ใช้ resources น้อยกว่า Elasticsearch มาก เหมาะสำหรับ log aggregation





