KI-Agent-Server absichern: Sandboxing, Firewall und Monitoring
KI-Agenten führen beliebige Aktionen aus, verbrauchen unvorhersehbare Ressourcen und verarbeiten nicht vertrauenswürdige Eingaben. Diese Anleitung ordnet jede Bedrohung einer konkreten Linux-Kontrolle mit getesteten Befehlen zu.
KI-Agenten sind keine gewöhnlichen Dienste. Ein Webserver verarbeitet vorhersehbare HTTP-Anfragen. Ein KI-Agent führt beliebige Tool-Aufrufe aus, startet Unterprozesse, sendet ausgehende API-Anfragen und verbraucht Ressourcen in unvorhersehbaren Spitzen. Gelingt eine Prompt Injection, wird der Agent zum Angreifer mit den Rechten, die Sie ihm gegeben haben.
Diese Anleitung behandelt jeden KI-Agenten als nicht vertrauenswürdigen Code. Jeder Abschnitt beginnt mit einer konkreten Bedrohung und ordnet ihr eine Linux-Kontrolle zu, die Sie überprüfen können. Die Befehle funktionieren auf jedem VPS mit Debian 12 oder Ubuntu 22.04+, mit jedem Agent-Framework: OpenClaw, Claude Code, n8n, LangChain, CrewAI oder eigenen Setups.
Voraussetzungen: Ein VPS mit Root-Zugang, grundlegende Linux- und SSH-Kenntnisse (VPS-Sicherheitsgrundlagen behandelt die Basis) und mindestens ein KI-Agent, den Sie absichern möchten. Diese Anleitung setzt voraus, dass Sie die initiale Serverhärtung bereits abgeschlossen haben (SSH-Härtung).
Was macht KI-Agenten zu einer besonderen Sicherheitsbedrohung?
Traditionelle Dienste haben einen begrenzten Satz an Verhaltensweisen. Ein Nginx-Prozess liefert Dateien aus und leitet Anfragen weiter. Das Verhalten eines KI-Agenten hängt von seiner Eingabe ab, die Sie nicht kontrollieren. Drei Eigenschaften unterscheiden Agenten von allem anderen auf Ihrem Server:
- Sie führen beliebige Aktionen aus. Agenten mit Tool-Calling führen Shell-Befehle aus, schreiben Dateien und senden HTTP-Anfragen auf Basis der LLM-Ausgabe.
- Sie verbrauchen unvorhersehbare Ressourcen. Eine Reasoning-Schleife kann die CPU minutenlang auf 100 % treiben. Ein außer Kontrolle geratener Agent kann API-Tokens in Sekunden verbrauchen.
- Sie verarbeiten nicht vertrauenswürdige Eingaben. Der gesamte Sinn eines Agenten ist es, natürliche Sprache entgegenzunehmen und darauf zu reagieren.
| Bedrohung | Angriffsvektor | Auswirkung | Kontrolle |
|---|---|---|---|
| Shell-Befehlsausführung | Prompt Injection über Benutzereingabe oder Tool-Ausgabe | Vollständige Systemkompromittierung | Benutzerisolierung, Container-Sandbox |
| Datenexfiltration | Agent sendet Secrets per HTTP/DNS an Angreifer-Domain | Zugangsdaten-Diebstahl, Datenleck | Egress-Firewall, DNS-Filterung |
| Ressourcenerschöpfung | Endlose Reasoning-Schleife oder rekursive Tool-Aufrufe | Serverabsturz, andere Dienste betroffen | cgroup-CPU-/Speicherlimits |
| Zugangsdaten-Leak | Agent loggt oder speichert API-Keys aus der Umgebung | API-Key-Diebstahl, Lateral Movement | Secrets-Injektion, Umgebungsisolierung |
| Lateral Movement | Kompromittierter Agent greift auf andere Dienste über | Vollständige Infrastrukturkompromittierung | Netzwerksegmentierung, Least Privilege |
Wie isoliere ich einen KI-Agenten mit einem dedizierten Linux-Benutzer?
Erstellen Sie für jeden Agenten einen dedizierten Systembenutzer ohne Login-Shell, ohne sudo-Zugang und mit eingeschränktem Home-Verzeichnis. Das ist die einfachste Kontrolle mit der größten Wirkung. Wird ein Agent kompromittiert, erbt der Angreifer nur die Berechtigungen dieses Benutzers, nicht Root.
sudo useradd --system --create-home --shell /usr/sbin/nologin agent-worker
Sperren Sie das Home-Verzeichnis, damit andere Benutzer die Dateien des Agenten nicht lesen können:
sudo chmod 750 /home/agent-worker
Überprüfen Sie, ob der Benutzer existiert und die korrekte Shell hat:
getent passwd agent-worker
Die Ausgabe sollte so aussehen:
agent-worker:x:998:998::/home/agent-worker:/usr/sbin/nologin
Beachten Sie: Die Shell ist /usr/sbin/nologin. Das bedeutet, niemand kann sich per SSH als dieser Benutzer anmelden oder eine interaktive Sitzung öffnen. Der Agent-Prozess läuft als dieser Benutzer über systemd, nicht über Login.
Falls Ihr Agent temporäre Dateien schreiben muss, erstellen Sie ein dediziertes Verzeichnis:
sudo mkdir -p /home/agent-worker/tmp
sudo chown agent-worker:agent-worker /home/agent-worker/tmp
sudo chmod 700 /home/agent-worker/tmp
Überprüfen Sie die Berechtigungen:
ls -la /home/agent-worker/
Was das bewirkt: Selbst wenn ein Angreifer durch Prompt Injection Code ausführen kann, ist er auf /home/agent-worker beschränkt, ohne Zugriff auf Dateien anderer Benutzer, ohne Root-Eskalation und ohne Zugriff auf Systembinaries.
Wie sandboxe ich einen KI-Agenten in einem Docker-Container?
Wenn Sie Ihren Agenten in einem Docker-Container ausführen, erhalten Sie eine zweite Isolierungsebene. Der Container hat ein eigenes Dateisystem, einen eigenen Prozess-Namespace und einen eigenen Netzwerk-Stack. In Kombination mit Sicherheitsflags begrenzt er, was ein kompromittierter Agent tun kann, selbst bei Code-Ausführung.
Welche Docker-Sicherheitsflags sollte ich für KI-Agenten verwenden?
Nutzen Sie jede Einschränkung, die Ihr Agent tolerieren kann. Beginnen Sie maximal eingeschränkt und lockern Sie nur das, was nicht funktioniert. Hier ist ein produktionsreifer docker run-Befehl für einen KI-Agenten:
docker run -d \
--name ai-agent \
--user 1000:1000 \
--read-only \
--tmpfs /tmp:size=100M,noexec,nosuid \
--cap-drop ALL \
--security-opt no-new-privileges:true \
--security-opt seccomp=/etc/docker/seccomp-agent.json \
--memory 2g \
--memory-swap 2g \
--cpus 1.5 \
--pids-limit 100 \
--network agent-net \
--restart unless-stopped \
--env-file /etc/agent/env \
your-agent-image:latest
Was jedes Flag bewirkt:
| Flag | Zweck | Warum es für Agenten wichtig ist |
|---|---|---|
--user 1000:1000 |
Als Nicht-Root im Container ausführen | Verhindert Container-Breakout über Root-Exploits |
--read-only |
Root-Dateisystem ist schreibgeschützt | Blockiert Malware-Installation, Konfigurationsmanipulation |
--tmpfs /tmp:size=100M,noexec,nosuid |
Beschreibbares Temp ohne Ausführungsrechte | Agent kann temporäre Dateien schreiben, aber keine Binaries aus /tmp ausführen |
--cap-drop ALL |
Alle Linux-Capabilities entfernen | Kein CAP_NET_RAW (Paket-Sniffing), kein CAP_SYS_ADMIN (Mount), nichts |
--security-opt no-new-privileges:true |
Privilege Escalation via setuid verhindern | Blockiert Root-Erlangung durch setuid-Binaries bei kompromittiertem Agenten |
--pids-limit 100 |
Prozessanzahl begrenzen | Stoppt Fork-Bombs eines außer Kontrolle geratenen Agenten |
--memory 2g / --memory-swap 2g |
Harte Speicherobergrenze, kein Swap | Verhindert OOM-Killing anderer Dienste |
--cpus 1.5 |
CPU-Limit | Agent kann andere Dienste nicht aushungern |
Überprüfen Sie, ob der Container mit den korrekten Sicherheitseinstellungen läuft:
docker inspect ai-agent --format '{{.HostConfig.SecurityOpt}}'
Erwartete Ausgabe:
[no-new-privileges:true seccomp=/etc/docker/seccomp-agent.json]
Prüfen Sie, ob er als Nicht-Root läuft:
docker exec ai-agent whoami
Dies sollte den Nicht-Root-Benutzer zurückgeben, nicht root.
Benutzerdefiniertes Seccomp-Profil für KI-Agenten
Das Standard-Docker-Seccomp-Profil blockiert etwa 44 gefährliche Syscalls. Für KI-Agenten können Sie dies weiter verschärfen. Erstellen Sie /etc/docker/seccomp-agent.json:
{
"defaultAction": "SCMP_ACT_ERRNO",
"defaultErrnoRet": 1,
"archMap": [
{
"architecture": "SCMP_ARCH_X86_64",
"subArchitectures": ["SCMP_ARCH_X86", "SCMP_ARCH_X32"]
}
],
"syscalls": [
{
"names": [
"read", "write", "close", "fstat", "lseek", "mmap", "mprotect",
"munmap", "brk", "rt_sigaction", "rt_sigprocmask", "ioctl",
"access", "pipe", "select", "sched_yield", "mremap", "msync",
"mincore", "madvise", "dup", "dup2", "nanosleep", "getpid",
"socket", "connect", "sendto", "recvfrom", "sendmsg", "recvmsg",
"bind", "listen", "accept", "getsockname", "getpeername",
"setsockopt", "getsockopt", "clone", "execve", "exit",
"wait4", "kill", "uname", "fcntl", "flock", "fsync",
"fdatasync", "truncate", "ftruncate", "getdents", "getcwd",
"chdir", "openat", "newfstatat", "readlinkat", "fchmodat",
"set_tid_address", "exit_group", "epoll_wait", "epoll_ctl",
"tgkill", "futex", "set_robust_list", "get_robust_list",
"epoll_create1", "pipe2", "clock_gettime", "clock_nanosleep",
"prlimit64", "getrandom", "memfd_create", "statx",
"rseq", "close_range", "poll", "getuid", "getgid",
"geteuid", "getegid", "arch_prctl", "sigaltstack",
"rt_sigreturn", "accept4", "pread64", "pwrite64",
"writev", "readv", "sched_getaffinity"
],
"action": "SCMP_ACT_ALLOW"
}
]
}
Dieses Profil erlaubt nur die Syscalls, die ein typischer Python-/Node.js-Agent-Prozess benötigt. Alles andere, einschließlich mount, ptrace, reboot, kexec_load und init_module, gibt einen Berechtigungsfehler zurück.
Setzen Sie die richtigen Berechtigungen für das Profil:
sudo chmod 644 /etc/docker/seccomp-agent.json
sudo chown root:root /etc/docker/seccomp-agent.json
Testen Sie, ob der Container mit dem benutzerdefinierten Profil startet:
docker run --rm --security-opt seccomp=/etc/docker/seccomp-agent.json alpine echo "seccomp works"
Wenn Sie seccomp works sehen, ist das Profil gültig.
Für weitergehende Docker-Härtung einschließlich Rootless-Modus siehe Docker Security Hardening. Für das Docker/UFW-Interaktionsproblem siehe Docker UFW Fix.
Wie blockiere ich den Internetzugang eines KI-Agenten?
Bedrohung: Ein kompromittierter Agent exfiltriert Secrets durch ausgehende HTTP-Anfragen an einen vom Angreifer kontrollierten Server oder kodiert Daten in DNS-Anfragen. Standard-UFW erlaubt allen ausgehenden Verkehr.
Setzen Sie eine Default-Deny-Richtlinie für ausgehenden Verkehr und geben Sie nur die Endpunkte frei, die Ihr Agent benötigt:
sudo ufw default deny outgoing
sudo ufw default deny incoming
Erlauben Sie notwendigen ausgehenden Verkehr:
# DNS resolution (required for all outbound)
sudo ufw allow out 53/udp
# Allow outbound HTTPS to reach AI provider APIs
sudo ufw allow out 443/tcp
# Allow outbound HTTP for package updates only
sudo ufw allow out 80/tcp
Erlauben Sie eingehenden SSH-Zugang (damit Sie sich nicht aussperren):
sudo ufw allow in 22/tcp
Aktivieren Sie die Firewall:
sudo ufw enable
Überprüfen Sie die Regeln:
sudo ufw status verbose
Die Ausgabe zeigt oben Default: deny (incoming), deny (outgoing) sehen, gefolgt von Ihren Erlaubnisregeln.
Wie beschränke ich den Zugang auf die API-Endpunkte, die mein Agent benötigt?
Die obigen Regeln erlauben weiterhin ausgehendes HTTPS zu jedem Ziel. Für strengere Kontrolle beschränken Sie den ausgehenden Verkehr auf bestimmte IP-Bereiche. Das erfordert iptables, da UFW keine Zielfilterung nach Domain unterstützt.
Lösen Sie zunächst den API-Endpunkt Ihres KI-Anbieters auf:
dig +short api.anthropic.com
dig +short api.openai.com
Erstellen Sie dann iptables-Regeln für diese IPs. Erstellen Sie /etc/iptables/agent-egress.rules:
#!/bin/bash
# Agent egress whitelist - update IPs when providers change
# Anthropic API (check current IPs with: dig +short api.anthropic.com)
ANTHROPIC_IPS="104.18.0.0/16"
# Drop all outbound from agent user except whitelisted destinations
iptables -A OUTPUT -m owner --uid-owner agent-worker -d $ANTHROPIC_IPS -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner agent-worker -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner agent-worker -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner agent-worker -j DROP
sudo chmod 700 /etc/iptables/agent-egress.rules
sudo bash /etc/iptables/agent-egress.rules
Überprüfen Sie, ob der Agent-Benutzer keine beliebigen Hosts erreichen kann:
sudo -u agent-worker curl -s --max-time 5 https://example.com && echo "FAIL: egress not blocked" || echo "OK: egress blocked"
Die erwartete Ausgabe ist OK: egress blocked.
Hinweis zur DNS-Exfiltration: Die obigen Regeln erlauben DNS auf Port 53. Ein erfahrener Angreifer kann Daten in DNS-Anfragen kodieren und Secrets als Subdomains senden (z. B. sk-ant-api-key.attacker.com). Um diese Lücke zu schließen, richten Sie den DNS des Agenten auf einen lokalen Resolver wie unbound ein, der mit einer Response Policy Zone (RPZ) konfiguriert ist und Anfragen an nicht freigegebene Domains blockiert.
Installieren und konfigurieren Sie einen lokalen Resolver:
sudo apt install -y unbound
Bearbeiten Sie /etc/unbound/unbound.conf.d/agent-dns.conf:
server:
interface: 127.0.0.1
access-control: 127.0.0.0/8 allow
# Only allow resolution of specific domains
local-zone: "." deny
local-zone: "anthropic.com." transparent
local-zone: "openai.com." transparent
local-zone: "ubuntu.com." transparent
local-zone: "debian.org." transparent
sudo systemctl enable --now unbound
sudo systemctl status unbound
Konfigurieren Sie dann den Container oder systemd-Dienst Ihres Agenten so, dass er 127.0.0.1 als DNS-Resolver verwendet statt den Systemstandard. In Docker fügen Sie --dns 127.0.0.1 zu Ihrem docker run-Befehl hinzu.
Wie begrenze ich die Rate von KI-Agent-API-Endpunkten?
Bedrohung: Ein exponierter Agent-API-Endpunkt wird von Bots bombardiert oder durch automatisierte Prompt-Injection-Versuche missbraucht. Ohne Rate Limiting löst jede Anfrage teure LLM-API-Aufrufe aus.
Wenn Sie Ihren Agenten über Nginx exponieren, fügen Sie Rate Limiting auf der Reverse-Proxy-Ebene hinzu. Ergänzen Sie Ihre Nginx-Konfiguration:
http {
# 10 requests per second per IP for agent endpoints
limit_req_zone $binary_remote_addr zone=agent_api:10m rate=10r/s;
# Stricter limit for prompt submission endpoints
limit_req_zone $binary_remote_addr zone=agent_prompt:10m rate=2r/s;
server {
listen 443 ssl;
server_name agent.example.com;
location /api/agent/ {
limit_req zone=agent_api burst=20 nodelay;
limit_req_status 429;
proxy_pass http://127.0.0.1:8080;
}
location /api/agent/prompt {
limit_req zone=agent_prompt burst=5 nodelay;
limit_req_status 429;
proxy_pass http://127.0.0.1:8080;
}
}
}
Testen Sie die Konfiguration:
sudo nginx -t && sudo systemctl reload nginx
Überprüfen Sie, ob das Rate Limiting aktiv ist, indem Sie schnelle Anfragen senden:
for i in $(seq 1 30); do curl -s -o /dev/null -w "%{http_code}\n" https://agent.example.com/api/agent/; done
Die Ausgabe zeigt 200-Antworten sehen, gefolgt von 429-Antworten, sobald das Limit erreicht ist.
Wie begrenze ich CPU- und Speicherverbrauch eines KI-Agenten?
Bedrohung: Eine Reasoning-Schleife oder ein rekursiver Tool-Aufruf treibt die CPU minutenlang auf 100 %. Ohne Limits hungert der Agent SSH, Monitoring und andere Dienste aus. Auf einem Shared VPS kann dies Provider-Throttling oder eine automatische Sperrung auslösen.
Docker-Ressourcenlimits
Wenn Ihr Agent in Docker läuft, übernehmen die Flags --memory und --cpus aus dem Container-Abschnitt oben diese Aufgabe. Überprüfen Sie, ob die Limits durchgesetzt werden:
docker stats ai-agent --no-stream
Prüfen Sie, dass MEM USAGE unter MEM LIMIT bleibt und CPU % unter Ihren zugewiesenen Kernen.
Systemd-cgroup-Limits für nicht containerisierte Agenten
Wenn Ihr Agent direkt auf dem Host läuft (nicht in Docker), verwenden Sie systemd zur Durchsetzung von cgroup-v2-Limits. Erstellen Sie einen systemd-Dienst mit Ressourcenkontrollen:
sudo systemctl edit --force --full ai-agent.service
[Unit]
Description=AI Agent Service
After=network.target
[Service]
Type=simple
User=agent-worker
Group=agent-worker
WorkingDirectory=/home/agent-worker
ExecStart=/home/agent-worker/run-agent.sh
Restart=on-failure
RestartSec=10
# Resource limits
MemoryMax=2G
MemoryHigh=1536M
CPUQuota=150%
TasksMax=100
# Security hardening
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=tmpfs
PrivateTmp=true
ReadWritePaths=/home/agent-worker/data
# Secrets
EnvironmentFile=/etc/agent/env
[Install]
WantedBy=multi-user.target
MemoryMax=2G ist eine harte Obergrenze. Der OOM-Killer beendet den Agenten, wenn er diesen Wert überschreitet. MemoryHigh=1536M ist ein weiches Limit. Der Kernel fordert Speicher über diesem Schwellenwert aggressiv zurück und verlangsamt den Agenten, bevor er die harte Grenze erreicht. CPUQuota=150% erlaubt 1,5 CPU-Kerne. TasksMax=100 verhindert Fork-Bombs.
Aktivieren und starten Sie den Dienst:
sudo systemctl enable --now ai-agent.service
enable sorgt dafür, dass er Neustarts übersteht. --now startet ihn sofort.
Überprüfen Sie, ob der Dienst läuft und die Limits angewendet werden:
sudo systemctl status ai-agent.service
Prüfen Sie die cgroup-Limits:
systemctl show ai-agent.service | grep -E "(MemoryMax|CPUQuota|TasksMax)"
Erwartete Ausgabe:
MemoryMax=2147483648
CPUQuota=150%
TasksMax=100
Wie verwalte ich Secrets für KI-Agenten ohne Leaks?
Bedrohung: Ein Agent loggt seine Umgebungsvariablen (viele Frameworks tun dies im Debug-Modus), nimmt API-Keys in den LLM-Kontext auf oder schreibt Zugangsdaten in eine temporäre Datei. Ein Angreifer mit Lesezugriff auf den Speicher oder die Logs des Agenten erhält jedes Secret.
Speichern Sie Secrets niemals in der Konfigurationsdatei des Agenten, im Dockerfile oder in Kommandozeilenargumenten. Verwenden Sie eine Environment-Datei mit eingeschränkten Berechtigungen.
Erstellen Sie die Secrets-Datei:
sudo mkdir -p /etc/agent
sudo touch /etc/agent/env
sudo chmod 600 /etc/agent/env
sudo chown root:root /etc/agent/env
Fügen Sie Ihre Secrets hinzu:
sudo tee /etc/agent/env > /dev/null << 'EOF'
ANTHROPIC_API_KEY=sk-ant-your-key-here
AGENT_DB_PASSWORD=replace-with-generated-password
EOF
Generieren Sie starke Passwörter statt sie zu erfinden:
openssl rand -base64 32
Der systemd-Dienst referenziert diese Datei mit EnvironmentFile=/etc/agent/env. Der Agent-Prozess empfängt die Variablen, kann die Datei selbst aber nicht lesen (gehört Root, Modus 600). Systemd liest die Datei und übergibt die Variablen an den Prozess.
Überprüfen Sie die Dateiberechtigungen:
ls -la /etc/agent/env
Erwartet: -rw------- 1 root root. Nur Root kann sie lesen.
Rotation: Wenn Sie ein Secret rotieren, aktualisieren Sie /etc/agent/env und starten den Dienst neu:
sudo systemctl restart ai-agent.service
Der Agent übernimmt die neuen Werte ohne Änderungen an Konfigurationsdateien.
Wie überwache ich KI-Agent-Aktivität auf einem Linux-Server?
Bedrohung: Ein kompromittierter oder fehlerhafter Agent läuft lautlos. Ohne Monitoring entdecken Sie das Problem erst, wenn die API-Rechnung kommt oder Ihr Server wegen Missbrauchs gemeldet wird.
Echtzeit-Ressourcenüberwachung
Beobachten Sie die Ressourcennutzung live:
journalctl -u ai-agent.service -f
Dies streamt stdout/stderr des Agenten in Echtzeit. Drücken Sie Ctrl+C zum Beenden.
Für Docker-Container:
docker logs -f ai-agent
Überwachen Sie CPU und Speicher in Echtzeit:
docker stats ai-agent
Welche auditd-Regeln sollte ich für KI-Agent-Prozesse setzen?
Installieren Sie auditd:
sudo apt update && sudo apt install -y auditd
Erstellen Sie agentspezifische Audit-Regeln. Fügen Sie diese in /etc/audit/rules.d/agent.rules ein:
# Monitor all commands executed by the agent user
-a exit,always -F arch=b64 -S execve -F uid=998 -k agent-exec
# Monitor file access in sensitive directories
-a exit,always -F arch=b64 -S openat -F dir=/etc -F uid=998 -k agent-etc-access
# Monitor network connections by agent user
-a exit,always -F arch=b64 -S connect -F uid=998 -k agent-network
# Monitor file permission changes by agent user
-a exit,always -F arch=b64 -S chmod,fchmod,fchmodat -F uid=998 -k agent-chmod
Ersetzen Sie uid=998 durch die tatsächliche UID Ihres Agent-Benutzers. Ermitteln Sie sie mit:
id -u agent-worker
Laden Sie die neuen Regeln:
sudo augenrules --load
sudo systemctl enable --now auditd
Überprüfen Sie, ob die Regeln aktiv sind:
sudo auditctl -l | grep agent
Die Ausgabe zeigt Ihre vier Regeln aufgelistet sehen.
Suchen Sie nach Agent-Ausführungsereignissen:
sudo ausearch -k agent-exec --start recent
Automatische Alarmierung
Richten Sie für den Produktionsbetrieb einen einfachen Watchdog ein, der bei hohem Ressourcenverbrauch alarmiert. Erstellen Sie /usr/local/bin/agent-watchdog.sh:
#!/bin/bash
# Alert if agent container exceeds 90% memory
USAGE=$(docker stats ai-agent --no-stream --format "{{.MemPerc}}" | tr -d '%')
THRESHOLD=90
if (( $(echo "$USAGE > $THRESHOLD" | bc -l) )); then
logger -t agent-watchdog "ALERT: ai-agent memory at ${USAGE}%"
fi
sudo chmod 755 /usr/local/bin/agent-watchdog.sh
Führen Sie ihn jede Minute per Cron oder systemd-Timer aus. Die Alarme erscheinen im Syslog, das Sie an Ihren Monitoring-Stack weiterleiten können.
Wie halte ich KI-Agent-Software sicher aktuell?
Bedrohung: Ungepatchte Agent-Software enthält bekannte Schwachstellen. Aber ein Update während einer laufenden Sitzung kann den Zustand beschädigen oder laufende Workflows unterbrechen.
Für Docker-basierte Agenten ist der Update-Prozess atomar:
# Pull the new image
docker pull your-agent-image:latest
# Stop the old container
docker stop ai-agent
# Remove the old container
docker rm ai-agent
# Start with the same flags (use the docker run command from above)
docker run -d \
--name ai-agent \
# ... same flags as before ...
your-agent-image:latest
Für nicht containerisierte Agenten:
# Check for updates to the agent
sudo systemctl stop ai-agent.service
# Update the agent (varies by framework)
# pip install --upgrade agent-framework
# npm update -g agent-tool
# Restart
sudo systemctl start ai-agent.service
# Verify it is running
sudo systemctl status ai-agent.service
Produktionstipp: Betreiben Sie zwei Agent-Instanzen hinter einem Load Balancer. Aktualisieren Sie eine nach der anderen. Wenn die aktualisierte Instanz die Health Checks nicht besteht, kehren Sie zur vorherigen Version zurück.
Halten Sie das Host-Betriebssystem separat gepatcht:
sudo apt update && sudo apt upgrade -y
Aktivieren Sie automatische Sicherheitsupdates:
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Vorher und nachher: Was ein Angreifer sieht
Auf einem nicht gehärteten Server, auf dem der Agent als Root ohne Container und ohne Firewall läuft:
- Voller Dateisystemzugriff:
/etc/shadow, SSH-Keys, Daten anderer Benutzer lesen - Uneingeschränkter ausgehender Verkehr: Daten an jedes Ziel exfiltrieren
- Alle Syscalls verfügbar: Dateisysteme mounten, Kernelmodule laden, Netzwerkverkehr mitlesen
- Keine Ressourcenlimits: Server mit Fork-Bomb oder Memory-Leak zum Absturz bringen
- Dauerhafter Zugang: Backdoor installieren, SSH-Keys hinzufügen, neue Benutzer anlegen
Nach Anwendung aller Kontrollen aus dieser Anleitung:
- Eingesperrt in
/home/agent-workerohne Zugriff auf Systemdateien - Ausgehendes HTTPS nur zu freigegebenen API-Endpunkten
- ~80 Syscalls verfügbar (statt 300+), kein mount/ptrace/reboot
- Harte Obergrenze von 2 GB RAM und 1,5 CPU-Kernen, 100-Prozesse-Limit
- Schreibgeschütztes Dateisystem, keine Möglichkeit Software zu installieren oder Änderungen zu persistieren
- Jeder Befehl wird von auditd mit durchsuchbarem Audit-Trail protokolliert
Der Agent funktioniert weiterhin. Er kann LLM-APIs aufrufen, Eingaben verarbeiten und Ausgaben zurückgeben. Aber ein kompromittierter Agent kann seine Box nicht verlassen.
Etwas hat nicht funktioniert?
| Symptom | Wahrscheinliche Ursache | Lösung |
|---|---|---|
| Container beendet sich sofort | Seccomp-Profil zu restriktiv | Temporär mit --security-opt seccomp=unconfined starten, dmesg auf blockierte Syscalls prüfen, diese zum Profil hinzufügen |
| Agent kann API nicht erreichen | Egress-Firewall blockiert ausgehenden Verkehr | sudo ufw status prüfen, Ziel-IP verifizieren |
| Agent wird durch OOM gekillt | Speicherlimit zu niedrig | MemoryMax oder --memory erhöhen, tatsächlichen Spitzenverbrauch mit docker stats prüfen |
auditd protokolliert nicht |
Regeln nicht geladen oder falsche UID | sudo auditctl -l zur Überprüfung ausführen, UID des Agent-Benutzers prüfen |
429-Fehler von Nginx |
Rate Limit zu streng | burst-Wert erhöhen, prüfen ob legitime Verkehrsspitzen erwartet werden |
| Agent kann keine temporären Dateien schreiben | --read-only ohne --tmpfs |
--tmpfs /tmp:size=100M zum Docker-Run-Befehl hinzufügen |
Prüfen Sie zuerst die Agent-Logs:
# Systemd service
journalctl -u ai-agent.service -n 50 --no-pager
# Docker container
docker logs --tail 50 ai-agent
Prüfen Sie die Audit-Logs auf blockierte Aktionen:
sudo ausearch -k agent-exec --start today -i
FAQ
Kann ich KI-Agenten sicher als Root ausführen?
Nein. Agenten als Root auszuführen bedeutet, dass jede Prompt Injection dem Angreifer volle Systemkontrolle gibt. Es gibt keine kompensierende Kontrolle, die das Ausführen als Root akzeptabel macht. Verwenden Sie immer einen dedizierten Nicht-Root-Benutzer.
Brauche ich Docker, um einen KI-Agenten abzusichern?
Nein. Linux-Benutzerisolierung, systemd-Sicherheitsdirektiven (ProtectSystem, NoNewPrivileges, PrivateTmp) und cgroup-Limits bieten starke Isolierung ohne Docker. Docker fügt eine Container-Grenze hinzu, die als Defense in Depth wertvoll ist. Nutzen Sie es, wenn möglich, aber Benutzerisolierung allein stoppt die meisten Prompt-Injection-zu-Root-Shell-Angriffe.
Wie viel CPU sollte ich einem KI-Agenten zuweisen?
Beginnen Sie mit 1-2 CPU-Kernen (CPUQuota=150% in systemd oder --cpus 1.5 in Docker) und 2 GB RAM auf einem 8-GB-VPS. Überwachen Sie den tatsächlichen Verbrauch eine Woche lang mit docker stats oder systemctl status und passen Sie dann an. Agenten sind sprunghaft: Sie idlen zwischen Anfragen und spiken während des Reasonings. Die Limits verhindern, dass Spitzen andere Dienste beeinträchtigen.
Wie sichere ich mehrere Agenten auf demselben Server ab?
Erstellen Sie für jeden Agenten einen separaten Linux-Benutzer und Container. Jeder erhält eigene cgroup-Limits, Egress-Regeln und einen eigenen Audit-Trail. Verwenden Sie Docker-Netzwerke, um den Verkehr zwischen Agenten zu isolieren. Teilen Sie niemals Secrets zwischen Agenten.
Copyright 2026 Virtua.Cloud. Alle Rechte vorbehalten. Dieser Inhalt ist ein Originalwerk des Virtua.Cloud-Teams. Vervielfältigung, Wiederveröffentlichung oder Weiterverbreitung ohne schriftliche Genehmigung ist untersagt.
Bereit, es selbst auszuprobieren?
Betreiben Sie KI-Agenten sicher auf Ihrem eigenen VPS.
VPS-Angebote ansehen