<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>T-Pot on Kabelbruch</title><link>https://kabelbruch.de/tags/t-pot/</link><description>Recent content in T-Pot on Kabelbruch</description><image><title>Kabelbruch</title><url>https://kabelbruch.de/og-image.png</url><link>https://kabelbruch.de/og-image.png</link></image><generator>Hugo</generator><language>de-DE</language><lastBuildDate>Sat, 31 Oct 2026 17:00:00 +0100</lastBuildDate><atom:link href="https://kabelbruch.de/tags/t-pot/index.xml" rel="self" type="application/rss+xml"/><item><title>Mein Honeypot war zu gut: T-Pot zu Hause – und die Mail vom Provider</title><link>https://kabelbruch.de/posts/honeypot-t-pot-zuhause/</link><pubDate>Sat, 31 Oct 2026 17:00:00 +0100</pubDate><guid>https://kabelbruch.de/posts/honeypot-t-pot-zuhause/</guid><description>T-Pot als Honeypot in einer DMZ am Heimanschluss: Aufbau, eine fiese Docker-Falle und warum nach zwei Wochen die Sicherheitswarnungen vom Provider kamen.</description><content:encoded><![CDATA[<p>Ich wollte sehen, was im Internet so auf meine öffentliche IP einprasselt, und habe mir einen Honeypot in die DMZ gestellt. Nach knapp zwei Wochen war er wieder weg – nicht wegen eines Angreifers, sondern wegen meines Providers.</p>
<h2 id="worum-gehts">Worum geht&rsquo;s?</h2>
<p>Wer einen Port ins Internet aufmacht, merkt schnell: Man ist nie allein. Scanner klopfen rund um die Uhr an, Bots probieren Passwörter durch, irgendwer will immer irgendwas. Das weiß man theoretisch. Ich wollte mir aber einmal selbst einen Eindruck verschaffen: Was kommt eigentlich auf einem ganz normalen privaten Anschluss an – einem, der nirgendwo öffentlich steht, keine Website hostet und den eigentlich niemand kennt? Und was machen Angreifer, wenn sie glauben, sie hätten es geschafft?</p>
<p>Genau dafür gibt es <strong>Honeypots</strong>: Systeme, die absichtlich verwundbar aussehen, Angreifer anlocken und dabei alles mitschreiben. Echte Daten liegen darauf nicht – der ganze Zweck ist, angegriffen zu werden.</p>
<p>Meine Wahl fiel auf <strong>T-Pot</strong> von der Telekom. T-Pot ist keine einzelne Falle, sondern ein ganzer Zoo: Dutzende Honeypots in Docker-Containern, die alle möglichen Dienste vorspielen – SSH, Telnet, RDP, Webserver, Datenbanken, sogar Drucker. Dazu kommen Auswertung mit Kibana und eine animierte Angriffskarte. Alles in einem <code>install.sh</code>.</p>
<h2 id="voraussetzungen">Voraussetzungen</h2>
<ul>
<li><strong>Hypervisor:</strong> Proxmox VE, der Honeypot läuft als eigene VM</li>
<li><strong>VM:</strong> 4 vCPU, 16 GB RAM (ohne Ballooning), 256 GB Platte – das entspricht den Mindestanforderungen von T-Pot für eine vollständige Installation („Hive“)</li>
<li><strong>Betriebssystem:</strong> Debian 13 netinst, nur SSH-Server und Standard-Werkzeuge</li>
<li><strong>T-Pot:</strong> Installation per <code>install.sh</code> aus dem GitHub-Repo der Telekom, Stand Oktober 2026</li>
<li><strong>Firewall:</strong> FortiGate mit eigenem DMZ-Netz</li>
<li><strong>Proxmox-Snapshots</strong> vor und nach der Installation</li>
</ul>
<p>Warum eine VM und kein eigener Mini-PC? Snapshots, schnell wegwerfbar, kein zusätzliches Gerät. Und ich wollte den Honeypot bewusst nicht auf dieselbe Kiste setzen wie andere Dienste, die im Ernstfall weiterlaufen sollen.</p>
<h2 id="umsetzung">Umsetzung</h2>
<h3 id="schritt-1-eine-dmz-die-ihren-namen-verdient">Schritt 1: Eine DMZ, die ihren Namen verdient</h3>
<p>Ein Honeypot ist per Definition ein System, das man Angreifern zum Fraß vorwirft. Er darf also auf keinen Fall Zugriff auf den Rest des Heimnetzes haben. Deshalb bekommt er ein eigenes Netz, eine <strong>DMZ</strong> (demilitarisierte Zone): ein Netzsegment, das von außen erreichbar ist, aber nicht nach innen darf.</p>
<p>Die Regeln auf der FortiGate, sinngemäß:</p>
<table>
	<thead>
			<tr>
					<th>Richtung</th>
					<th>Was</th>
					<th>Erlaubt?</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Internet → Honeypot</td>
					<td>(fast) alle Ports</td>
					<td>ja – das ist der Sinn der Sache</td>
			</tr>
			<tr>
					<td>Honeypot → Internet</td>
					<td>Updates, Datenweitergabe an die Community</td>
					<td>ja, mit vollem Log</td>
			</tr>
			<tr>
					<td>Honeypot → Heimnetz</td>
					<td>alles</td>
					<td><strong>nein</strong>, mit vollem Log – jeder Treffer ist ein Alarm</td>
			</tr>
			<tr>
					<td>Client-Netz → Honeypot</td>
					<td>nur die Management-Ports</td>
					<td>ja</td>
			</tr>
	</tbody>
</table>
<p>Die Management-Oberfläche von T-Pot liegt auf hohen Ports: <strong>64295</strong> für SSH, <strong>64297</strong> für die Weboberfläche. Die sind nur aus meinem Client-Netz und über VPN erreichbar. Port 22 gehört ab der Installation dem SSH-Honeypot – wer sich nach dem Setup gewohnheitsmäßig per <code>ssh</code> auf Port 22 verbindet, landet in der Falle und nicht auf dem System.</p>
<p>Zwei Entscheidungen, über die ich länger nachgedacht habe:</p>
<ul>
<li><strong>Kein Traffic-Log auf der Regel „Internet → Honeypot“.</strong> Sonst flutet der Honeypot mein zentrales Log-System. T-Pot protokolliert ohnehin alles selbst.</li>
<li><strong>Kein IPS auf dieser Regel.</strong> Ein Intrusion Prevention System würde genau die Angriffe blocken, die ich sehen will.</li>
</ul>
<p>Die Regeln <em>aus</em> der DMZ heraus loggen dagegen voll. Wenn der Honeypot plötzlich anfängt, selbst Verbindungen aufzubauen, die nicht nach Updates aussehen, will ich das wissen.</p>
<h3 id="schritt-2-portweiterleitung-auf-der-fortigate--mit-central-nat">Schritt 2: Portweiterleitung auf der FortiGate – mit Central NAT</h3>
<p>Damit der Honeypot von außen erreichbar ist, braucht es Portweiterleitungen, auf der FortiGate <strong>VIPs</strong> (Virtual IPs) genannt. Ich habe TCP 1–64000 und den UDP-Bereich weitergeleitet, mit einer Ausnahme für einen UDP-Port, den mein VPN braucht.</p>
<p>Mein Gerät arbeitet mit <strong>Central NAT</strong>, und da gibt es eine Eigenheit, über die ich gestolpert bin:</p>
<ul>
<li>Die VIPs gehören <strong>nicht</strong> in die Firewall-Regel. Als Ziel trägt man die <strong>echte interne Adresse</strong> des Honeypots ein.</li>
<li>Die VIPs sind aktiv, <strong>sobald sie existieren</strong>. Ohne passende Regel greift zwar das implizite „Deny“ – trotzdem lohnt es sich, das im Kopf zu haben.</li>
</ul>
<p>Die Regel „Internet → Honeypot“ habe ich erst aktiviert, als alles andere getestet war.</p>
<h3 id="schritt-3-debian-und-t-pot-installieren">Schritt 3: Debian und T-Pot installieren</h3>
<p>Die VM bekommt ein minimales Debian 13, eine feste IP in der DMZ (bei mir im Beispiel <code>10.0.99.10</code>), öffentliche DNS-Server und einen normalen Benutzer mit <code>sudo</code>. Root-Login ist gesperrt.</p>
<p>Vor der Installation ein Snapshot, dann T-Pot:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://github.com/telekom-security/tpotce
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> tpotce
</span></span><span class="line"><span class="cl">./install.sh
</span></span></code></pre></div><p>Der Installer fragt den Typ ab – ich habe <strong>Hive</strong> gewählt, also die Vollinstallation mit allen Honeypots und der Auswertung auf einer Maschine. Danach: Neustart, Snapshot, fertig.</p>
<p>Fertig? Nicht ganz.</p>
<h3 id="schritt-4-die-docker-falle">Schritt 4: Die Docker-Falle</h3>
<p>Nach der Installation kam ich von meinem PC aus nicht mehr an die Management-Ports. Kein „Connection refused“, sondern einfach Timeout.</p>
<p>Die Firewall war schnell entlastet: Mit <code>diagnose debug flow</code> sah ich, dass die Pakete erlaubt und korrekt in die DMZ geroutet wurden. Danach kamen nur noch wiederholte SYN-Pakete mit derselben Sequenznummer – die VM hat schlicht nie geantwortet. Auf der VM selbst lauschten <code>sshd</code> und die Weboberfläche brav auf ihren Ports.</p>
<p>Die Lösung fand ich mit einem einzigen Befehl auf der VM:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ip route get 192.168.68.20
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">192.168.68.20 dev br-1a2b3c4d5e6f src 192.168.64.1
</span></span></code></pre></div><p>Die VM wollte die Antwort an meinen PC in eine <strong>Docker-Bridge</strong> schicken statt zum Gateway.</p>
<p>Der Grund: T-Pot legt rund 25 Docker-Netze an, und Docker vergibt deren Subnetze standardmäßig aus seinem Pool <strong>192.168.x.0/20</strong>. Eines davon war <code>192.168.64.0/20</code> – das reicht von <code>192.168.64.0</code> bis <code>192.168.79.255</code>. Und mittendrin lag mein Client-Netz. Aus Sicht der VM war mein PC also „lokal“ hinter einer Docker-Bridge.</p>
<p>Die Lösung: Docker einen Adressbereich geben, den es im Heimnetz garantiert nicht gibt, und die Netze neu anlegen lassen.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span> <span class="nt">&#34;default-address-pools&#34;</span><span class="p">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nt">&#34;base&#34;</span><span class="p">:</span> <span class="s2">&#34;172.16.0.0/12&#34;</span><span class="p">,</span> <span class="nt">&#34;size&#34;</span><span class="p">:</span> <span class="mi">24</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span>
</span></span></code></pre></div><p>Das kommt nach <code>/etc/docker/daemon.json</code>. Danach:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo systemctl stop tpot
</span></span><span class="line"><span class="cl">sudo systemctl restart docker
</span></span><span class="line"><span class="cl">sudo docker network prune -f
</span></span><span class="line"><span class="cl">sudo systemctl start tpot
</span></span><span class="line"><span class="cl">ip route get 192.168.68.20
</span></span></code></pre></div><p>Jetzt geht die Route wieder über das Gateway der DMZ, und das überlebt auch Neustarts – inklusive des täglichen Auto-Reboots, den T-Pot von Haus aus macht.</p>
<p>Ein kleiner Trick am Rande: Solange ich nicht per SSH auf die VM kam, habe ich über den <strong>QEMU Guest Agent</strong> von Proxmox aus gearbeitet. Damit lassen sich Befehle direkt in der VM ausführen, ganz ohne Netzwerk und ohne Konsole:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">qm guest <span class="nb">exec</span> &lt;VMID&gt; -- bash -c <span class="s1">&#39;ip route get 192.168.68.20&#39;</span>
</span></span></code></pre></div><h3 id="schritt-5-scharf-schalten">Schritt 5: Scharf schalten</h3>
<p>Mit funktionierendem Management-Zugang habe ich die Regel „Internet → Honeypot“ aktiviert. Ab da war der Honeypot live.</p>
<p>Zwei Dinge, die T-Pot von Haus aus mitbringt und die man kennen sollte:</p>
<ul>
<li><strong>Täglicher Neustart:</strong> Nachts stoppt T-Pot seine Dienste, räumt Container und Images auf und startet neu.</li>
<li><strong>Datenweitergabe:</strong> Standardmäßig schickt T-Pot die gesammelten Angriffsdaten an den Sicherheitstacho der Telekom. Das lässt sich abschalten. Ich habe es angelassen – genau dafür ist so eine Community ja da.</li>
</ul>
<h2 id="was-kam-an">Was kam an?</h2>
<p>Kurz gesagt: viel. Über den Tag verteilt waren es <strong>mehrere tausend Angriffe</strong> – die genaue Zahl weiß ich nicht mehr, und mit der VM sind auch die Auswertungen verschwunden. Was mir aber im Kopf geblieben ist: Der Löwenanteil ging auf <strong>SSH</strong> und <strong>RDP</strong>. Logisch eigentlich – wer eine Fernwartung erwischt, hat im besten Fall gleich den ganzen Rechner.</p>
<p>Woher die Angriffe kamen, lasse ich hier bewusst weg. Eine Länderliste sagt wenig darüber aus, wer wirklich dahintersteckt – Angreifer nutzen gern fremde Server und gekaperte Geräte irgendwo auf der Welt – und lädt eher zu falschen Schlüssen ein.</p>
<h2 id="die-mail-vom-provider">Die Mail vom Provider</h2>
<p>Knapp zwei Wochen nach dem Start bekam ich Post vom Sicherheitsteam meines Providers. Nicht eine Mail, sondern mehrere – für verschiedene Dienste: <strong>SSH</strong>, <strong>RDP</strong>, <strong>SNMP</strong> und mein Favorit: ein offener <strong>IPP-Druckdienst</strong> auf Port 631. Bei IPP war es sogar schon die <em>wiederholte</em> Warnung.</p>
<p>Sinngemäß: An meinem Anschluss sei ein Dienst öffentlich erreichbar, das sei ein Sicherheitsrisiko, ich solle die Software aktualisieren, den Zugriff auf interne Netze beschränken oder ein VPN nutzen.</p>
<p>Der Witz daran: Ich habe gar keinen Drucker im Internet. Das war T-Pot, der genau so tat, als hätte ich einen. Die Scanner, auf die sich Provider stützen, haben also genau das gefunden, was der Honeypot ihnen vorgaukeln sollte – einen scheinbar verwundbaren Rechner. Man könnte sagen: Mein Honeypot war zu gut.</p>
<p>Für mich war damit klar: Das ist es nicht wert. Ein Provider, der wiederholt Sicherheitswarnungen schickt, kann im Zweifel auch den Anschluss einschränken. Und mein Internetanschluss ist im Alltag deutlich wichtiger als ein Experiment.</p>
<h2 id="der-rückbau">Der Rückbau</h2>
<p>Ich bin in drei Schritten vorgegangen:</p>
<ol>
<li>
<p><strong>Sofort die Tür zu:</strong> Regel „Internet → Honeypot“ deaktiviert und gelöscht, die Portweiterleitungen gelöscht und bestehende Verbindungen zum Honeypot auf der Firewall beendet. Danach war von außen wieder nur der eine VPN-Port erreichbar.</p>
</li>
<li>
<p><strong>VM weg:</strong> Die VM samt Snapshots und Festplatte gelöscht:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">qm destroy &lt;VMID&gt; --purge --destroy-unreferenced-disks <span class="m">1</span>
</span></span></code></pre></div></li>
<li>
<p><strong>Aufräumen:</strong> Alle übrigen Regeln und Objekte für die DMZ auf der FortiGate entfernt, inklusive des Interfaces. Nichts soll herumliegen, was später jemand für eine aktive Regel hält.</p>
</li>
</ol>
<h2 id="nach-dem-abschalten-die-liste-vergisst-nicht">Nach dem Abschalten: Die Liste vergisst nicht</h2>
<p>Spannend wurde es noch einmal <em>nach</em> dem Rückbau. Solange der Honeypot lief, hat meine Firewall von außen kaum etwas geblockt – fast alles wurde ja an den Honeypot durchgereicht, und für diese Regel hatte ich das Logging bewusst abgeschaltet. In meinem Grafana-Dashboard sah das aus wie ein ruhiger Anschluss: eine Handvoll geblockter Verbindungen pro halbe Stunde.</p>
<p>Zum Vergleich: In den Tagen <em>vor</em> dem Honeypot hat die Firewall rund <strong>20 000 eingehende Verbindungsversuche am Tag</strong> geblockt. Das ist das ganz normale Hintergrundrauschen, das jeder Anschluss im Internet abbekommt – ein paar Dutzend bis ein paar Hundert pro Messintervall, mit gelegentlichen Spitzen, wenn mal ein Scanner vorbeikommt.</p>
<p><img alt="Geblockte eingehende Verbindungen vor dem Honeypot: niedriges, gleichmäßiges Grundrauschen mit wenigen Spitzen" loading="lazy" src="/posts/honeypot-t-pot-zuhause/blocks-vorher.png"></p>
<p>Mit dem Abschalten war die Durchreiche weg – und alles, was vorher im Honeypot gelandet war, prallte jetzt an der Firewall ab. Wie schnell das ging, zeigt mein Dashboard minutengenau: Um kurz vor zwei Uhr nachts habe ich die Weiterleitung gelöscht – und ab dieser Minute prasselten die Blocks herein, bis zu zehn pro Sekunde. In den ersten zehn Minuten waren es schon rund <strong>2 200 geblockte Versuche</strong>, ohne Anlaufzeit, als hätten die Scanner nur darauf gewartet. In den ersten gut zweieinhalb Tagen nach dem Abschalten hat die Firewall rund <strong>900 000 eingehende Verbindungsversuche</strong> geblockt: knapp 600 000 über TCP, gut 300 000 über UDP. Das sind grob <strong>350 000 am Tag</strong> – etwa das <strong>Siebzehnfache</strong> von vorher.</p>
<p><img alt="Geblockte eingehende Verbindungen nach dem Abschalten: ab dem 29.10. dauerhaft rund 2 000 pro Messintervall, TCP und UDP" loading="lazy" src="/posts/honeypot-t-pot-zuhause/blocks-nachher.png"></p>
<p>Und so sieht der Moment des Abschaltens aus der Nähe aus – bis kurz vor zwei Uhr nichts, dann ging es los:</p>
<p><img alt="Nahaufnahme des Abschaltmoments: Nach 01:56 Uhr setzen die Blocks schlagartig ein, bis zu zehn pro Sekunde" loading="lazy" src="/posts/honeypot-t-pot-zuhause/blocks-abschaltung.png"></p>
<p>Der Grund liegt auf der Hand: Nach knapp zwei Wochen, in denen meine IP brav auf alles geantwortet hat, steht sie offensichtlich auf den Listen von Scannern und Angreifern als „lohnendes Ziel“. Die klopfen jetzt weiter an, auch wenn niemand mehr aufmacht. Ein Honeypot hinterlässt also Spuren, die länger halten als der Honeypot selbst.</p>
<h2 id="stolperfallen--learnings">Stolperfallen &amp; Learnings</h2>
<p><strong>Docker und 192.168er-Heimnetze vertragen sich schlecht.</strong> Docker nimmt sich standardmäßig Subnetze aus <code>192.168.x.0/20</code>, und die können echte Netze im Heimnetz überdecken. Auf jedem Docker-Host im Heimnetz setze ich ab jetzt <code>default-address-pools</code> – und zwar <em>bevor</em> der erste Container läuft.</p>
<p><strong>Wenn die Firewall „erlaubt“ sagt, liegt es oft am Ziel.</strong> <code>diagnose debug flow</code> hat mir viel Suchen an der falschen Stelle erspart. Pakete gehen raus, keine Antwort kommt zurück – dann lohnt der Blick auf die Routen des Zielsystems.</p>
<p><strong>Central NAT tickt anders.</strong> VIPs gehören nicht in die Regel, Ziel ist die echte Adresse. Wer vom klassischen Modus kommt, sucht da schnell an der falschen Stelle.</p>
<p><strong>Kein IPS und kein Traffic-Log auf der Eingangsregel – aber volles Log auf allem, was rausgeht.</strong> Der Honeypot soll angegriffen werden. Spannend wird es, wenn er selbst anfängt, Verbindungen aufzubauen.</p>
<p><strong>Ein Honeypot am Privatanschluss fällt auf.</strong> Er beantwortet die ganze öffentliche IP, sieht für Scanner wie ein schlecht gewartetes System aus und landet damit in den Berichten, die Provider auswerten. Das ist eigentlich gut so – die Sicherheitsmeldungen funktionieren. Nur eben auch für mich. Wer das ausprobieren will: vorher mit dem Provider reden oder gleich einen eigenen Server mit eigener IP nehmen.</p>
<p><strong>Ein Honeypot hat Nachwirkungen.</strong> Nach dem Abschalten bleibt die IP auf den Listen der Scanner, und die Firewall hat danach deutlich mehr zu tun als vorher.</p>
<h2 id="fazit">Fazit</h2>
<p>Ich habe einiges gelernt – über DMZ-Regeln, Central NAT, Docker-Netze und darüber, wie schnell man im Internet auffällt. Nur aufgeschrieben habe ich zu wenig: Die genauen Zahlen sind mit der VM verschwunden. Abgebrochen habe ich trotzdem gern: Eine Sicherheitswarnung vom Provider nach der anderen ist kein Zustand, den man für ein Experiment am Hausanschluss riskieren sollte.</p>
<h2 id="was-als-nächstes-kommt">Was als Nächstes kommt</h2>
<ul>
<li>Wenn ich es noch einmal mache, dann nicht mehr zu Hause, sondern auf einem eigenen Server mit eigener IP – und diesmal mit Notizen und Screenshots von Anfang an.</li>
<li>Die Erkenntnisse zur DMZ und zu Docker-Netzen fließen in die anderen Dienste in meinem Homelab ein.</li>
</ul>
]]></content:encoded></item></channel></rss>