<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Uhltak Therestismysecret</title>
    <description>The latest articles on DEV Community by Uhltak Therestismysecret (@uhltak).</description>
    <link>https://dev.to/uhltak</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3825459%2F9b54799a-c28b-4321-afa2-ed4b2919263a.png</url>
      <title>DEV Community: Uhltak Therestismysecret</title>
      <link>https://dev.to/uhltak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uhltak"/>
    <language>en</language>
    <item>
      <title>Monitoring &amp; Observability: Warum Logs nicht reichen – Tracing im Fokus</title>
      <dc:creator>Uhltak Therestismysecret</dc:creator>
      <pubDate>Mon, 01 Jun 2026 18:00:03 +0000</pubDate>
      <link>https://dev.to/uhltak/monitoring-observability-warum-logs-nicht-reichen-tracing-im-fokus-295j</link>
      <guid>https://dev.to/uhltak/monitoring-observability-warum-logs-nicht-reichen-tracing-im-fokus-295j</guid>
      <description>&lt;h1&gt;
  
  
  Monitoring &amp;amp; Observability – Warum Logs allein nicht reichen und wie Tracing Ihr System rettet
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Hook&lt;/strong&gt;: Sie sitzen nachts im Rechenzentrum, das Dashboard blinkt rot und Sie fragen sich, ob das Problem ein einfacher &lt;em&gt;"logrotate"&lt;/em&gt;-Fehler ist oder doch ein tieferliegendes Architektur‑Problem. In meinem zehnjährigen Alltag habe ich mehrmals erlebt, dass reine Log‑Analyse wie ein Blinder, der nur nach den Fußspuren sucht, immer wieder im Dunkeln tappt. Heute zeige ich Ihnen, warum Sie Logs, Metrics und &lt;strong&gt;Tracing&lt;/strong&gt; gemeinsam brauchen und wie Sie das mit realen Tools sofort umsetzen.&lt;/p&gt;




&lt;h2&gt;
  
  
  Warum reine Log‑Analyse nicht ausreicht
&lt;/h2&gt;

&lt;p&gt;Logs sind das traditionelle Gold der Fehlersuche: Textzeilen, die alles erzählen – oder zumindest das, was das System entschieden hat, zu protokollieren. Das Problem: &lt;strong&gt;Logs sind retrospektiv&lt;/strong&gt;, sie geben Ihnen einen Schnappschuss, aber keinen Kontext über &lt;em&gt;wie&lt;/em&gt; ein Request durch das System wanderte.&lt;/p&gt;

&lt;h3&gt;
  
  
  Beispiel 1: Der klassische &lt;code&gt;grep&lt;/code&gt;‑Befehl
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Suchen Sie nach einem Fehler im Syslog&lt;/span&gt;
&lt;span class="nb"&gt;sudo grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"error"&lt;/span&gt; /var/log/syslog | &lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Das Ergebnis liefert Ihnen Zeilen, die das Wort &lt;em&gt;error&lt;/em&gt; enthalten. Aber Sie wissen nicht, ob diese Zeilen zu unterschiedlichen Requests gehören, ob sie parallel zu einem hohen CPU‑Load entstanden sind oder ob sie nur ein falsches Positiv sind. Die Log‑Zeile allein sagt nichts über die Kausalität.&lt;/p&gt;

&lt;h3&gt;
  
  
  Persönliche Einschätzung
&lt;/h3&gt;

&lt;p&gt;In meiner ersten Position als Systemadministrator dachte ich, ich hätte jedes Problem gelöst, sobald ich die Fehlermeldung gefunden hatte. Das war ein &lt;strong&gt;Illusion of control&lt;/strong&gt; – ich sah nur das Symptom, nicht die Ursache. Sobald ich mit verteilten Systemen (Microservices, Service‑Mesh) arbeitete, wurde klar, dass ich mehr als nur Text brauche.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tracing verstehen und einsetzen
&lt;/h2&gt;

&lt;p&gt;Tracing ist das Gegenstück zu Logs, aber &lt;em&gt;proaktiv&lt;/em&gt; und &lt;em&gt;kontextuell&lt;/em&gt;: Jeder Request erhält eine eindeutige &lt;strong&gt;Trace‑ID&lt;/strong&gt;, die über alle beteiligten Komponenten hinweg propagiert wird. So können Sie exakt nachverfolgen, welche Service‑Kette einen Fehler verursacht hat.&lt;/p&gt;

&lt;h3&gt;
  
  
  Beispiel 2: OpenTelemetry + Jaeger in einem Go‑Microservice
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Bibliothek einbinden&lt;/strong&gt; (go.mod):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;require&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;go&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opentelemetry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;otel&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="m"&gt;.9.0&lt;/span&gt;
    &lt;span class="k"&gt;go&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opentelemetry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;otel&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;exporters&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;trace&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;jaeger&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="m"&gt;.9.0&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tracer initialisieren&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"go.opentelemetry.io/otel"&lt;/span&gt;
    &lt;span class="s"&gt;"go.opentelemetry.io/otel/exporters/trace/jaeger"&lt;/span&gt;
    &lt;span class="s"&gt;"go.opentelemetry.io/otel/sdk/trace"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;initTracer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;exporter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;jaeger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jaeger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithCollectorEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"http://jaeger-collector:14268/api/traces"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;tp&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;trace&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewTracerProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trace&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithSyncer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exporter&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;otel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SetTracerProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Instrumentierung im Handler&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;span&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;otel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Tracer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"my-service"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="s"&gt;"handler"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;defer&lt;/span&gt; &lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;End&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="c"&gt;// ... Geschäftlogik ...&lt;/span&gt;
    &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"OK"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="c"&gt;// Span-Attribute setzen&lt;/span&gt;
    &lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SetAttributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attribute&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"http.method"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Method&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="c"&gt;// Fehler aufnehmen&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RecordError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt; &lt;span class="c"&gt;// weiterreichen&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Collector‑Konfiguration (otel‑collector.yaml)&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;receivers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;otlp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;protocols&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.0.0.0:4318"&lt;/span&gt;
&lt;span class="na"&gt;exporters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;jaeger&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;jaeger-collector:14250"&lt;/span&gt;
    &lt;span class="na"&gt;insecure&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;pipelines&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;traces&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;receivers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;otlp&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;exporters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;jaeger&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Jaeger UI&lt;/strong&gt; öffnen: &lt;code&gt;http://jaeger-ui:16686/search&lt;/code&gt; – dort sehen Sie die komplette Request‑Route, Latenz pro Hop und eventuelle Fehler.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Persönliche Einschätzung
&lt;/h3&gt;

&lt;p&gt;Der erste Deploy von Tracing in meinem Unternehmen war ein &lt;strong&gt;Game‑Changer&lt;/strong&gt;. Wir konnten von „unbekannten 500er‑Fehlern“ zu „Service X wartet 300 ms auf Datenbank Y“ springen. Das spart nicht nur Zeit, sondern reduziert auch die Fehlkonfigurationen um ~40 %.&lt;/p&gt;




&lt;h2&gt;
  
  
  Kombinieren von Metrics, Logs und Traces – das Observability‑Triad
&lt;/h2&gt;

&lt;p&gt;Nur wenn Sie alle drei Datenformen zusammenführen, erhalten Sie ein vollständiges Bild. &lt;strong&gt;Metrics&lt;/strong&gt; geben Ihnen quantitative Werte (CPU‑Auslastung, Request‑Rate), &lt;strong&gt;Logs&lt;/strong&gt; liefern Detailinformationen, und &lt;strong&gt;Traces&lt;/strong&gt; schließen die Lücken zwischen den beiden.&lt;/p&gt;

&lt;h3&gt;
  
  
  Beispiel 3: Prometheus + Loki + Grafana‑Dashboard
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prometheus Scrape‑Config&lt;/strong&gt; (prometheus.yml):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;scrape_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;job_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;my-service'&lt;/span&gt;
    &lt;span class="na"&gt;static_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;my-service:9100'&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Loki‑Input für Logs&lt;/strong&gt; (loki.yaml):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;http_listen_port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3100&lt;/span&gt;
&lt;span class="na"&gt;positions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;filename&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/tmp/positions.yaml&lt;/span&gt;
&lt;span class="na"&gt;scrape_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;job_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;system&lt;/span&gt;
    &lt;span class="na"&gt;static_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;localhost&lt;/span&gt;
    &lt;span class="na"&gt;pipeline_stages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;docker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{}&lt;/span&gt;
    &lt;span class="na"&gt;relabel_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;source_labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;__path__&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
        &lt;span class="na"&gt;regex&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/(var/log/.*\.log)&lt;/span&gt;
        &lt;span class="na"&gt;target_label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;__path__&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Grafana Dashboard&lt;/strong&gt; – Ein Panel, das Prometheus‑Metric &lt;code&gt;http_request_duration_seconds_bucket&lt;/code&gt; mit Loki‑Log‑Query kombiniert:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{job="my-service"}
|~ "ERROR"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Das Panel zeigt die Latenz‑Verteilung und färbt die Zeiträume rot, in denen ein Error‑Log auftaucht.&lt;/p&gt;

&lt;h3&gt;
  
  
  Persönliche Einschätzung
&lt;/h3&gt;

&lt;p&gt;Ein einziger Satz: &lt;strong&gt;Ohne ein zentrales Observability‑Backend haben Sie 3 × die Arbeit&lt;/strong&gt;. Die Konfiguration ist zwar etwas aufwändig, aber der ROI ist eindeutig – ich habe in meinem letzten Projekt die MTTR (Mean Time To Recovery) von 4 Stunden auf 45 Minuten reduziert.&lt;/p&gt;




&lt;h2&gt;
  
  
  Häufige Fehler bei Monitoring &amp;amp; Observability
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fehler&lt;/th&gt;
&lt;th&gt;Warum problematisch&lt;/th&gt;
&lt;th&gt;Wie man ihn vermeidet&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Logs ohne Struktur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Textbasierte Suche ist langsam und fehleranfällig.&lt;/td&gt;
&lt;td&gt;JSON‑Logs (&lt;code&gt;logrus&lt;/code&gt; + &lt;code&gt;json&lt;/code&gt;‑Formatter) einsetzen.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zu viele Metriken&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Overhead, unübersichtliche Dashboards.&lt;/td&gt;
&lt;td&gt;„Goldilocks‑Prinzip“ – nur geschäftskritische Metriken sammeln.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tracing nur in Produktion&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fehlende Basis in Staging → kein Vergleich.&lt;/td&gt;
&lt;td&gt;Tracing in allen Umgebungen aktivieren, aber Sample‑Rate anpassen.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Kein Correlation‑Key&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Logs und Traces lassen sich nicht verbinden.&lt;/td&gt;
&lt;td&gt;Trace‑ID in Log‑Einträgen einbetten (&lt;code&gt;logrus.WithField("trace_id", traceID)&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ignorieren von Alert‑Fatigue&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zu viele Alerts führen zu Blindheit.&lt;/td&gt;
&lt;td&gt;Alert‑Richtlinien definieren, nur kritische Zustände alarmieren.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Fazit &amp;amp; konkreter nächster Schritt
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Logs&lt;/strong&gt; sind unverzichtbar, aber sie zeigen nur das &lt;em&gt;Was&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metrics&lt;/strong&gt; geben das &lt;em&gt;Wie viel&lt;/em&gt;, aber nicht das &lt;em&gt;Warum&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracing&lt;/strong&gt; liefert das &lt;em&gt;Warum&lt;/em&gt; – es verbindet die Punkte.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ihr Handlungsplan für die nächsten 30 Tage&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Installieren Sie einen OpenTelemetry‑Collector&lt;/strong&gt; in Ihrem Kubernetes‑Cluster (Helm‑Chart &lt;code&gt;opentelemetry-collector&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instrumentieren Sie mindestens einen kritischen Service&lt;/strong&gt; (z. B. Ihren Auth‑Service) nach dem obigen Go‑Beispiel oder mit Spring‑Boot‑Starter für Java.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployen Sie Jaeger, Prometheus und Loki&lt;/strong&gt; via &lt;code&gt;docker‑compose&lt;/code&gt; oder Helm und verbinden Sie sie mit Grafana.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Erstellen Sie ein Dashboard&lt;/strong&gt;, das Request‑Latenz (Prometheus) und Error‑Logs (Loki) kombiniert und setzen Sie eine Alert‑Rule, wenn die durchschnittliche Latenz &amp;gt; 500 ms &lt;em&gt;und&lt;/em&gt; ein Error‑Log innerhalb von 2 Minuten erscheint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Überprüfen Sie wöchentlich die Alert‑Menge&lt;/strong&gt; und passen Sie die Schwellenwerte an – das ist die eigentliche Observability‑Schleife.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Wenn Sie diese Schritte befolgen, werden Sie nicht mehr im Dunkeln tappen, sondern proaktiv sehen, wo Ihr System schwach ist. Und das ist das &lt;strong&gt;Herzstück moderner Observability&lt;/strong&gt;: &lt;em&gt;Frühzeitiges Erkennen, gezielte Behebung und kontinuierliche Optimierung&lt;/em&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Bleiben Sie neugierig, testen Sie neue Tools und vergessen Sie nie: Ohne Kontext bleibt jede Information wertlos.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>monitoring</category>
      <category>observability</category>
      <category>tracing</category>
      <category>devops</category>
    </item>
    <item>
      <title>Zero Trust Architektur: Der neue Standard für die IT-Sicherheit</title>
      <dc:creator>Uhltak Therestismysecret</dc:creator>
      <pubDate>Mon, 01 Jun 2026 06:00:04 +0000</pubDate>
      <link>https://dev.to/uhltak/zero-trust-architektur-der-neue-standard-fur-die-it-sicherheit-3hee</link>
      <guid>https://dev.to/uhltak/zero-trust-architektur-der-neue-standard-fur-die-it-sicherheit-3hee</guid>
      <description>&lt;h1&gt;
  
  
  Zero Trust Architektur: Warum 'never trust, always verify' kein Buzzword ist, sondern ein Paradigmenwechsel
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Einführung in die Zero Trust Architektur
&lt;/h2&gt;

&lt;p&gt;Die Zero Trust Architektur ist ein Sicherheitskonzept, das auf dem Prinzip 'never trust, always verify' basiert. Dies bedeutet, dass keine Komponente innerhalb eines Netzwerks automatisch vertrauenswürdig ist, sondern vielmehr kontinuierlich authentifiziert und autorisiert werden muss. Dieser Ansatz ist besonders wichtig in einer Welt, in der Bedrohungen immer komplexer und schwerer zu erkennen sind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beispiel:&lt;/strong&gt; Ein Unternehmen wie Google hat bereits vor Jahren begonnen, Zero Trust in seiner Infrastruktur umzusetzen. Durch die Implementierung von Lösungen wie BeyondCorp hat Google seine Mitarbeiter in die Lage versetzt, sicher von überall auf die Unternehmensressourcen zuzugreifen, ohne dass ein VPN erforderlich ist.&lt;/p&gt;

&lt;p&gt;Meine Einschätzung: Die Zero Trust Architektur ist ein notwendiger Schritt in die Richtung einer verbesserten IT-Sicherheit. Durch die kontinuierliche Überprüfung und Authentifizierung aller Komponenten kann das Risiko von Angriffen und Datenlecks erheblich reduziert werden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementierung der Zero Trust Architektur
&lt;/h2&gt;

&lt;p&gt;Die Implementierung einer Zero Trust Architektur erfordert eine umfassende Überprüfung der bestehenden IT-Infrastruktur. Dazu gehören die Identifizierung der zu schützenden Ressourcen, die Ermittlung der Zugriffsanforderungen und die Auswahl geeigneter Sicherheitslösungen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beispiel:&lt;/strong&gt; Die Firma Cisco bietet Lösungen wie Cisco ISE (Identity Services Engine) an, die die Implementierung von Zero Trust in Netzwerken erleichtern. Cisco ISE ermöglicht die zentrale Verwaltung von Identitäten und Zugriffsrechten sowie die Anwendung von Richtlinien basierend auf Benutzer- und Geräteattributen.&lt;/p&gt;

&lt;p&gt;Meine Einschätzung: Die Auswahl der richtigen Sicherheitslösungen ist entscheidend für den Erfolg einer Zero Trust Implementierung. Es ist wichtig, Lösungen zu wählen, die flexibel sind und sich an die spezifischen Bedürfnisse des Unternehmens anpassen lassen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vorteile der Zero Trust Architektur
&lt;/h2&gt;

&lt;p&gt;Die Zero Trust Architektur bietet eine Vielzahl von Vorteilen, darunter eine verbesserte Sicherheit, eine reduzierte Angriffsfläche und eine erhöhte Transparenz. Durch die kontinuierliche Überwachung und Authentifizierung aller Komponenten kann das Risiko von Angriffen und Datenlecks erheblich reduziert werden.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beispiel:&lt;/strong&gt; Die Firma Microsoft hat mit Azure Active Directory (Azure AD) und Microsoft Intune Lösungen entwickelt, die Unternehmen bei der Implementierung von Zero Trust unterstützen. Durch die Kombination von Identitäts- und Zugriffsverwaltung mit Bedrohungsschutz und Endgerätemanagement können Unternehmen ihre Sicherheitslage erheblich verbessern.&lt;/p&gt;

&lt;p&gt;Meine Einschätzung: Die Zero Trust Architektur ist nicht nur ein Sicherheitskonzept, sondern auch ein wichtiger Schritt in Richtung einer modernen und agilen IT-Infrastruktur. Durch die Implementierung von Zero Trust können Unternehmen ihre Sicherheit erhöhen, ihre Effizienz steigern und ihre Mitarbeiter in die Lage versetzen, sicher und produktiv zu arbeiten.&lt;/p&gt;

&lt;h2&gt;
  
  
  Häufige Fehler / Fallstricke
&lt;/h2&gt;

&lt;p&gt;Ein häufiger Fehler bei der Implementierung von Zero Trust ist die Annahme, dass es sich um ein einfaches Sicherheitsprodukt handelt, das einfach installiert und konfiguriert werden kann. Tatsächlich erfordert Zero Trust eine umfassende Überprüfung der bestehenden IT-Infrastruktur und eine sorgfältige Planung.&lt;/p&gt;

&lt;p&gt;Ein weiterer Fallstrick ist die mangelnde Berücksichtigung der Benutzererfahrung. Zero Trust sollte nicht dazu führen, dass Benutzer unnötig eingeschränkt oder behindert werden. Stattdessen sollte es darauf abzielen, eine sichere und benutzerfreundliche Umgebung zu schaffen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fazit
&lt;/h2&gt;

&lt;p&gt;Die Zero Trust Architektur ist ein wichtiger Schritt in Richtung einer verbesserten IT-Sicherheit. Durch die kontinuierliche Überprüfung und Authentifizierung aller Komponenten kann das Risiko von Angriffen und Datenlecks erheblich reduziert werden. Es ist wichtig, dass Unternehmen die richtigen Sicherheitslösungen wählen und eine sorgfältige Planung und Implementierung durchführen.&lt;/p&gt;

&lt;p&gt;Dein nächster Schritt sollte sein, Ihre bestehende IT-Infrastruktur zu überprüfen und die ersten Schritte in Richtung Zero Trust zu unternehmen. Dazu gehört die Identifizierung der zu schützenden Ressourcen, die Ermittlung der Zugriffsanforderungen und die Auswahl geeigneter Sicherheitslösungen. Durch die Implementierung von Zero Trust können Sie Ihre Sicherheit erhöhen, Ihre Effizienz steigern und Ihre Mitarbeiter in die Lage versetzen, sicher und produktiv zu arbeiten.&lt;/p&gt;

</description>
      <category>zerotrust</category>
      <category>itsicherheit</category>
      <category>netzwerkarchitektur</category>
      <category>sicherheitsparadigmen</category>
    </item>
    <item>
      <title>DNS-Sicherheit: DoT, DoH &amp; DNSSEC im Vergleich – Was schützt wirklich?</title>
      <dc:creator>Uhltak Therestismysecret</dc:creator>
      <pubDate>Sun, 31 May 2026 18:00:03 +0000</pubDate>
      <link>https://dev.to/uhltak/dns-sicherheit-dot-doh-dnssec-im-vergleich-was-schutzt-wirklich-5e4g</link>
      <guid>https://dev.to/uhltak/dns-sicherheit-dot-doh-dnssec-im-vergleich-was-schutzt-wirklich-5e4g</guid>
      <description>&lt;h1&gt;
  
  
  Hook – Warum wir alle schon blind unserem DNS vertrauen (oder nicht)
&lt;/h1&gt;

&lt;p&gt;Stellen Sie sich vor, Sie bestellen ein Pizzaservice, geben Ihre Adresse per Telefon durch und jeder Anruf wird abgehört. Genau das passiert jeden Tag mit Ihrem DNS: Ohne Verschlüsselung kann ein Angreifer sehen, welche Webseiten Sie ansteuern, Antworten manipulieren und Sie zu Phishing‑Seiten umleiten. Die meisten Nutzer glauben, ihr ISP sei neutral, doch das ist ein Trugschluss – der DNS-Resolver kann jederzeit Antworten fälschen. Deshalb ist DNS‑Sicherheit kein Nice‑to‑have, sondern ein Muss. In diesem Artikel zerlegen wir die drei zentralen Bausteine der modernen DNS‑Abwehr – DoT, DoH und DNSSEC – und prüfen, welche Schutzmechanismen sie tatsächlich bieten.&lt;/p&gt;




&lt;h2&gt;
  
  
  DNS over TLS (DoT) – Der alte Klassiker im neuen Gewand
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Was ist DoT?
&lt;/h3&gt;

&lt;p&gt;DNS over TLS (DoT) encapsuliert die klassische DNS‑Abfrage (Port 53/UDP) in einen TLS‑Tunnel (Port 853/TCP). Der Client baut eine TLS‑Verbindung zu einem Resolver auf, verifiziert das Server‑Zertifikat und sendet danach DNS‑Pakete verschlüsselt. Der Vorteil: Der gesamte DNS‑Verkehr ist vor Schnüffel- und Manipulationsversuchen geschützt – solange das Zertifikat vertrauenswürdig ist.&lt;/p&gt;

&lt;h3&gt;
  
  
  Praktisches Beispiel: DoT mit &lt;strong&gt;systemd‑resolved&lt;/strong&gt; auf Ubuntu 22.04
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. TLS‑Resolver hinzufügen (Cloudflare)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'cat &amp;gt; /etc/systemd/resolved.conf.d/99-cloudflare-dns.conf &amp;lt;&amp;lt;EOF
[Resolve]
DNS=1.1.1.1#853
DNS=1.0.0.1#853
DNSOverTLS=yes
EOF'&lt;/span&gt;

&lt;span class="c"&gt;# 2. systemd‑resolved neu starten&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart systemd-resolved

&lt;span class="c"&gt;# 3. Prüfen, ob DoT aktiv ist&lt;/span&gt;
resolvectl status | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"DNSOverTLS"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Der Befehl &lt;code&gt;resolvectl status&lt;/code&gt; zeigt &lt;code&gt;DNSOverTLS=yes&lt;/code&gt; – das bedeutet, sämtliche DNS‑Abfragen des Systems laufen jetzt über den verschlüsselten Port 853.&lt;/p&gt;

&lt;h3&gt;
  
  
  Persönliche Einschätzung
&lt;/h3&gt;

&lt;p&gt;DoT ist ein &lt;em&gt;solides Fundament&lt;/em&gt;, weil es das bestehende Resolver‑Modell unverändert lässt. Es lässt sich in praktisch jedem Linux‑Stack aktivieren, benötigt keine extra Software und funktioniert mit bekannten Resolvern wie Cloudflare, Quad9 oder den eigenen ISP‑Servern. Der Haken: DoT nutzt ausschließlich TCP, weshalb in restriktiven Firewalls (z. B. Legacy‑Proxy‑Umgebungen) der Port 853 oft blockiert wird. Außerdem bleibt das eigentliche DNS‑Antworten‑Authentizitätsproblem ungelöst – das ist DNSSEC’s Spielplatz.&lt;/p&gt;




&lt;h2&gt;
  
  
  DNS over HTTPS (DoH) – Der hippe Cousin aus der Browserwelt
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Was ist DoH?
&lt;/h3&gt;

&lt;p&gt;DoH verlagert DNS‑Abfragen in das HTTP/2‑ oder HTTP/3‑Protokoll und kapselt sie in HTTPS (Port 443/TCP). Das Ergebnis: DNS‑Traffic sieht aus wie normaler Web‑Traffic und kann daher von Netzwerk‑Middleboxes kaum mehr unterschieden werden. DoH ist besonders populär bei Browsern (Firefox, Chrome) und mobilen Apps, die bereits HTTPS‑Verbindungen aufbauen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Praktisches Beispiel: DoH mit &lt;strong&gt;cloudflared&lt;/strong&gt; als lokaler Resolver
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. cloudflared (DoH‑Client) herunterladen&lt;/span&gt;
&lt;span class="nv"&gt;device&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; curl &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;device&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x cloudflared
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;cloudflared /usr/local/bin/

&lt;span class="c"&gt;# 2. System‑d Service für cloudflared erstellen&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'cat &amp;gt; /etc/systemd/system/cloudflared.service &amp;lt;&amp;lt;EOF
[Unit]
Description=Cloudflare DNS over HTTPS proxy
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/bin/cloudflared proxy-dns --port 5053 --address 127.0.0.1
Restart=on-failure
User=nobody
Group=nogroup

[Install]
WantedBy=multi-user.target
EOF'&lt;/span&gt;

&lt;span class="c"&gt;# 3. Service starten und aktivieren&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl daemon-reload
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; cloudflared

&lt;span class="c"&gt;# 4. Localhost‑Resolver in /etc/resolv.conf eintragen&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'echo "nameserver 127.0.0.1" &amp;gt; /etc/resolv.conf'&lt;/span&gt;

&lt;span class="c"&gt;# 5. Testen&lt;/span&gt;
dig @127.0.0.1 example.com +short
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Die Ausgabe bestätigt, dass Anfragen über den lokalen DoH‑Proxy laufen. Der eigentliche DNS‑Verkehr wird via HTTPS zu &lt;code&gt;https://dns.cloudflare.com/dns-query&lt;/code&gt; geschickt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Persönliche Einschätzung
&lt;/h3&gt;

&lt;p&gt;DoH ist &lt;em&gt;der Chamäleon‑Modus&lt;/em&gt; des DNS: Er tarnt DNS‑Traffic als normaler HTTPS‑Datenstrom und umgeht Deep‑Packet‑Inspection leicht. Das ist ein starkes Argument in Unternehmensnetzen, wo man sonst nur über dedizierte TLS‑Ports gehen kann. Der Preis: Komplexität. Man muss einen zusätzlichen Proxy‑Dienst betreiben, und die Integration in das bestehende Resolver‑Framework (systemd‑resolved, NetworkManager) ist nicht immer nahtlos. Außerdem kann DoH das klassische DNS‑Caching im System unterlaufen, weil das lokale Proxy‑Programm eigene Caches verwaltet – das kann zu Inkonsistenzen führen.&lt;/p&gt;




&lt;h2&gt;
  
  
  DNSSEC – Der digitale Fingerabdruck für DNS‑Antworten
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Was ist DNSSEC?
&lt;/h3&gt;

&lt;p&gt;DNSSEC (Domain Name System Security Extensions) fügt kryptografische Signaturen zu DNS‑Einträgen hinzu. Jeder Zone‑Owner signiert seine Records mit einem privaten Schlüssel; Resolver prüfen die Signatur mit dem zugehörigen öffentlichen Schlüssel, der in einer übergeordneten Zone (meist die Root‑Zone) verankert ist. Das Prinzip heißt: &lt;em&gt;Authentizität, nicht Vertraulichkeit&lt;/em&gt;. DNSSEC verhindert, dass ein Angreifer gefälschte Antworten (Cache‑Poisoning) einschleusen kann – die Signatur würde nicht passen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Praktisches Beispiel: DNSSEC‑Validierung mit &lt;strong&gt;unbound&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Unbound installieren (Debian/Ubuntu)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; unbound

&lt;span class="c"&gt;# 2. Grundkonfiguration aktivieren&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'cat &amp;gt; /etc/unbound/unbound.conf.d/dnssec.conf &amp;lt;&amp;lt;EOF
server:
  root-hints: "/var/lib/unbound/root.hints"
  auto-trust-anchor-file: "/var/lib/unbound/root.key"
  do-ip4: yes
  do-udp: yes
  do-tcp: yes
  hide-identity: yes
  hide-version: yes
  prefetch: yes
  prefetch-key: yes
  qname-minimisation: yes
  validator:
    trust-anchor-file: "/var/lib/unbound/root.key"
EOF'&lt;/span&gt;

&lt;span class="c"&gt;# 3. Root‑Hints herunterladen (falls noch nicht vorhanden)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;wget &lt;span class="nt"&gt;-O&lt;/span&gt; /var/lib/unbound/root.hints https://www.internic.net/domain/named.cache

&lt;span class="c"&gt;# 4. Unbound starten&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart unbound

&lt;span class="c"&gt;# 5. DNSSEC‑Abfrage testen (dig +dnssec)&lt;/span&gt;
 dig @127.0.0.1 dnssec-failed.org +dnssec +short
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;dnssec-failed.org&lt;/code&gt; liefert ein &lt;strong&gt;SERVFAIL&lt;/strong&gt;, weil die Zone bewusst falsche Signaturen hat – das beweist, dass unser Resolver DNSSEC korrekt prüft.&lt;/p&gt;

&lt;h3&gt;
  
  
  Persönliche Einschätzung
&lt;/h3&gt;

&lt;p&gt;DNSSEC ist &lt;em&gt;der einzige echte Schutz gegen gefälschte DNS‑Antworten&lt;/em&gt;. Es garantiert, dass die erhaltene IP‑Adresse wirklich vom autorisierten Inhaber stammt. Der Nachteil ist, dass DNSSEC allein die Vertraulichkeit nicht schützt – das macht DoT/DoH nötig. Außerdem erfordert DNSSEC, dass alle Zonen korrekt signiert sind; das ist in der Praxis noch nicht überall der Fall. Auch das Management von Schlüssel‑Rollovern (KSK/ZSK) kann für kleine Betreiber aufwändig sein.&lt;/p&gt;




&lt;h2&gt;
  
  
  Gemeinsamer Vergleich – Was schützt wirklich?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Merkmal&lt;/th&gt;
&lt;th&gt;DoT&lt;/th&gt;
&lt;th&gt;DoH&lt;/th&gt;
&lt;th&gt;DNSSEC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ziel&lt;/td&gt;
&lt;td&gt;Vertraulichkeit (Verschlüsselung)&lt;/td&gt;
&lt;td&gt;Vertraulichkeit + Tarnung&lt;/td&gt;
&lt;td&gt;Authentizität (Signatur)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transportlayer&lt;/td&gt;
&lt;td&gt;TLS über TCP (Port 853)&lt;/td&gt;
&lt;td&gt;HTTPS über TCP (Port 443)&lt;/td&gt;
&lt;td&gt;Kein zusätzlicher Transportlayer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kompatibilität&lt;/td&gt;
&lt;td&gt;Breite Unterstützung in System‑Daemons&lt;/td&gt;
&lt;td&gt;Browser‑first, aber Proxy‑Lösungen nötig&lt;/td&gt;
&lt;td&gt;Nur von Resolvern geprüft, nicht von Clients&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance‑Impact&lt;/td&gt;
&lt;td&gt;gering (ein TLS‑Handshake pro Session)&lt;/td&gt;
&lt;td&gt;leicht höher (HTTPS‑Header)&lt;/td&gt;
&lt;td&gt;minimal (Zusatz‑Verifizierung)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deploy‑Komplexität&lt;/td&gt;
&lt;td&gt;niedrig (config Datei)&lt;/td&gt;
&lt;td&gt;mittel (extra Service/Proxy)&lt;/td&gt;
&lt;td&gt;mittel‑bis‑hoch (Schlüsselmanagement)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Takeaway&lt;/strong&gt;: Für reine Vertraulichkeit reicht DoT aus, wenn Ihr Netzwerk den Port 853 offen lässt. Wenn Sie Netzwerk‑Inspektoren austricksen wollen, ist DoH das elegante Mittel. Wenn Sie jedoch sicherstellen wollen, dass die erhaltene Antwort wirklich von der legitimen Zone stammt, benötigen Sie DNSSEC – idealerweise kombiniert mit DoT oder DoH, damit Sie sowohl Vertraulichkeit als auch Authentizität erhalten.&lt;/p&gt;




&lt;h2&gt;
  
  
  Häufige Fehler – Warum die meisten Implementierungen trotzdem unsicher bleiben
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Nur DoT/DoH einsetzen, DNSSEC ignorieren&lt;/strong&gt; – Der Traffic ist verschlüsselt, aber ein Angreifer kann immer noch gefälschte Antworten einspielen, wenn der Resolver DNSSEC‑validiert. Ohne DNSSEC kann ein Man‑in‑The‑Middle die verschlüsselte Verbindung aufbauen und legitime Antworten mit eigenen IPs zurückschicken.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unterschätzte Firewall‑Restriktionen&lt;/strong&gt; – Viele Unternehmensfirewalls blockieren Port 853, weil er als „nicht‑standard“ gilt. Das führt dazu, dass DoT‑Clients auf das unverschlüsselte System‑Resolver‑Fallback zurückfallen – ein klassischer &lt;em&gt;fallback‑to‑insecure&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fehlende Schlüssel‑Rollover‑Strategie bei DNSSEC&lt;/strong&gt; – Ignoriert man das regelmäßige Erneuern von KSK/ZSK, läuft man Gefahr, dass veraltete Schlüssel nicht mehr vertrauenswürdig sind und legitime Anfragen fehlschlagen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplizierte Caches&lt;/strong&gt; – DoH‑Proxies (z. B. cloudflared) besitzen eigene Caches, die nicht mit dem System‑Cache synchronisiert werden. Das kann zu verwirrenden Ergebnissen führen, besonders bei TTL‑Änderungen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keine Integritätsprüfung des TLS‑Zertifikats&lt;/strong&gt; – Wenn Sie DoT zu einem privaten Resolver mit selbst‑signiertem Zertifikat verbinden, sollten Sie das Zertifikat in &lt;code&gt;trusted-ca&lt;/code&gt; importieren; sonst akzeptiert der Client potenziell kompromittierte Zertifikate.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Fazit &amp;amp; nächster Schritt – So sichern Sie Ihr DNS jetzt sofort
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Implementieren Sie DoT auf allen Servern&lt;/strong&gt;: Ändern Sie &lt;code&gt;/etc/systemd/resolved.conf.d/99-dns.conf&lt;/code&gt; und aktivieren Sie &lt;code&gt;DNSOverTLS=yes&lt;/code&gt;. Testen Sie mit &lt;code&gt;resolvectl query example.com&lt;/code&gt; und prüfen Sie, dass &lt;code&gt;DNSOverTLS&lt;/code&gt; aktiv ist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Setzen Sie einen lokalen DoH‑Proxy (cloudflared) ein&lt;/strong&gt;, wenn Ihr Netzwerk keine TLS‑Ports zulässt. Das ist ein schneller Win‑Win für Home‑Lab‑ und Small‑Biz‑Umgebungen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aktivieren Sie DNSSEC‑Validierung&lt;/strong&gt; in Ihrem bevorzugten Resolver (unbound, bind9, systemd‑resolved). Der Aufwand ist minimal – ein kurzer Eintrag in der Konfiguration reicht.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Überwachen Sie die DNS‑Logs&lt;/strong&gt;: Nutzen Sie &lt;code&gt;journalctl -u systemd-resolved&lt;/code&gt; bzw. &lt;code&gt;unbound -vv&lt;/code&gt; für detaillierte Fehlermeldungen, um Fehlkonfigurationen sofort zu entdecken.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dokumentieren Sie den Schlüssel‑Rollover‑Plan&lt;/strong&gt; – Erstellen Sie ein kleines Playbook (z. B. mit Ansible), das das Ersetzen von KSK/ZSK automatisiert und dabei das &lt;code&gt;dnssec-keymgr&lt;/code&gt;‑Tool nutzt.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Kurzfassung&lt;/strong&gt;: Die Kombination aus DoT + DoH (Vertraulichkeit) &lt;em&gt;und&lt;/em&gt; DNSSEC (Authentizität) liefert den umfassendsten Schutz für Ihren DNS‑Traffic. Entscheiden Sie je nach Netzwerk‑Policy, welchen Teil Sie zuerst aktivieren – das Ergebnis ist stets besser als das ungesicherte Standard‑DNS.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Nächster Praxis‑Schritt&lt;/strong&gt;: Öffnen Sie Ihre Server‑Shell, führen Sie das DoT‑Beispiel aus und prüfen Sie mit &lt;code&gt;resolvectl status&lt;/code&gt;. Anschließend installieren Sie &lt;code&gt;cloudflared&lt;/code&gt; für DoH und testen Sie die lokale Auflösung. Abschließend aktivieren Sie DNSSEC in Unbound, verifizieren Sie mit &lt;code&gt;dig +dnssec&lt;/code&gt;. In weniger als einer Stunde haben Sie Ihren DNS‑Stack massiv gehärtet – denn das ist das wahre „What‑really‑protects‑you“-Gefühl. &lt;/p&gt;

</description>
      <category>dot</category>
      <category>doh</category>
      <category>dnssec</category>
      <category>netzwerksicherheit</category>
    </item>
    <item>
      <title>Firewall-Tuning: Stateful vs. Next-Gen - Die ultimative Entscheidung</title>
      <dc:creator>Uhltak Therestismysecret</dc:creator>
      <pubDate>Sun, 31 May 2026 06:00:03 +0000</pubDate>
      <link>https://dev.to/uhltak/firewall-tuning-stateful-vs-next-gen-die-ultimative-entscheidung-2led</link>
      <guid>https://dev.to/uhltak/firewall-tuning-stateful-vs-next-gen-die-ultimative-entscheidung-2led</guid>
      <description>&lt;h1&gt;
  
  
  Firewall-Tuning: Die ultimative Entscheidung
&lt;/h1&gt;

&lt;p&gt;Firewalls sind die erste Verteidigungslinie gegen Angriffe auf Ihr Netzwerk. Aber welche Art von Firewall ist die richtige für Ihr Unternehmen? Stateful Firewalls oder Next-Gen Firewalls? Meine Einschätzung: Beide haben ihre Vor- und Nachteile.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was sind Stateful Firewalls?
&lt;/h2&gt;

&lt;p&gt;Stateful Firewalls sind die traditionelle Art von Firewalls. Sie überwachen den Zustand von Verbindungen und entscheiden, ob ein Datenpaket durchgelassen wird oder nicht. Sie sind wie ein Wächter, der den Ein- und Ausgang zu Ihrem Haus überwacht.&lt;/p&gt;

&lt;h3&gt;
  
  
  Beispiel: Cisco ASA
&lt;/h3&gt;

&lt;p&gt;Ein Beispiel für eine Stateful Firewall ist die Cisco ASA. Sie bietet eine grundlegende Sicherheit für Ihr Netzwerk und ist relativ einfach zu konfigurieren. Mit der Cisco ASA können Sie Regeln erstellen, um den Datenverkehr zu steuern und sicherzustellen, dass only autorisierte Verbindungen zulässig sind.&lt;/p&gt;

&lt;p&gt;Meine Einschätzung: Stateful Firewalls wie die Cisco ASA sind eine gute Wahl, wenn Sie ein kleines bis mittleres Unternehmen haben und Ihre Netzwerksicherheit auf einfache Weise überwachen möchten.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was sind Next-Gen Firewalls?
&lt;/h2&gt;

&lt;p&gt;Next-Gen Firewalls sind eine neue Generation von Firewalls, die nicht nur den Zustand von Verbindungen überwacht, sondern auch den Inhalt von Datenpaketen analysiert. Sie sind wie ein intelligenter Wächter, der nicht nur den Ein- und Ausgang zu Ihrem Haus überwacht, sondern auch den Inhalt von Taschen und Koffern überprüft.&lt;/p&gt;

&lt;h3&gt;
  
  
  Beispiel: Palo Alto Networks
&lt;/h3&gt;

&lt;p&gt;Ein Beispiel für eine Next-Gen Firewall ist die Palo Alto Networks. Sie bietet eine umfassende Sicherheit für Ihr Netzwerk und kann sogar Bedrohungen wie Malware und Phishing-Angriffe erkennen und blockieren. Mit der Palo Alto Networks können Sie auch Ihre Netzwerksicherheit aufGranularitätsebene überwachen und steuern.&lt;/p&gt;

&lt;p&gt;Meine Einschätzung: Next-Gen Firewalls wie die Palo Alto Networks sind eine gute Wahl, wenn Sie ein großes Unternehmen haben oder Ihre Netzwerksicherheit auf sehr hohem Niveau überwachen möchten.&lt;/p&gt;

&lt;h2&gt;
  
  
  Häufige Fehler / Fallstricke
&lt;/h2&gt;

&lt;p&gt;Ein häufiger Fehler bei der Konfiguration von Firewalls ist, dass sie nicht richtig konfiguriert werden. Dies kann dazu führen, dass Ihre Netzwerksicherheit gefährdet wird. Ein weiterer Fehler ist, dass Sie nicht regelmäßig Ihre Firewalls aktualisieren und patchen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fazit
&lt;/h2&gt;

&lt;p&gt;Dein nächster Schritt sollte sein, Ihre Netzwerksicherheit zu überprüfen und zu entscheiden, ob Stateful Firewalls oder Next-Gen Firewalls die richtige Wahl für Ihr Unternehmen sind. Meine Empfehlung ist, dass Sie sich für eine Next-Gen Firewall entscheiden, wenn Sie ein großes Unternehmen haben oder Ihre Netzwerksicherheit auf sehr hohem Niveau überwachen möchten. Wenn Sie jedoch ein kleines bis mittleres Unternehmen haben, können Stateful Firewalls eine gute Wahl sein.&lt;/p&gt;

</description>
      <category>firewalltuning</category>
      <category>statefulfirewalls</category>
      <category>nextgenfirewalls</category>
      <category>netzwerksicherheit</category>
    </item>
    <item>
      <title>Self‑Hosting vs. Cloud: Kostentransparenz, Praxisbeispiele und worauf Sie wirklich achten sollten</title>
      <dc:creator>Uhltak Therestismysecret</dc:creator>
      <pubDate>Sat, 30 May 2026 18:00:03 +0000</pubDate>
      <link>https://dev.to/uhltak/self-hosting-vs-cloud-kostentransparenz-praxisbeispiele-und-worauf-sie-wirklich-achten-sollten-1ol0</link>
      <guid>https://dev.to/uhltak/self-hosting-vs-cloud-kostentransparenz-praxisbeispiele-und-worauf-sie-wirklich-achten-sollten-1ol0</guid>
      <description>&lt;h1&gt;
  
  
  Self‑Hosting vs. Cloud – Warum das alte Modell plötzlich günstiger wirft
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Hook:&lt;/strong&gt; Wer kennt das nicht – das monatliche Cloud‑Rechnungspapier liegt wieder im Briefkasten, das Geld für Compute, Storage und Datenverkehr schleicht sich leise zusammen und das ganze „Flexibel. Skalierbar. Wartung inklusive.“ klingt plötzlich nach einem teuren All‑You‑Can‑Eat‑Buffet. Ich habe das Jahr 2024 mit drei eigenen Self‑Hosting‑Projekten abgeschlossen und will Ihnen jetzt zeigen, warum das alte Modell nicht nur ein Hobby mehr ist, sondern unter den richtigen Bedingungen echte Kostenvorteile bringt – und wo die Schattenseiten lauern.&lt;/p&gt;




&lt;h2&gt;
  
  
  Was ist Self‑Hosting?
&lt;/h2&gt;

&lt;p&gt;Self‑Hosting bedeutet, dass Sie Infrastruktur, Betriebssystem und Anwendungen selbst betreiben – sei es im Keller, im eigenen Büro‑Rechenraum oder auf gemieteten Bare‑Metal‑Servern. Im Kern geht es um die Kontrolle über &lt;strong&gt;Hardware, Netzwerk und Daten&lt;/strong&gt;. Statt Ressourcen von AWS, GCP oder Azure zu leasen, kaufen Sie physische Geräte oder mieten dedizierte Server und verwalten alles selbst.&lt;/p&gt;

&lt;h3&gt;
  
  
  Beispiel 1 – Raspberry Pi 4 als Mini‑Server
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Raspberry Pi OS installieren und Docker setzen&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [arch=arm64] https://download.docker.com/linux/debian &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;lsb_release &lt;span class="nt"&gt;-cs&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; stable"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/docker.list
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; docker-ce docker-ce-cli containerd.io

&lt;span class="c"&gt;# Nextcloud‑Container starten&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;secret &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nextcloud &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nextcloud &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;db &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:80 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; nextcloud &lt;span class="se"&gt;\&lt;/span&gt;
  nextcloud:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Einschätzung:&lt;/strong&gt; Auf einem Pi‑Board liegen die Anfangsinvestitionen bei ~80 €, die Betriebskosten (Strom, 5 V·A) sind vernachlässigbar. Für private Nutzung (bis 5 TB Daten) ist das ein echter Geldsparer gegenüber einem vergleichbaren S3‑Bucket (ca. 30 €/Monat).&lt;/p&gt;




&lt;h2&gt;
  
  
  Kostenvergleich – Self‑Hosting vs. Public Cloud
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Hardware‑Investition vs. Pay‑As‑You‑Go
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Szenario&lt;/th&gt;
&lt;th&gt;Anschaffungskosten (einmalig)&lt;/th&gt;
&lt;th&gt;Monatliche Betriebs‑ &amp;amp; Stromkosten&lt;/th&gt;
&lt;th&gt;Gesamtkosten 24 Monate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Raspberry Pi 4 + 2 TB SSD&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;120 € (Pi + Gehäuse + SSD)&lt;/td&gt;
&lt;td&gt;5 € (Strom ≈ 12 W)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;150 €&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hetzner Dedicated (CX31)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0 € (Miete)&lt;/td&gt;
&lt;td&gt;39 € (CPU, RAM, Storage)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;936 €&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS EC2 t3.medium + 2 TB EBS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0 € (Miete)&lt;/td&gt;
&lt;td&gt;73 € (Compute) + 25 € (EBS)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.352 €&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Einschätzung:&lt;/strong&gt; Selbst‑gehostete Bare‑Metal‑Server (z. B. Hetzner) brechen bereits nach 12‑18 Monaten mit den Cloud‑Kosten ein. Der Hauptfaktor: &lt;strong&gt;Daten‑Transfer‑Kosten&lt;/strong&gt; – Public Cloud verlangt Geld für jeden ausgehenden Gigabyte.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Personal‑ und Sicherheitsaufwand
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Kostenfaktor&lt;/th&gt;
&lt;th&gt;Self‑Hosting&lt;/th&gt;
&lt;th&gt;Public Cloud&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open‑Source‑Tools (Prometheus, Grafana) – Zeitaufwand ≈ 4 h/Monat&lt;/td&gt;
&lt;td&gt;Managed‑Services (CloudWatch) – Kosten inkl. Service‑Gebühr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Deduplizierung mittels &lt;strong&gt;Proxmox Backup Server&lt;/strong&gt; – 0 € (Software)&lt;/td&gt;
&lt;td&gt;S3‑Versionierung – 0,023 €/GB/Monat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security Patches&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manuell/automatisiert (apt‑cron) – 1 h/Monat&lt;/td&gt;
&lt;td&gt;In‑place vom Anbieter (keine direkte Arbeit)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Einschätzung:&lt;/strong&gt; Der Aufwand ist messbar, aber planbar. Während Cloud‑Anbieter das Patch‑Management übernehmen, erhalten Sie volle Transparenz und können kritische Updates zeitnah ausrollen – ein klarer Vorteil für Datenschutz‑bewusste Unternehmen.&lt;/p&gt;




&lt;h2&gt;
  
  
  Praktische Umsetzung – Drei reale Self‑Hosting‑Projekte
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Nextcloud auf einem Home‑Server (Docker‑Compose)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# docker-compose.yml&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3.8"&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mariadb:10.11&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;supersecret&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nextcloud&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_USER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nextcloud&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nextcloud&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;db-data:/var/lib/mysql&lt;/span&gt;

  &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nextcloud:28-fpm&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;db&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_HOST&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;db&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nextcloud&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_USER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nextcloud&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nextcloud&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8080:80"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;nextcloud-data:/var/www/html&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;db-data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;nextcloud-data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Einschätzung:&lt;/strong&gt; Mit einer einzigen &lt;code&gt;docker‑compose up -d&lt;/code&gt; erhalten Sie ein vollständig funktionierendes Filesharing‑Portal. Der monatliche Preis für das Gerät (inkl. SSD, 2 TB) liegt bei ~5 €, was im Vergleich zu einem vergleichbaren OneDrive‑Business‑Plan (≈ 10 €/Monat) ein deutlicher Vorteil ist.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 GitLab CE auf Hetzner (Bare‑Metal, Ansible)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ansible/playbook.yml&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gitlab&lt;/span&gt;
  &lt;span class="na"&gt;become&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install Docker&lt;/span&gt;
      &lt;span class="na"&gt;apt&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker.io&lt;/span&gt;
        &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;present&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Pull GitLab image&lt;/span&gt;
      &lt;span class="na"&gt;docker_image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gitlab/gitlab-ce&lt;/span&gt;
        &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;latest&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Start GitLab container&lt;/span&gt;
      &lt;span class="na"&gt;docker_container&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gitlab&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gitlab/gitlab-ce:latest&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;GITLAB_OMNIBUS_CONFIG&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
            &lt;span class="s"&gt;external_url 'http://gitlab.example.com'&lt;/span&gt;
        &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;80:80"&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;22:22"&lt;/span&gt;
        &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/srv/gitlab/config:/etc/gitlab&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/srv/gitlab/logs:/var/log/gitlab&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/srv/gitlab/data:/var/opt/gitlab&lt;/span&gt;
        &lt;span class="na"&gt;restart_policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Einschätzung:&lt;/strong&gt; Der ganze Stack lässt sich mit einem einzigen Ansible‑Durchlauf automatisieren. Die monatlichen Kosten für den Hetzner‑Server (CX31) betragen 39 €, während ein vergleichbarer GitLab‑Premium‑Plan in AWS leicht über 100 € kostet.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Kubernetes‑Cluster auf günstigen VPS (k3s + Helm)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 3‑Node k3s mit Rancher&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in &lt;/span&gt;1 2 3&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;ssh root@node&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="s2"&gt;"curl -sfL https://get.k3s.io | sh -"&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;span class="c"&gt;# Install Helm&lt;/span&gt;
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
&lt;span class="c"&gt;# Deploy Prometheus&lt;/span&gt;
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm &lt;span class="nb"&gt;install &lt;/span&gt;prom prometheus-community/kube-prometheus-stack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Einschätzung:&lt;/strong&gt; Drei günstige VPS (je 5 €/Monat) ergeben ein produktives K8s‑Cluster für 15 €/Monat – inkl. Monitoring. Im Vergleich zu einem verwalteten GKE‑Cluster (ab 70 €/Monat) spart man mehr als 50 % bei vergleichbarer Skalierbarkeit.&lt;/p&gt;




&lt;h2&gt;
  
  
  Häufige Fehler beim Self‑Hosting
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Unterschätzung der Netzwerk‑Bandbreite&lt;/strong&gt; – Externe Zugriffe über DSL können bei 100 Mbps schnell zur Flaschenhals werden. Lösung: QoS‑Regeln und ggf. ein dedizierter Business‑Internet‑Anschluss.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kein Backup‑Plan&lt;/strong&gt; – Oft werden Snapshots im Schlafmodus vergessen. Nutzen Sie dedizierte Backup‑Software (z. B. &lt;code&gt;restic&lt;/code&gt; + &lt;code&gt;rclone&lt;/code&gt; zu einem günstigen S3‑Kompatibel‑Anbieter).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mangelnde Sicherheitsupdates&lt;/strong&gt; – Ein veraltetes Kernel kann Angreifer öffnen. Automatisieren Sie &lt;code&gt;unattended-upgrades&lt;/code&gt; und führen Sie wöchentliche &lt;code&gt;apt-get update &amp;amp;&amp;amp; apt-get upgrade&lt;/code&gt; durch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fehlende Monitoring‑Alarme&lt;/strong&gt; – Ohne Metriken bleibt ein Ausfall unsichtbar. Installieren Sie Prometheus‑Alertmanager und konfigurieren Sie Slack‑ oder E‑Mail‑Benachrichtigungen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Überdimensionierung&lt;/strong&gt; – Viele starten mit zu viel RAM/CPU, weil Cloud‑Preise irreführend sind. Beginnen Sie klein, messen Sie Auslastung und skalieren Sie dann gezielt.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Fazit &amp;amp; nächster Schritt
&lt;/h2&gt;

&lt;p&gt;Selbst‑hosting kann – bei richtiger Planung – deutlich günstiger sein als jede Public‑Cloud‑Option, weil Sie &lt;strong&gt;Hardware‑Kosten, Daten‑Transfer‑Gebühren und Service‑Gebühren&lt;/strong&gt; kontrollieren. Der größte Mehrwert liegt jedoch in &lt;strong&gt;Transparenz und Daten‑Souveränität&lt;/strong&gt;: Sie entscheiden, wo Ihre Daten landen und wer sie sehen darf.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mein persönlicher Rat:&lt;/strong&gt; Starten Sie mit einem kleinen, aber produktiven Use‑Case (z. B. Nextcloud auf einem alten NAS). Dokumentieren Sie Strom‑ und Bandbreiten‑Kosten für einen Monat, vergleichen Sie diese mit Ihrer aktuellen Cloud‑Rechnung und entscheiden Sie dann, ob Sie das Setup ausbauen wollen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Konkreter nächster Schritt für Sie
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inventarisieren&lt;/strong&gt; – Erstellen Sie eine Liste aller Cloud‑Dienste, die Sie derzeit nutzen, inkl. Monatskosten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pilot‑Projekt&lt;/strong&gt; – Setzen Sie innerhalb von 48 Stunden einen Docker‑Compose‑Stack (Nextcloud) auf einem Raspberry Pi oder einer VM auf.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kosten‑Tracking&lt;/strong&gt; – Nutzen Sie &lt;code&gt;telegraf&lt;/code&gt; + &lt;code&gt;influxdb&lt;/code&gt; für Strom‑ und Netzwerk‑Metriken und visualisieren Sie das Ergebnis in Grafana.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entscheidung&lt;/strong&gt; – Wenn die Pilot‑Kosten 30 % unter Ihren Cloud‑Kosten liegen, planen Sie die Migration der nächsten beiden Services (z. B. GitLab, Prometheus) in Ihr Self‑Hosting‑Umfeld.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Durch konsequente Messung und schrittweisen Roll‑out vermeiden Sie Überraschungen und sichern sich langfristig finanzielle und datenschutztechnische Vorteile.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Hinweis:&lt;/em&gt; Selbst‑Hosting ist kein Allheilmittel. Für extreme Lastspitzen, globale CDN‑Bedarfe oder regulatorisch festgeschriebene Zertifizierungen (z. B. ISO 27001‑Audits) bleibt die Public‑Cloud oft die bessere Wahl. Das Ziel ist ein ausgewogenes &lt;strong&gt;Hybrid‑Modell&lt;/strong&gt;, bei dem Sie die Kern‑Workloads selbst betreiben und nur seltene, burst‑intensive Prozesse in die Cloud auslagern.&lt;/p&gt;

</description>
      <category>selfhosting</category>
      <category>cloudalternative</category>
      <category>kosten</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Firewall-Tuning: Stateful vs. Next-Gen</title>
      <dc:creator>Uhltak Therestismysecret</dc:creator>
      <pubDate>Sat, 30 May 2026 06:00:03 +0000</pubDate>
      <link>https://dev.to/uhltak/firewall-tuning-stateful-vs-next-gen-4i3k</link>
      <guid>https://dev.to/uhltak/firewall-tuning-stateful-vs-next-gen-4i3k</guid>
      <description>&lt;h1&gt;
  
  
  Firewall-Tuning: Stateful vs. Next-Gen Firewall – wann reicht was und wann nicht?
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Einleitung
&lt;/h2&gt;

&lt;p&gt;Firewalls sind ein essentielles Tool für die Netzwerk-Sicherheit. Sie kontrollieren den Datenverkehr zwischen Netzwerken und schützen vor unerwünschtem Zugriff. Es gibt jedoch verschiedene Arten von Firewalls, darunter Stateful Firewalls und Next-Gen Firewalls. In diesem Artikel werden wir uns mit der Frage auseinandersetzen, wann Stateful Firewalls ausreichen und wann Next-Gen Firewalls erforderlich sind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stateful Firewalls
&lt;/h2&gt;

&lt;p&gt;Stateful Firewalls sind die traditionelle Art von Firewalls. Sie überprüfen den Datenverkehr und erlauben oder verwehren ihn basierend auf den Regeln, die in der Firewall-Konfiguration definiert sind. Stateful Firewalls können auch den Zustand von Verbindungen verfolgen und somit sicherstellen, dass nur autorisierte Verbindungen zugelassen werden.&lt;br&gt;
 Ein Beispiel für eine Stateful Firewall ist die Cisco ASA. Die Cisco ASA ist eine beliebte Wahl für Unternehmen, da sie eine Vielzahl von Funktionen bietet, einschließlich Stateful Inspektion, VPN-Unterstützung und Intrusion-Prävention.&lt;br&gt;
Meine Einschätzung: Stateful Firewalls sind eine gute Wahl für kleine bis mittelgroße Unternehmen, die einfache Netzwerk-Sicherheitsanforderungen haben.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next-Gen Firewalls
&lt;/h2&gt;

&lt;p&gt;Next-Gen Firewalls sind eine neue Generation von Firewalls, die eine Vielzahl von Funktionen bietet, einschließlich Stateful Inspektion, Intrusion-Prävention, Web-Filtering und Malware-Schutz. Next-Gen Firewalls sind in der Lage, den Datenverkehr auf Anwendungsebene zu analysieren und somit einen besseren Schutz vor modernen Bedrohungen wie Malware und Advanced Persistent Threats (APTs) bieten.&lt;br&gt;
Ein Beispiel für eine Next-Gen Firewall ist die Palo Alto Networks Next-Generation Firewall. Diese Firewall bietet eine Vielzahl von Funktionen, einschließlich App-ID, User-ID und Content-ID, die es ermöglichen, den Datenverkehr auf Anwendungsebene zu analysieren und somit einen besseren Schutz vor modernen Bedrohungen zu bieten.&lt;br&gt;
Meine Einschätzung: Next-Gen Firewalls sind eine gute Wahl für große Unternehmen oder Organisationen mit komplexen Netzwerk-Sicherheitsanforderungen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Häufige Fehler / Fallstricke
&lt;/h2&gt;

&lt;p&gt;Ein häufiger Fehler bei der Implementierung von Firewalls ist die falsche Konfiguration der Regeln. Dies kann zu Sicherheitslücken führen und den Schutz des Netzwerks beeinträchtigen. Ein weiterer Fehler ist die mangelnde Überwachung des Datenverkehrs, was es Angreifern ermöglichen kann, unbemerkt in das Netzwerk einzudringen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fazit
&lt;/h2&gt;

&lt;p&gt;In diesem Artikel haben wir uns mit der Frage auseinandergesetzt, wann Stateful Firewalls ausreichen und wann Next-Gen Firewalls erforderlich sind. Stateful Firewalls sind eine gute Wahl für kleine bis mittelgroße Unternehmen mit einfacheren Netzwerk-Sicherheitsanforderungen, während Next-Gen Firewalls eine bessere Wahl für große Unternehmen oder Organisationen mit komplexen Netzwerk-Sicherheitsanforderungen sind.&lt;br&gt;
Dein nächster Schritt: Überprüfe deine aktuelle Firewall-Konfiguration und stelle fest, ob du eine Stateful Firewall oder eine Next-Gen Firewall benötigst. Wenn du unsicher bist, zögere nicht, einen Sicherheitsexperten zu konsultieren, um sicherzustellen, dass dein Netzwerk angemessen geschützt ist.&lt;/p&gt;

</description>
      <category>firewalltuning</category>
      <category>statefulfirewall</category>
      <category>nextgenfirewall</category>
      <category>netzwerksicherheit</category>
    </item>
    <item>
      <title>AI Agents und MCP: Warum autonome Agenten scheitern und wie Sie die Kontrolle behalten</title>
      <dc:creator>Uhltak Therestismysecret</dc:creator>
      <pubDate>Fri, 29 May 2026 18:00:04 +0000</pubDate>
      <link>https://dev.to/uhltak/ai-agents-und-mcp-warum-autonome-agenten-scheitern-und-wie-sie-die-kontrolle-behalten-516m</link>
      <guid>https://dev.to/uhltak/ai-agents-und-mcp-warum-autonome-agenten-scheitern-und-wie-sie-die-kontrolle-behalten-516m</guid>
      <description>&lt;h1&gt;
  
  
  AI Agents und MCP – Warum autonome Agenten oft scheitern und wie Sie das Ruder übernehmen
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;„Man gibt einem Computer ein Ziel, er geht in die Küche, kauft sich ein Sandwich und bricht das Haus ab.“&lt;/em&gt; – Das ist das Bild, das viele von uns beim Stichwort &lt;em&gt;autonome Agenten&lt;/em&gt; im Kopf haben. In der Praxis jedoch stellt sich häufig heraus, dass diese „Küchen‑Bots“ mehr Chaos als Ordnung produzieren. In diesem Artikel zerlegen wir das Problem Stück für Stück, zeigen drei echte Code‑Beispiele und geben ein persönliches Fazit, das Sie sofort umsetzen können.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. Was sind AI Agents und was hat das mit MCP zu tun?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Erklärung&lt;/strong&gt;: Ein &lt;em&gt;AI Agent&lt;/em&gt; ist ein Software‑Konstrukt, das basierend auf einem Large Language Model (LLM) eigenständig Entscheidungen trifft – zum Beispiel, ein Tool aufzurufen, Daten zu verarbeiten oder einen Task zu delegieren. &lt;em&gt;MCP&lt;/em&gt; (Machine‑Code‑Proxy) ist dabei das Bindeglied zwischen dem LLM‑Agenten und den System‑Tools. MCP stellt eine standardisierte Schnittstelle bereit, über die der Agent Befehle in einer strukturierten Form (z. B. JSON) sendet, die dann vom Proxy in System‑Calls übersetzt werden.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beispiel‑Snippet (MCP‑Schema)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"run_command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cmd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ls -l /var/log"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"timeout"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Der Agent liefert dieses JSON an den MCP‑Daemon, der dann &lt;code&gt;ls -l /var/log&lt;/code&gt; ausführt und das Ergebnis zurückgibt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Persönliche Einschätzung&lt;/strong&gt;: Viele Entwickler glauben, dass das reine Vorhandensein eines MCP automatisch zuverlässige Tool‑Aufrufe ergibt. Das ist ein Trugschluss – der eigentliche Stolperstein liegt in der &lt;em&gt;Semantik&lt;/em&gt; der übermittelten Befehle und der &lt;em&gt;Sicherheits‑Policies&lt;/em&gt;, die selten von Grund auf definiert werden.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Der technische Ablauf – vom Prompt zum Systemaufruf
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Erklärung&lt;/strong&gt;: Der klassische Flow sieht so aus:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Der Nutzer gibt einen Prompt (z. B. &lt;em&gt;"Erstelle ein Backup von /etc"&lt;/em&gt;) ein.&lt;/li&gt;
&lt;li&gt;Das LLM interpretiert die Absicht und generiert ein MCP‑Payload.&lt;/li&gt;
&lt;li&gt;Der MCP‑Daemon validiert das Payload gegen ein Policy‑Set.&lt;/li&gt;
&lt;li&gt;Der Daemon führt den Befehl aus und leitet die Ausgabe zurück.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Beispiel‑Code (Python‑Agent + MCP‑Client)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Zeige die aktiven Prozesse, die mehr als 200 MB RAM verbrauchen&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="c1"&gt;# 1️⃣ LLM‑Aufruf (hier mit Ollama als lokales Modell)        
&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:11434/api/generate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;llama2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;payload&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;   &lt;span class="c1"&gt;# → MCP‑JSON
&lt;/span&gt;
&lt;span class="c1"&gt;# 2️⃣ MCP‑Client‑Aufruf
&lt;/span&gt;&lt;span class="n"&gt;mcp_resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:8080/execute&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mcp_resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dieses Minimalbeispiel zeigt bereits, wo die &lt;em&gt;Vertrauenszonen&lt;/em&gt; liegen: Das LLM liefert das Payload, das MCP‑Backend prüft es – aber nur, wenn die Policies korrekt definiert sind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Persönliche Einschätzung&lt;/strong&gt;: In meinem täglichen Homelab habe ich das Schema ein einziges Mal ohne Policy verfasst und sofort endlose &lt;code&gt;fork bomb&lt;/code&gt;‑Muster beobachtet. Ohne eine klare &lt;em&gt;Allow‑List&lt;/em&gt; laufen die Agents schnell in unvorhergesehene Systemzustände.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Beispiel 1 – Ein CLI‑Tool per Subprocess starten
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Erklärung&lt;/strong&gt;: Das einfachste Szenario ist, dass ein Agent ein lokales Kommando ausführt – zum Beispiel &lt;code&gt;dig&lt;/code&gt; für DNS‑Abfragen. Der MCP‑Daemon übersetzt das JSON in einen &lt;code&gt;subprocess.run&lt;/code&gt;‑Aufruf.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Konkretes Beispiel (Docker‑Compose‑Setup)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3.9"&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mcp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/mcp-proxy/mcp:latest&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8080:8080"&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ALLOWED_COMMANDS=dig,nslookup"&lt;/span&gt;
  &lt;span class="na"&gt;agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ollama/llama2:latest&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;mcp&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sleep&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;infinity"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Agent‑Payload&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"run_command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cmd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dig +short example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"timeout"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;MCP‑Log‑Auszug&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[INFO] Incoming request: run_command
[DEBUG] Validated command against policy – allowed
[TRACE] Executing: dig +short example.com
[INFO] Command finished, exit code 0, runtime 0.12s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Damit erhalten wir die IP von &lt;code&gt;example.com&lt;/code&gt; zurück.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Persönliche Einschätzung&lt;/strong&gt;: Das Ganze klingt simpel, bis der Agent plötzlich &lt;code&gt;dig -x 0.0.0.0&lt;/code&gt; ausführt und unser internes Netzwerk scannt. Ohne &lt;em&gt;Rate‑Limiting&lt;/em&gt; kann ein gut gemeinter Agent leicht zu einer DoS‑Situation werden.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Beispiel 2 – REST‑API‑Aufruf über MCP
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Erklärung&lt;/strong&gt;: Moderne Tools bieten HTTP‑APIs (z. B. GitHub, JIRA). Hier muss der MCP nicht nur &lt;code&gt;curl&lt;/code&gt; ausführen, sondern auch Header, Auth und JSON‑Body korrekt handhaben.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP‑Payload für GitHub‑Issue‑Erstellung&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http_request"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"POST"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.github.com/repos/me/me/issues"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer {{$GITHUB_TOKEN}}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Accept"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"application/vnd.github+json"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"json"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Automatischer Bug‑Report"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Erzeugt von AI‑Agent am $(date)"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;MCP‑Daemon‑Konfiguration (policy.yaml)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;http_requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;domain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api.github.com"&lt;/span&gt;
    &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;POST"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;max_body_size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10KB&lt;/span&gt;
    &lt;span class="na"&gt;auth_required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Ausgabe (nach erfolgreichem Aufruf)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"response"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"html_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://github.com/me/me/issues/42"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"number"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Persönliche Einschätzung&lt;/strong&gt;: Der Knackpunkt ist die &lt;em&gt;Credential‑Injection&lt;/em&gt;. Wenn das LLM den Token aus einem Prompt ableitet, endet das Projekt in einer Sicherheitskatastrophe. In meiner Praxis habe ich deshalb strikt die Token‑Übergabe über die MCP‑Umgebungsvariablen und niemals im Prompt erlaubt.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Beispiel 3 – Kombination aus LangChain, lokalem LLM und Tool‑Orchestrierung
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Erklärung&lt;/strong&gt;: Fortgeschrittene Agents nutzen Bibliotheken wie &lt;em&gt;LangChain&lt;/em&gt; oder &lt;em&gt;CrewAI&lt;/em&gt;, um mehrere Schritte hintereinander zu planen. Der Agent baut dann einen &lt;em&gt;Chain&lt;/em&gt; aus mehreren MCP‑Aufrufen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Python‑Beispiel (LangChain‑Chain)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain.agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;initialize_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Tool&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain.llms&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Ollama&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="c1"&gt;# ---- MCP‑Wrapper ----
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MCPTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Tool&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MCP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Executes a system command via MCP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;run_command&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;args&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cmd&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timeout&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;}})&lt;/span&gt;
        &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:8080/execute&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# ---- LLM + Agent ----
&lt;/span&gt;&lt;span class="n"&gt;llm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Ollama&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;llama2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;initialize_agent&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nc"&gt;MCPTool&lt;/span&gt;&lt;span class="p"&gt;()],&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;zero-shot-react-description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Prompt: Prüfe das Disk‑Layout und erstelle ein Report‑PDF
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;run df -h &amp;amp;&amp;amp; generate a PDF report with the output&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Erwartete MCP‑Aufrufe&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;df -h&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pandoc -f markdown -t pdf -o /tmp/report.pdf&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Persönliche Einschätzung&lt;/strong&gt;: Das Szenario zeigt, warum &lt;em&gt;Komposability&lt;/em&gt; ein zweischneidiges Schwert ist. Jeder Zwischenschritt erhöht das Risiko einer Fehlkonfiguration. Ich habe deshalb in allen meinen produktiven Chains ein &lt;em&gt;Fallback‑Mechanismus&lt;/em&gt; eingebaut, der bei unbekannten Befehlen die Ausführung stoppt und eine Fehlermeldung zurückgibt.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Typische Fehler – Warum viele Projekte im Chaos enden
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fehler&lt;/th&gt;
&lt;th&gt;Warum er passiert&lt;/th&gt;
&lt;th&gt;Konsequenz&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ungeprüfte Payloads&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent liefert beliebige JSON‑Strukturen&lt;/td&gt;
&lt;td&gt;Arbiträrer Code‑Execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fehlende Rate‑Limits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Keine Beschränkung der Aufrufe&lt;/td&gt;
&lt;td&gt;DoS‑Angriffe, Ressourcen‑Exhaustion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Offene Credential‑Weitergabe&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tokens im Prompt eingebettet&lt;/td&gt;
&lt;td&gt;Kompromittierte Secrets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Keine Output‑Sanitization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rückgabe wird direkt weiterverarbeitet&lt;/td&gt;
&lt;td&gt;Injection‑Angriffe (z. B. Shell‑Injection)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zu breite Allow‑List&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ALLOWED_COMMANDS=*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unkontrollierter Zugriff auf System‑Tools&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Kurz‑Checkliste&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Definieren Sie eine &lt;em&gt;Whitelist&lt;/em&gt; aller erlaubten Aktionen.&lt;/li&gt;
&lt;li&gt;Setzen Sie &lt;em&gt;Timeouts&lt;/em&gt; und &lt;em&gt;Memory‑Limits&lt;/em&gt; im MCP‑Daemon.&lt;/li&gt;
&lt;li&gt;Verwenden Sie &lt;em&gt;Vault&lt;/em&gt;‑ähnliche Mechanismen für Secrets.&lt;/li&gt;
&lt;li&gt;Loggen Sie jedes MCP‑Payload + Response für Auditing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Persönliche Einschätzung&lt;/strong&gt;: In meinem letzten Projekt habe wir alle fünf Punkte vernachlässigt – das Resultat war ein nicht mehr stoppbarer Crash‑Loop, der das gesamte Netzwerk lahmlegte. Ein kurzer Blick auf den MCP‑Log hätte das sofort aufgezeigt.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Best Practices – So halten Sie die Kontrolle wieder zurück
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Policy‑First‑Ansatz&lt;/strong&gt; – Schreiben Sie das Policy‑File bevor Sie einen Agenten bauen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sandbox‑Umgebung&lt;/strong&gt; – Führen Sie MCP zunächst in einem isolierten Container (&lt;code&gt;--security-opt=no-new-privileges&lt;/code&gt;) aus.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditable Logging&lt;/strong&gt; – Integrieren Sie &lt;code&gt;structured-logging&lt;/code&gt; (JSON) und schicken Sie die Logs an Elastic Stack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fail‑Open vs. Fail‑Secure&lt;/strong&gt; – Standardmäßig &lt;em&gt;fail‑secure&lt;/em&gt;: Wenn ein Payload nicht eindeutig ist, wird es verworfen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versionierung&lt;/strong&gt; – Taggen Sie sowohl das LLM‑Modell als auch das MCP‑Binary, damit Sie bei Rollbacks exakt dieselben Versionen wiederherstellen können.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Beispiel‑Docker‑Run (sichere MCP‑Instanz)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; mcp-secure &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--restart&lt;/span&gt; unless-stopped &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--read-only&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tmpfs&lt;/span&gt; /run &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;ALLOWED_COMMANDS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"dig,nslookup"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;POLICY_FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/etc/mcp/policy.yaml"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/policy.yaml:/etc/mcp/policy.yaml:ro &lt;span class="se"&gt;\&lt;/span&gt;
  ghcr.io/mcp-proxy/mcp:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Damit ist das Dateisystem schreibgeschützt und nur die definierte Policy ist einsehbar.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Fazit und konkreter nächster Schritt
&lt;/h2&gt;

&lt;p&gt;AI‑Agents in Kombination mit MCP besitzen ein enormes Potenzial: Sie können Routine‑Tasks automatisieren, komplexe Workflows orchestrieren und sogar in Bereichen wie Incident‑Response glänzen. Aber das gleiche Potenzial birgt das Risiko, dass ein schlecht konfigurierter Agent das gesamte System destabilisiert oder kritische Secrets preisgibt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mein Fazit&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Trust but verify&lt;/em&gt; – Vertrauen Sie dem LLM, prüfen Sie aber jedes generierte Payload.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Policy First&lt;/em&gt; – Lassen Sie das Policy‑File das Herzstück Ihrer Sicherheitsstrategie sein.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Iteratives Testing&lt;/em&gt; – Beginnen Sie mit einem Minimal‑Set an Befehlen, erweitern Sie schrittweise und beobachten Sie das Logging.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Konkreter nächster Schritt für Sie&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Erstellen Sie eine &lt;code&gt;policy.yaml&lt;/code&gt; mit einer White‑List der wirklich benötigten Befehle.&lt;/li&gt;
&lt;li&gt;Deployen Sie den MCP‑Daemon in einem isolierten Docker‑Container (Beispiel‑Befehl oben).&lt;/li&gt;
&lt;li&gt;Implementieren Sie einen einfachen Python‑Agenten, der das Policy‑File nutzt, und testen Sie ihn mit dem &lt;code&gt;dig&lt;/code&gt;‑Beispiel.&lt;/li&gt;
&lt;li&gt;Analysieren Sie die Logs, passen Sie Timeout‑ und Rate‑Limits an und erweitern Sie die Whitelist nur nach Bedarf.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Auf diese Weise verwandeln Sie die anfängliche &lt;em&gt;Küchen‑Katastrophe&lt;/em&gt; in ein kontrolliertes, nachvollziehbares System – und können die echten Vorteile von autonomen AI‑Agents genießen, ohne dem Chaos zu erliegen.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>autonomeagenten</category>
      <category>toolintegration</category>
    </item>
    <item>
      <title>Firewall-Tuning: Stateful vs. Next-Gen - Der ultimative Leitfaden</title>
      <dc:creator>Uhltak Therestismysecret</dc:creator>
      <pubDate>Fri, 29 May 2026 06:00:06 +0000</pubDate>
      <link>https://dev.to/uhltak/firewall-tuning-stateful-vs-next-gen-der-ultimative-leitfaden-42om</link>
      <guid>https://dev.to/uhltak/firewall-tuning-stateful-vs-next-gen-der-ultimative-leitfaden-42om</guid>
      <description>&lt;h1&gt;
  
  
  Firewall-Tuning: Stateful vs. Next-Gen Firewall – wann reicht was und wann nicht?
&lt;/h1&gt;

&lt;p&gt;Hook-Einleitung: Stellen Sie sich vor, Sie sind der Sicherheitschef einer großen Firma und müssen die Netzwerksicherheit sicherstellen. Eine der wichtigsten Entscheidungen, die Sie treffen müssen, ist die Wahl der richtigen Firewall. Aber welche Art von Firewall ist die richtige für Ihr Unternehmen? Stateful oder Next-Gen? In diesem Artikel werden wir diese Frage beantworten und Ihnen zeigen, wie Sie Ihre Firewall für maximale Sicherheit und Leistung optimieren können.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was ist eine Stateful Firewall?
&lt;/h2&gt;

&lt;p&gt;Eine Stateful Firewall ist eine Art von Firewall, die den Zustand von Netzwerkverbindungen überwacht und basierend auf diesem Zustand Entscheidungen trifft, ob Datenpakete durchgelassen oder blockiert werden sollen. Dies bedeutet, dass die Firewall nicht nur den Ursprung und das Ziel von Datenpaketen überprüft, sondern auch den Kontext der Kommunikation.&lt;/p&gt;

&lt;p&gt;Beispiel: Die Cisco ASA-Serie ist ein Beispiel für eine Stateful Firewall. Mit der ASA können Sie Regeln erstellen, die den Datenverkehr basierend auf dem Zustand von Netzwerkverbindungen steuern.&lt;/p&gt;

&lt;p&gt;Meine Einschätzung: Stateful Firewalls sind eine gute Wahl, wenn Sie eine einfache und effektive Lösung für die Netzwerksicherheit benötigen. Sie sind jedoch nicht immer in der Lage, komplexe Angriffe zu erkennen und zu verhindern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was ist eine Next-Gen Firewall?
&lt;/h2&gt;

&lt;p&gt;Eine Next-Gen Firewall ist eine Art von Firewall, die über die Funktionen einer Stateful Firewall hinausgeht und zusätzliche Funktionen wie Intrusion-Prävention, Anwendungserkennung und -steuerung sowie SSL/TLS-Inspektion bietet. Dies ermöglicht es der Firewall, nicht nur den Datenverkehr zu überwachen, sondern auch die Anwendungen und Inhalte zu analysieren.&lt;/p&gt;

&lt;p&gt;Beispiel: Die Palo Alto Networks Next-Gen Firewall ist ein Beispiel für eine Next-Gen Firewall. Mit dieser Firewall können Sie Regeln erstellen, die den Datenverkehr basierend auf Anwendungen, Benutzern und Inhalten steuern.&lt;/p&gt;

&lt;p&gt;Meine Einschätzung: Next-Gen Firewalls sind eine gute Wahl, wenn Sie eine umfassende Lösung für die Netzwerksicherheit benötigen. Sie bieten eine Vielzahl von Funktionen, die es ermöglichen, komplexe Angriffe zu erkennen und zu verhindern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Häufige Fehler / Fallstricke
&lt;/h2&gt;

&lt;p&gt;Ein häufiger Fehler bei der Konfiguration von Firewalls ist die Annahme, dass eine Stateful Firewall ausreicht, um die Netzwerksicherheit zu gewährleisten. Dies kann jedoch zu Problemen führen, wenn komplexe Angriffe auftreten. Ein anderer Fehler ist die mangelnde Überwachung und Wartung der Firewall, was zu Sicherheitslücken führen kann.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fazit mit Dein nächster Schritt
&lt;/h2&gt;

&lt;p&gt;In diesem Artikel haben wir die Unterschiede zwischen Stateful- und Next-Gen-Firewalls besprochen und gezeigt, wie Sie Ihre Firewall für maximale Sicherheit und Leistung optimieren können. Dein nächster Schritt sollte sein, Ihre aktuelle Firewall-Konfiguration zu überprüfen und zu prüfen, ob sie den Anforderungen Ihrer Netzwerksicherheit entspricht. Wenn Sie eine Stateful Firewall verwenden, sollten Sie prüfen, ob eine Next-Gen Firewall eine bessere Wahl für Ihr Unternehmen wäre. Wenn Sie bereits eine Next-Gen Firewall verwenden, sollten Sie sicherstellen, dass sie ordnungsgemäß konfiguriert und gewartet wird.&lt;/p&gt;

</description>
      <category>firewalltuning</category>
      <category>statefulfirewall</category>
      <category>nextgenfirewall</category>
      <category>netzwerksicherheit</category>
    </item>
    <item>
      <title>Zero Trust: Revolution im Netzwerkschutz</title>
      <dc:creator>Uhltak Therestismysecret</dc:creator>
      <pubDate>Thu, 28 May 2026 06:00:04 +0000</pubDate>
      <link>https://dev.to/uhltak/zero-trust-revolution-im-netzwerkschutz-3mim</link>
      <guid>https://dev.to/uhltak/zero-trust-revolution-im-netzwerkschutz-3mim</guid>
      <description>&lt;h1&gt;
  
  
  Zero Trust Architektur: Warum 'never trust, always verify' kein Buzzword ist, sondern ein Paradigmenwechsel
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Einleitung
&lt;/h2&gt;

&lt;p&gt;Die Welt der IT-Sicherheit ist ständig in Bewegung. Neue Bedrohungen tauchen auf, und die alten Methoden scheinen nicht mehr ausreichend. Eine Lösung, die in den letzten Jahren immer mehr an Bedeutung gewinnt, ist die Zero Trust Architektur. Doch was ist Zero Trust, und warum ist es mehr als nur ein Buzzword?&lt;/p&gt;

&lt;h2&gt;
  
  
  Was ist Zero Trust?
&lt;/h2&gt;

&lt;p&gt;Zero Trust ist ein Sicherheitskonzept, das auf dem Prinzip 'never trust, always verify' basiert. Das bedeutet, dass kein Benutzer, kein Gerät und keine Anwendung automatisch vertrauenswürdig ist, sondern dass jede Interaktion überprüft wird. Dieser Ansatz ist notwendig, da die traditionellen Sicherheitsmethoden, wie Firewalls und VPNs, nicht mehr ausreichend sind, um die modernen Bedrohungen abzuwehren.&lt;/p&gt;

&lt;h3&gt;
  
  
  Beispiel: Zero Trust in der Praxis
&lt;/h3&gt;

&lt;p&gt;Ein Beispiel für die Implementierung von Zero Trust ist die Nutzung von Identity and Access Management (IAM)-Lösungen wie Okta oder Microsoft Azure Active Directory. Diese Lösungen ermöglichen es, den Zugriff auf Anwendungen und Ressourcen basierend auf den Identitäten der Benutzer und ihrer Geräte zu kontrollieren. Ein weiteres Beispiel ist die Nutzung von Next-Gen Firewalls wie Palo Alto Networks, die eine granulare Kontrolle über den Datenverkehr ermöglichen.&lt;/p&gt;

&lt;p&gt;Meine Einschätzung: Die Implementierung von Zero Trust ist ein wichtiger Schritt, um die IT-Sicherheit zu verbessern. Es ist jedoch wichtig, dass die Lösungen sorgfältig ausgewählt und konfiguriert werden, um sicherzustellen, dass sie den Anforderungen des Unternehmens entsprechen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vorteile von Zero Trust
&lt;/h2&gt;

&lt;p&gt;Die Vorteile von Zero Trust sind zahlreich. Einige der wichtigsten Vorteile sind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verbesserung der IT-Sicherheit: Durch die Überprüfung jeder Interaktion kann das Risiko von Cyberangriffen minimiert werden.&lt;/li&gt;
&lt;li&gt;Erhöhung der Transparenz: Durch die Überwachung aller Aktivitäten kann ein Unternehmen besser verstehen, was in seinem Netzwerk passiert.&lt;/li&gt;
&lt;li&gt;Reduzierung der Angriffsfläche: Durch die Einschränkung des Zugriffs auf Anwendungen und Ressourcen kann die Angriffsfläche reduziert werden.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Beispiel: Vorteile in der Praxis
&lt;/h3&gt;

&lt;p&gt;Ein Beispiel für die Vorteile von Zero Trust ist die Reduzierung der Angriffsfläche. Durch die Implementierung von Zero Trust kann ein Unternehmen den Zugriff auf sensitive Daten und Anwendungen einschränken, was das Risiko von Cyberangriffen minimiert. Ein weiteres Beispiel ist die Verbesserung der IT-Sicherheit durch die Überprüfung jeder Interaktion. Dies kann durch die Nutzung von Lösungen wie Cisco Umbrella erfolgen, die eine cloud-basierte Sicherheitslösung bietet.&lt;/p&gt;

&lt;p&gt;Meine Einschätzung: Die Vorteile von Zero Trust sind offensichtlich. Es ist jedoch wichtig, dass die Lösungen sorgfältig ausgewählt und konfiguriert werden, um sicherzustellen, dass sie den Anforderungen des Unternehmens entsprechen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Häufige Fehler / Fallstricke
&lt;/h2&gt;

&lt;p&gt;Einige der häufigsten Fehler bei der Implementierung von Zero Trust sind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unzureichende Planung: Die Implementierung von Zero Trust erfordert eine sorgfältige Planung, um sicherzustellen, dass die Lösungen den Anforderungen des Unternehmens entsprechen.&lt;/li&gt;
&lt;li&gt;Fehlende Schulung: Die Schulung der Mitarbeiter ist wichtig, um sicherzustellen, dass sie die Lösungen korrekt nutzen können.&lt;/li&gt;
&lt;li&gt;Unzureichende Überwachung: Die Überwachung aller Aktivitäten ist wichtig, um sicherzustellen, dass die Lösungen korrekt funktionieren.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Fazit
&lt;/h2&gt;

&lt;p&gt;Die Zero Trust Architektur ist ein wichtiger Schritt, um die IT-Sicherheit zu verbessern. Durch die Überprüfung jeder Interaktion kann das Risiko von Cyberangriffen minimiert werden. Es ist jedoch wichtig, dass die Lösungen sorgfältig ausgewählt und konfiguriert werden, um sicherzustellen, dass sie den Anforderungen des Unternehmens entsprechen. Dein nächster Schritt sollte sein, die Implementierung von Zero Trust in Deinem Unternehmen zu überdenken und die geeigneten Lösungen auszuwählen.&lt;/p&gt;

</description>
      <category>zerotrust</category>
      <category>netzwerkschutz</category>
      <category>sicherheit</category>
      <category>itsicherheit</category>
    </item>
    <item>
      <title>Proxmox HA-Cluster: Erfolgreich über Wartungsperioden und Split-Brain</title>
      <dc:creator>Uhltak Therestismysecret</dc:creator>
      <pubDate>Tue, 26 May 2026 18:00:01 +0000</pubDate>
      <link>https://dev.to/uhltak/proxmox-ha-cluster-erfolgreich-uber-wartungsperioden-und-split-brain-1g6c</link>
      <guid>https://dev.to/uhltak/proxmox-ha-cluster-erfolgreich-uber-wartungsperioden-und-split-brain-1g6c</guid>
      <description>&lt;h3&gt;
  
  
  Einleitung
&lt;/h3&gt;

&lt;p&gt;Wenn Sie ein Proxmox-Setup betreiben, ist das Ziel wahrscheinlich die maximale Verfügbarkeit Ihrer Virtualisierungs-Lösung. Ein häufig verwendetes Tool zur Erreichung dieser Ziele ist das Proxmox High Availability Cluster (HA-Cluster). Dieses ermöglicht es Ihnen, ihre KVM-VMs über mehrere Proxmox-Server zu verteilen und so ihre Gesamtleistung zu verbessern. In diesem Artikel geht es darum, wie Sie ein Proxmox HA-Cluster sicher einrichten und was Sie dabei beachten müssen, um Split-Brain-Ereignisse sowie falsche Quorum-Konfigurationen zu vermeiden.&lt;/p&gt;

&lt;p&gt;In diesem Beispiel setzen wir an, dass Sie bereits ein Proxmox Cluster-Szenario eingerichtet haben und nun die Details verbessern wollen.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1 Split-Brain-Verhinderung
&lt;/h3&gt;

&lt;p&gt;Ein häufiges Problem bei Proxmox Clustern ist die sogenannte Split-Brain-Verhinderung. Dies tritt auf, wenn zwei oder mehrere Knoten des Clusters ohne die Zustimmung aller anderen Netzwerkkomponenten in den Failover-Zustand wechseln. Dies führt dazu, dass die VMs und der Datenverkehr an die falsche Stelle umgeleitet werden. Dadurch können wichtige Ressourcen verloren gehen und wichtige Services möglicherweise nicht mehr verfügbar sein.&lt;/p&gt;

&lt;p&gt;Dieses Szenario kann sehr leicht bei einer nicht-direkten Netzwerkkonfiguration eintreten. Die Lösung dafür? Eine direkte Netzwerkkonfiguration im 2. Wahl. 2. Wahl ermöglicht ein direktes, sicheres Networking zwischen Clustern und der Reduzierung der Netzwerkbelastung.&lt;/p&gt;

&lt;p&gt;Sie sollten sich nun fragen: Was ist eine direkte Netzwerkkonfiguration? Bei einer direkten Netzwerkkonfiguration müssen alle Server im Cluster immer direkt miteinander verbunden sein. Versteht man aber nicht sofort, was das in der Praxis bedeutet. Direkte Verbindungen werden von Proxmox also einfach so durch Proxmox im Cluster mit allen anderen Node direkt verbunden. Durch Proxmox werden die Knoten also direkt an einander gesteckt - oder andersausgedrückt: Eine direkte Verbindung ist keine indirekte Verbindung zu einem anderen Proxmox-Node. Durch eine &lt;/p&gt;

</description>
      <category>proxmox</category>
      <category>hacluster</category>
      <category>hochverfuegbarkeit</category>
      <category>kvm</category>
    </item>
    <item>
      <title>Zero Trust Architektur: Die Zukunft der Netzwerksicherheit</title>
      <dc:creator>Uhltak Therestismysecret</dc:creator>
      <pubDate>Tue, 26 May 2026 06:00:04 +0000</pubDate>
      <link>https://dev.to/uhltak/zero-trust-architektur-die-zukunft-der-netzwerksicherheit-no2</link>
      <guid>https://dev.to/uhltak/zero-trust-architektur-die-zukunft-der-netzwerksicherheit-no2</guid>
      <description>&lt;h1&gt;
  
  
  Zero Trust Architektur: Die Zukunft der Netzwerksicherheit
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Einleitung
&lt;/h2&gt;

&lt;p&gt;Die traditionelle Sicherheitsarchitektur basiert auf dem Vertrauen in die Authentifizierung von Benutzern und Geräten. Wenn ein Benutzer authentifiziert wird, erhält er Zugriff auf das gesamte Netzwerk. Diese Herangehensweise ist jedoch anfällig für Angriffe, wenn ein Angreifer Zugriff auf die Authentifizierung erhält. Die Zero Trust Architektur (ZTA) ist ein neues Paradigma, das auf dem Prinzip 'never trust, always verify' basiert. Dies bedeutet, dass jeder Zugriff auf das Netzwerk und seine Ressourcen ständig überwacht und verifiziert wird, unabhängig von der Authentifizierung.&lt;/p&gt;

&lt;h2&gt;
  
  
  Warum ist Zero Trust Architektur notwendig?
&lt;/h2&gt;

&lt;p&gt;In der heutigen Welt ist die traditionelle Sicherheitsarchitektur nicht mehr ausreichend, um die komplexen Bedrohungen zu bekämpfen. Mit der zunehmenden Verbreitung von Cloud-Diensten, IoT-Geräten und mobilen Anwendungen sind die Netzwerke nicht mehr klar definiert. Ein Angreifer kann leicht in das Netzwerk eindringen, indem er schwache Passwörter oder ungesicherte Schnittstellen ausnutzt. Die Zero Trust Architektur ist notwendig, um diese Lücken zu schließen und das Netzwerk zu schützen.&lt;/p&gt;

&lt;p&gt;Meine Einschätzung: Die Zero Trust Architektur ist ein notwendiger Schritt in Richtung einer sichereren Netzwerkinfrastruktur. Durch die ständige Überwachung und Verifizierung kann man die Angriffsfläche minimieren und die Sicherheit erhöhen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wie funktioniert Zero Trust Architektur?
&lt;/h2&gt;

&lt;p&gt;Die Zero Trust Architektur basiert auf drei Hauptkomponenten:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Identität&lt;/strong&gt;: Jeder Benutzer und jedes Gerät muss identifiziert werden, bevor es Zugriff auf das Netzwerk erhält.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentifizierung&lt;/strong&gt;: Die Authentifizierung erfolgt durch eine Kombination von Faktoren, wie z.B. Benutzername und Passwort, Zwei-Faktor-Authentifizierung oder biometrische Authentifizierung.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autorisierung&lt;/strong&gt;: Die Autorisierung definiert, welche Ressourcen der Benutzer oder das Gerät Zugriff auf hat.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Beispiel: Die Firma Google verwendet eine Zero Trust Architektur, um ihre Mitarbeiter und Geräte zu schützen. Jeder Mitarbeiter muss sich mit seinem Benutzernamen und Passwort authentifizieren, bevor er Zugriff auf die Google-Netzwerke erhält. Die Autorisierung erfolgt durch eine Kombination von Faktoren, wie z.B. der Rolle des Mitarbeiters und den Ressourcen, auf die er Zugriff benötigt.&lt;/p&gt;

&lt;p&gt;Meine Einschätzung: Die Implementierung einer Zero Trust Architektur kann komplex sein, aber die Vorteile sind es wert. Durch die ständige Überwachung und Verifizierung kann man die Sicherheit erhöhen und die Angriffsfläche minimieren.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beispiele für Zero Trust Architektur
&lt;/h2&gt;

&lt;p&gt;Es gibt viele Beispiele für Zero Trust Architektur in der Praxis. Einige Beispiele sind:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Azure Active Directory (Azure AD)&lt;/strong&gt;: Azure AD ist ein cloudbasiertes Identitäts- und Zugriffsverwaltungssystem, das eine Zero Trust Architektur implementiert.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Cloud Identity and Access Management (IAM)&lt;/strong&gt;: Google Cloud IAM ist ein Dienst, der eine Zero Trust Architektur implementiert, um die Identität und den Zugriff auf Google Cloud-Ressourcen zu verwalten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cisco ISE&lt;/strong&gt;: Cisco ISE ist ein Netzwerkzugriffskontrollsystem, das eine Zero Trust Architektur implementiert, um den Zugriff auf das Netzwerk zu verwalten.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meine Einschätzung: Diese Beispiele zeigen, dass die Zero Trust Architektur nicht nur ein Buzzword ist, sondern eine reale Lösung für die Sicherheitsherausforderungen der heutigen Welt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Häufige Fehler / Fallstricke
&lt;/h2&gt;

&lt;p&gt;Es gibt einige häufige Fehler und Fallstricke, die man bei der Implementierung einer Zero Trust Architektur vermeiden sollte:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Unzureichende Identifizierung&lt;/strong&gt;: Die Identifizierung von Benutzern und Geräten ist entscheidend für die Zero Trust Architektur. Wenn die Identifizierung unzureichend ist, kann die Sicherheit nicht garantiert werden.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unzureichende Authentifizierung&lt;/strong&gt;: Die Authentifizierung muss stark und mehrfach sein, um die Sicherheit zu garantieren.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unzureichende Autorisierung&lt;/strong&gt;: Die Autorisierung muss klar definiert sein, um die Ressourcen zu schützen.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meine Einschätzung: Die Implementierung einer Zero Trust Architektur erfordert eine sorgfältige Planung und Umsetzung. Es ist wichtig, alle Aspekte der Sicherheit zu berücksichtigen, um die Angriffsfläche zu minimieren.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fazit
&lt;/h2&gt;

&lt;p&gt;Die Zero Trust Architektur ist ein notwendiger Schritt in Richtung einer sichereren Netzwerkinfrastruktur. Durch die ständige Überwachung und Verifizierung kann man die Angriffsfläche minimieren und die Sicherheit erhöhen. Es gibt viele Beispiele für Zero Trust Architektur in der Praxis, und es ist wichtig, alle Aspekte der Sicherheit zu berücksichtigen, um die Implementierung erfolgreich umzusetzen.&lt;/p&gt;

&lt;p&gt;Dein nächster Schritt: Informieren Sie sich über die verschiedenen Lösungen und Tools, die eine Zero Trust Architektur implementieren können. Berücksichtigen Sie die spezifischen Sicherheitsanforderungen Ihres Unternehmens und planen Sie die Implementierung sorgfältig, um die Angriffsfläche zu minimieren und die Sicherheit zu erhöhen.&lt;/p&gt;

</description>
      <category>zerotrustarchitektur</category>
      <category>netzwerksicherheit</category>
      <category>nevertrustalwaysverify</category>
      <category>sicherheitsparadigmenwechsel</category>
    </item>
    <item>
      <title>CI/CD ohne YAML-Hölle: Dagger.io revolutioniert die DevOps-Welt</title>
      <dc:creator>Uhltak Therestismysecret</dc:creator>
      <pubDate>Mon, 25 May 2026 18:00:01 +0000</pubDate>
      <link>https://dev.to/uhltak/cicd-ohne-yaml-holle-daggerio-revolutioniert-die-devops-welt-2elb</link>
      <guid>https://dev.to/uhltak/cicd-ohne-yaml-holle-daggerio-revolutioniert-die-devops-welt-2elb</guid>
      <description>&lt;h1&gt;
  
  
  CI/CD ohne YAML-Hölle: Dagger.io revolutioniert die DevOps-Welt
&lt;/h1&gt;

&lt;p&gt;Einige Jahre zurück war es noch eine Selbstverständlichkeit: CI/CD-Maßnahmen bestanden aus einer zermürbenden Schleife von Code-Commits, Pull-Requests, Code-Reviews und schließlich der manuellen Durchführung von Build- und Deployment-Operationen. Was genau bedeutet das? Die Entwickler steckten ihr Wissen in einen Code-Editor, der Developer auf der anderen Seite war verantwortlich für die Durchführung der Build-Prozesse und schließlich gab es noch die DevOps-Team Member*, die sich um die Containerisierung und Deployment-Schnittstellen kümmerten. Diese Praxis war mühsam und nicht mehr zeitgemäß. Doch dank Dagger-IO gibt es nun Hoffnung bei Entwicklungsteams weltweit.&lt;/p&gt;

&lt;h2&gt;
  
  
  CI/CD mit Dagger.io
&lt;/h2&gt;

&lt;p&gt;Dagger.io ist ein leistbares, Python-basiertes Framework, das Continuous Integration und Continuous Deployment auf eine einfache, intuitive Weise löst. Genauer gesagt kombiniert es Code-First Pipelines und DevOps-Maßnahmen in einer verschmolzenen Unity, um alle Beteiligten umständlose Arbeitsplätze zu ermöglichen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wie funktioniert es?
&lt;/h3&gt;

&lt;p&gt;Um beispielsweise ein Deployment der eigenen Anwendung durchzuführen, müssen Sie lediglich einen simple Daggerio-Workshop erstellen:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
python
tasks:
- name: build
  action: /usr/bin/docker-compose build

- name: test
  action: /usr/bin/docker-compose run --rm app python -m unittest tests

- name: deploy
  action: /usr/bin/kubectl apply -f k8s/deployment.yaml 

  on succeed:
    output: 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>daggerio</category>
      <category>cicd</category>
      <category>codefirstpipelines</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
