[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"public-branding":3,"content-de-rcon-security-hardening":8,"public-ads-config":1215},{"siteName":4,"primaryColor":5,"accentColor":6,"faviconUrl":7,"logoUrl":7},"KiroCloud","#ffffff","#888888","",{"id":9,"title":10,"author":11,"body":12,"category":11,"description":1200,"extension":1201,"lastUpdated":11,"meta":1202,"navigation":150,"order":1203,"path":1204,"readTime":11,"seo":1205,"stem":1213,"__hash__":1214},"docs\u002Fdocs\u002Fde\u002Frcon-security-hardening.md","[object Object]",null,{"type":13,"value":14,"toc":1192},"minimark",[15,20,41,44,47,52,55,81,83,87,90,99,101,105,108,947,949,956,959,1023,1025,1029,1036,1185,1188],[16,17,19],"h1",{"id":18},"minecraft-rcon-protokoll-absicherung-socket-hardening-anti-brute-force","Minecraft RCON Protokoll Absicherung: Socket-Hardening & Anti-Brute-Force",[21,22,23,24,28,29,33,34,33,37,40],"p",{},"Das ",[25,26,27],"strong",{},"Remote Console (RCON)"," Protokoll von Minecraft ermöglicht die Ausführung beliebiger Server-Befehle über eine TCP-Verbindung. Ein Angreifer, der ein RCON-Passwort knackt, erhält uneingeschränkte Administrator-Rechte auf dem Server (",[30,31,32],"code",{},"op",", ",[30,35,36],{},"stop",[30,38,39],{},"whitelist off",", Ausführung von NBT-Befehlen). Da das originale Source-RCON-Protokoll aus dem Jahr 2004 stammt und von Haus aus weder Verschlüsselung noch Brute-Force-Schutz bietet, erfordert der Betrieb im Internet strikte Sicherheitsmaßnahmen.",[21,42,43],{},"In dieser Anleitung analysieren wir typische RCON-Angriffsvektoren und demonstrieren, wie wir die Minecraft Cloud Bridge auf KiroCloud gegen Angriffe absichern.",[45,46],"hr",{},[48,49,51],"h2",{"id":50},"_1-schwachstellen-des-nativen-rcon-protokolls","1. Schwachstellen des nativen RCON-Protokolls",[21,53,54],{},"Das Standard-RCON-Protokoll von Minecraft Vanilla und PaperMC weist gravierende Schwachstellen auf:",[56,57,58,69,75],"ol",{},[59,60,61,64,65,68],"li",{},[25,62,63],{},"Keine Transportverschlüsselung:"," Passwörter und Konsolenausgaben werden im Klartext über TCP übertragen. In unverschlüsselten Netzwerken können sie per Paket-Sniffing (",[30,66,67],{},"tcpdump",", Wireshark) mitgelesen werden.",[59,70,71,74],{},[25,72,73],{},"Fehlendes Rate-Limiting:"," Der Minecraft-Server begrenzt fehlgeschlagene Login-Versuche nicht. Angreifer können Tausende Passwörter pro Sekunde ausprobieren, ohne gesperrt zu werden.",[59,76,77,80],{},[25,78,79],{},"Pufferüberläufe & Single-Threaded Bottlenecks:"," Ein TCP-SYN-Flood oder das Senden von Paketen mit manipulierter Längenangabe kann den Haupt-Server-Thread blockieren und TPS-Einbrüche verursachen.",[45,82],{},[48,84,86],{"id":85},"_2-architektonische-schutzschichten","2. Architektonische Schutzschichten",[21,88,89],{},"Um diese Risiken zu eliminieren, darf der RCON-Port niemals direkt im öffentlichen Internet erreichbar sein. Auf KiroCloud wird folgende Architektur erzwungen:",[91,92,97],"pre",{"className":93,"code":95,"language":96},[94],"language-text","┌────────────────────────────────┐\n│   KiroCloud Dashboard Server   │\n└───────────────┬────────────────┘\n                │ TLS-gesicherter interner Tunnel (WireGuard \u002F VPN)\n                ▼\n┌────────────────────────────────┐\n│  Reverse Proxy \u002F RCON Gateway  │ ◄─── Fail2ban \u002F IP Whitelist\n└───────────────┬────────────────┘\n                │ Loopback Socket (127.0.0.1:25575)\n                ▼\n┌────────────────────────────────┐\n│    Minecraft Server Prozess    │\n└────────────────────────────────┘\n","text",[30,98,95],{"__ignoreMap":7},[45,100],{},[48,102,104],{"id":103},"_3-implementierung-eines-anti-brute-force-proxys-mit-nodejs","3. Implementierung eines Anti-Brute-Force Proxys mit Node.js",[21,106,107],{},"Wenn du eine externe Bridge für RCON betreibst, fange fehlgeschlagene Login-Versuche mit einer Token-Bucket-Rate-Limitierung ab:",[91,109,113],{"className":110,"code":111,"language":112,"meta":7,"style":7},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import net from 'node:net';\n\ninterface FailedAttempt {\n  count: number;\n  blockedUntil: number;\n}\n\nconst failedLogins = new Map\u003Cstring, FailedAttempt>();\nconst MAX_ATTEMPTS = 5;\nconst LOCKOUT_MS = 15 * 60 * 1000; \u002F\u002F 15 Minuten Sperre\n\nexport function createProtectedRconClient(host: string, port: number, clientIp: string) {\n  const now = Date.now();\n  const state = failedLogins.get(clientIp);\n\n  if (state && state.blockedUntil > now) {\n    const remainingSec = Math.ceil((state.blockedUntil - now) \u002F 1000);\n    throw new Error(`IP ${clientIp} ist wegen zu vieler Fehlversuche für noch ${remainingSec}s gesperrt.`);\n  }\n\n  const socket = new net.Socket();\n  socket.connect(port, host);\n\n  \u002F\u002F Authentifizierungslogik & Paketverarbeitung\n  socket.on('data', (data) => {\n    \u002F\u002F Bei RCON gibt Type 2 (SERVERDATA_AUTH_RESPONSE) mit ID -1 einen Fehlschlag an\n    const responseId = data.readInt32LE(4);\n    if (responseId === -1) {\n      const attempts = (state?.count ?? 0) + 1;\n      console.warn(`[RCON Security] Fehlgeschlagener RCON-Login von ${clientIp} (Versuch ${attempts}\u002F${MAX_ATTEMPTS})`);\n\n      if (attempts >= MAX_ATTEMPTS) {\n        failedLogins.set(clientIp, { count: attempts, blockedUntil: now + LOCKOUT_MS });\n        socket.destroy();\n      } else {\n        failedLogins.set(clientIp, { count: attempts, blockedUntil: 0 });\n      }\n    }\n  });\n\n  return socket;\n}\n","typescript",[30,114,115,145,152,166,181,193,199,204,242,258,289,294,341,366,393,398,431,475,521,527,532,556,581,586,592,624,630,657,680,717,768,773,793,842,857,868,905,911,917,927,932,942],{"__ignoreMap":7},[116,117,120,124,128,131,135,139,142],"span",{"class":118,"line":119},"line",1,[116,121,123],{"class":122},"s7zQu","import",[116,125,127],{"class":126},"sTEyZ"," net ",[116,129,130],{"class":122},"from",[116,132,134],{"class":133},"sMK4o"," '",[116,136,138],{"class":137},"sfazB","node:net",[116,140,141],{"class":133},"'",[116,143,144],{"class":133},";\n",[116,146,148],{"class":118,"line":147},2,[116,149,151],{"emptyLinePlaceholder":150},true,"\n",[116,153,155,159,163],{"class":118,"line":154},3,[116,156,158],{"class":157},"spNyl","interface",[116,160,162],{"class":161},"sBMFI"," FailedAttempt",[116,164,165],{"class":133}," {\n",[116,167,169,173,176,179],{"class":118,"line":168},4,[116,170,172],{"class":171},"swJcz","  count",[116,174,175],{"class":133},":",[116,177,178],{"class":161}," number",[116,180,144],{"class":133},[116,182,184,187,189,191],{"class":118,"line":183},5,[116,185,186],{"class":171},"  blockedUntil",[116,188,175],{"class":133},[116,190,178],{"class":161},[116,192,144],{"class":133},[116,194,196],{"class":118,"line":195},6,[116,197,198],{"class":133},"}\n",[116,200,202],{"class":118,"line":201},7,[116,203,151],{"emptyLinePlaceholder":150},[116,205,207,210,213,216,219,223,226,229,232,234,237,240],{"class":118,"line":206},8,[116,208,209],{"class":157},"const",[116,211,212],{"class":126}," failedLogins ",[116,214,215],{"class":133},"=",[116,217,218],{"class":133}," new",[116,220,222],{"class":221},"s2Zo4"," Map",[116,224,225],{"class":133},"\u003C",[116,227,228],{"class":161},"string",[116,230,231],{"class":133},",",[116,233,162],{"class":161},[116,235,236],{"class":133},">",[116,238,239],{"class":126},"()",[116,241,144],{"class":133},[116,243,245,247,250,252,256],{"class":118,"line":244},9,[116,246,209],{"class":157},[116,248,249],{"class":126}," MAX_ATTEMPTS ",[116,251,215],{"class":133},[116,253,255],{"class":254},"sbssI"," 5",[116,257,144],{"class":133},[116,259,261,263,266,268,271,274,277,279,282,285],{"class":118,"line":260},10,[116,262,209],{"class":157},[116,264,265],{"class":126}," LOCKOUT_MS ",[116,267,215],{"class":133},[116,269,270],{"class":254}," 15",[116,272,273],{"class":133}," *",[116,275,276],{"class":254}," 60",[116,278,273],{"class":133},[116,280,281],{"class":254}," 1000",[116,283,284],{"class":133},";",[116,286,288],{"class":287},"sHwdD"," \u002F\u002F 15 Minuten Sperre\n",[116,290,292],{"class":118,"line":291},11,[116,293,151],{"emptyLinePlaceholder":150},[116,295,297,300,303,306,309,313,315,318,320,323,325,327,329,332,334,336,339],{"class":118,"line":296},12,[116,298,299],{"class":122},"export",[116,301,302],{"class":157}," function",[116,304,305],{"class":221}," createProtectedRconClient",[116,307,308],{"class":133},"(",[116,310,312],{"class":311},"sHdIc","host",[116,314,175],{"class":133},[116,316,317],{"class":161}," string",[116,319,231],{"class":133},[116,321,322],{"class":311}," port",[116,324,175],{"class":133},[116,326,178],{"class":161},[116,328,231],{"class":133},[116,330,331],{"class":311}," clientIp",[116,333,175],{"class":133},[116,335,317],{"class":161},[116,337,338],{"class":133},")",[116,340,165],{"class":133},[116,342,344,347,350,353,356,359,362,364],{"class":118,"line":343},13,[116,345,346],{"class":157},"  const",[116,348,349],{"class":126}," now",[116,351,352],{"class":133}," =",[116,354,355],{"class":126}," Date",[116,357,358],{"class":133},".",[116,360,361],{"class":221},"now",[116,363,239],{"class":171},[116,365,144],{"class":133},[116,367,369,371,374,376,379,381,384,386,389,391],{"class":118,"line":368},14,[116,370,346],{"class":157},[116,372,373],{"class":126}," state",[116,375,352],{"class":133},[116,377,378],{"class":126}," failedLogins",[116,380,358],{"class":133},[116,382,383],{"class":221},"get",[116,385,308],{"class":171},[116,387,388],{"class":126},"clientIp",[116,390,338],{"class":171},[116,392,144],{"class":133},[116,394,396],{"class":118,"line":395},15,[116,397,151],{"emptyLinePlaceholder":150},[116,399,401,404,407,410,413,415,417,420,423,425,428],{"class":118,"line":400},16,[116,402,403],{"class":122},"  if",[116,405,406],{"class":171}," (",[116,408,409],{"class":126},"state",[116,411,412],{"class":133}," &&",[116,414,373],{"class":126},[116,416,358],{"class":133},[116,418,419],{"class":126},"blockedUntil",[116,421,422],{"class":133}," >",[116,424,349],{"class":126},[116,426,427],{"class":171},") ",[116,429,430],{"class":133},"{\n",[116,432,434,437,440,442,445,447,450,453,455,457,459,462,464,466,469,471,473],{"class":118,"line":433},17,[116,435,436],{"class":157},"    const",[116,438,439],{"class":126}," remainingSec",[116,441,352],{"class":133},[116,443,444],{"class":126}," Math",[116,446,358],{"class":133},[116,448,449],{"class":221},"ceil",[116,451,452],{"class":171},"((",[116,454,409],{"class":126},[116,456,358],{"class":133},[116,458,419],{"class":126},[116,460,461],{"class":133}," -",[116,463,349],{"class":126},[116,465,427],{"class":171},[116,467,468],{"class":133},"\u002F",[116,470,281],{"class":254},[116,472,338],{"class":171},[116,474,144],{"class":133},[116,476,478,481,483,486,488,491,494,497,499,502,505,507,510,512,515,517,519],{"class":118,"line":477},18,[116,479,480],{"class":122},"    throw",[116,482,218],{"class":133},[116,484,485],{"class":221}," Error",[116,487,308],{"class":171},[116,489,490],{"class":133},"`",[116,492,493],{"class":137},"IP ",[116,495,496],{"class":133},"${",[116,498,388],{"class":126},[116,500,501],{"class":133},"}",[116,503,504],{"class":137}," ist wegen zu vieler Fehlversuche für noch ",[116,506,496],{"class":133},[116,508,509],{"class":126},"remainingSec",[116,511,501],{"class":133},[116,513,514],{"class":137},"s gesperrt.",[116,516,490],{"class":133},[116,518,338],{"class":171},[116,520,144],{"class":133},[116,522,524],{"class":118,"line":523},19,[116,525,526],{"class":133},"  }\n",[116,528,530],{"class":118,"line":529},20,[116,531,151],{"emptyLinePlaceholder":150},[116,533,535,537,540,542,544,547,549,552,554],{"class":118,"line":534},21,[116,536,346],{"class":157},[116,538,539],{"class":126}," socket",[116,541,352],{"class":133},[116,543,218],{"class":133},[116,545,546],{"class":126}," net",[116,548,358],{"class":133},[116,550,551],{"class":221},"Socket",[116,553,239],{"class":171},[116,555,144],{"class":133},[116,557,559,562,564,567,569,572,574,577,579],{"class":118,"line":558},22,[116,560,561],{"class":126},"  socket",[116,563,358],{"class":133},[116,565,566],{"class":221},"connect",[116,568,308],{"class":171},[116,570,571],{"class":126},"port",[116,573,231],{"class":133},[116,575,576],{"class":126}," host",[116,578,338],{"class":171},[116,580,144],{"class":133},[116,582,584],{"class":118,"line":583},23,[116,585,151],{"emptyLinePlaceholder":150},[116,587,589],{"class":118,"line":588},24,[116,590,591],{"class":287},"  \u002F\u002F Authentifizierungslogik & Paketverarbeitung\n",[116,593,595,597,599,602,604,606,609,611,613,615,617,619,622],{"class":118,"line":594},25,[116,596,561],{"class":126},[116,598,358],{"class":133},[116,600,601],{"class":221},"on",[116,603,308],{"class":171},[116,605,141],{"class":133},[116,607,608],{"class":137},"data",[116,610,141],{"class":133},[116,612,231],{"class":133},[116,614,406],{"class":133},[116,616,608],{"class":311},[116,618,338],{"class":133},[116,620,621],{"class":157}," =>",[116,623,165],{"class":133},[116,625,627],{"class":118,"line":626},26,[116,628,629],{"class":287},"    \u002F\u002F Bei RCON gibt Type 2 (SERVERDATA_AUTH_RESPONSE) mit ID -1 einen Fehlschlag an\n",[116,631,633,635,638,640,643,645,648,650,653,655],{"class":118,"line":632},27,[116,634,436],{"class":157},[116,636,637],{"class":126}," responseId",[116,639,352],{"class":133},[116,641,642],{"class":126}," data",[116,644,358],{"class":133},[116,646,647],{"class":221},"readInt32LE",[116,649,308],{"class":171},[116,651,652],{"class":254},"4",[116,654,338],{"class":171},[116,656,144],{"class":133},[116,658,660,663,665,668,671,673,676,678],{"class":118,"line":659},28,[116,661,662],{"class":122},"    if",[116,664,406],{"class":171},[116,666,667],{"class":126},"responseId",[116,669,670],{"class":133}," ===",[116,672,461],{"class":133},[116,674,675],{"class":254},"1",[116,677,427],{"class":171},[116,679,430],{"class":133},[116,681,683,686,689,691,693,695,698,701,704,707,709,712,715],{"class":118,"line":682},29,[116,684,685],{"class":157},"      const",[116,687,688],{"class":126}," attempts",[116,690,352],{"class":133},[116,692,406],{"class":171},[116,694,409],{"class":126},[116,696,697],{"class":133},"?.",[116,699,700],{"class":126},"count",[116,702,703],{"class":133}," ??",[116,705,706],{"class":254}," 0",[116,708,427],{"class":171},[116,710,711],{"class":133},"+",[116,713,714],{"class":254}," 1",[116,716,144],{"class":133},[116,718,720,723,725,728,730,732,735,737,739,741,744,746,749,751,753,755,758,760,762,764,766],{"class":118,"line":719},30,[116,721,722],{"class":126},"      console",[116,724,358],{"class":133},[116,726,727],{"class":221},"warn",[116,729,308],{"class":171},[116,731,490],{"class":133},[116,733,734],{"class":137},"[RCON Security] Fehlgeschlagener RCON-Login von ",[116,736,496],{"class":133},[116,738,388],{"class":126},[116,740,501],{"class":133},[116,742,743],{"class":137}," (Versuch ",[116,745,496],{"class":133},[116,747,748],{"class":126},"attempts",[116,750,501],{"class":133},[116,752,468],{"class":137},[116,754,496],{"class":133},[116,756,757],{"class":126},"MAX_ATTEMPTS",[116,759,501],{"class":133},[116,761,338],{"class":137},[116,763,490],{"class":133},[116,765,338],{"class":171},[116,767,144],{"class":133},[116,769,771],{"class":118,"line":770},31,[116,772,151],{"emptyLinePlaceholder":150},[116,774,776,779,781,783,786,789,791],{"class":118,"line":775},32,[116,777,778],{"class":122},"      if",[116,780,406],{"class":171},[116,782,748],{"class":126},[116,784,785],{"class":133}," >=",[116,787,788],{"class":126}," MAX_ATTEMPTS",[116,790,427],{"class":171},[116,792,430],{"class":133},[116,794,796,799,801,804,806,808,810,813,816,818,820,822,825,827,829,832,835,838,840],{"class":118,"line":795},33,[116,797,798],{"class":126},"        failedLogins",[116,800,358],{"class":133},[116,802,803],{"class":221},"set",[116,805,308],{"class":171},[116,807,388],{"class":126},[116,809,231],{"class":133},[116,811,812],{"class":133}," {",[116,814,815],{"class":171}," count",[116,817,175],{"class":133},[116,819,688],{"class":126},[116,821,231],{"class":133},[116,823,824],{"class":171}," blockedUntil",[116,826,175],{"class":133},[116,828,349],{"class":126},[116,830,831],{"class":133}," +",[116,833,834],{"class":126}," LOCKOUT_MS",[116,836,837],{"class":133}," }",[116,839,338],{"class":171},[116,841,144],{"class":133},[116,843,845,848,850,853,855],{"class":118,"line":844},34,[116,846,847],{"class":126},"        socket",[116,849,358],{"class":133},[116,851,852],{"class":221},"destroy",[116,854,239],{"class":171},[116,856,144],{"class":133},[116,858,860,863,866],{"class":118,"line":859},35,[116,861,862],{"class":133},"      }",[116,864,865],{"class":122}," else",[116,867,165],{"class":133},[116,869,871,873,875,877,879,881,883,885,887,889,891,893,895,897,899,901,903],{"class":118,"line":870},36,[116,872,798],{"class":126},[116,874,358],{"class":133},[116,876,803],{"class":221},[116,878,308],{"class":171},[116,880,388],{"class":126},[116,882,231],{"class":133},[116,884,812],{"class":133},[116,886,815],{"class":171},[116,888,175],{"class":133},[116,890,688],{"class":126},[116,892,231],{"class":133},[116,894,824],{"class":171},[116,896,175],{"class":133},[116,898,706],{"class":254},[116,900,837],{"class":133},[116,902,338],{"class":171},[116,904,144],{"class":133},[116,906,908],{"class":118,"line":907},37,[116,909,910],{"class":133},"      }\n",[116,912,914],{"class":118,"line":913},38,[116,915,916],{"class":133},"    }\n",[116,918,920,923,925],{"class":118,"line":919},39,[116,921,922],{"class":133},"  }",[116,924,338],{"class":171},[116,926,144],{"class":133},[116,928,930],{"class":118,"line":929},40,[116,931,151],{"emptyLinePlaceholder":150},[116,933,935,938,940],{"class":118,"line":934},41,[116,936,937],{"class":122},"  return",[116,939,539],{"class":126},[116,941,144],{"class":133},[116,943,945],{"class":118,"line":944},42,[116,946,198],{"class":133},[45,948],{},[48,950,952,953],{"id":951},"_4-server-konfiguration-best-practices-in-serverproperties","4. Server-Konfiguration: Best Practices in ",[30,954,955],{},"server.properties",[21,957,958],{},"Konfiguriere deinen Minecraft-Server nach folgenden Regeln:",[91,960,964],{"className":961,"code":962,"language":963,"meta":7,"style":7},"language-properties shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# RCON aktivieren\nenable-rcon=true\n\n# Port niemals auf 0.0.0.0 binden, sondern nur auf localhost\nrcon.port=25575\nserver-ip=127.0.0.1\n\n# Starkes, kryptografisch zufälliges Passwort (mindestens 32 Zeichen, z. B. via: openssl rand -base64 24)\nrcon.password=DEIN_SICHERES_32_STELLIGES_PASSWORT\n\n# Broadcast-Nachrichten an OPs einschränken\nbroadcast-rcon-to-ops=false\n","properties",[30,965,966,971,976,980,985,990,995,999,1004,1009,1013,1018],{"__ignoreMap":7},[116,967,968],{"class":118,"line":119},[116,969,970],{},"# RCON aktivieren\n",[116,972,973],{"class":118,"line":147},[116,974,975],{},"enable-rcon=true\n",[116,977,978],{"class":118,"line":154},[116,979,151],{"emptyLinePlaceholder":150},[116,981,982],{"class":118,"line":168},[116,983,984],{},"# Port niemals auf 0.0.0.0 binden, sondern nur auf localhost\n",[116,986,987],{"class":118,"line":183},[116,988,989],{},"rcon.port=25575\n",[116,991,992],{"class":118,"line":195},[116,993,994],{},"server-ip=127.0.0.1\n",[116,996,997],{"class":118,"line":201},[116,998,151],{"emptyLinePlaceholder":150},[116,1000,1001],{"class":118,"line":206},[116,1002,1003],{},"# Starkes, kryptografisch zufälliges Passwort (mindestens 32 Zeichen, z. B. via: openssl rand -base64 24)\n",[116,1005,1006],{"class":118,"line":244},[116,1007,1008],{},"rcon.password=DEIN_SICHERES_32_STELLIGES_PASSWORT\n",[116,1010,1011],{"class":118,"line":260},[116,1012,151],{"emptyLinePlaceholder":150},[116,1014,1015],{"class":118,"line":291},[116,1016,1017],{},"# Broadcast-Nachrichten an OPs einschränken\n",[116,1019,1020],{"class":118,"line":296},[116,1021,1022],{},"broadcast-rcon-to-ops=false\n",[45,1024],{},[48,1026,1028],{"id":1027},"_5-befehls-sanitisierung-gegen-command-injection","5. Befehls-Sanitisierung gegen Command-Injection",[21,1030,1031,1032,1035],{},"Wenn dein Discord-Bot RCON-Befehle aus Nutzeingaben generiert (z. B. ",[30,1033,1034],{},"\u002Fwhitelist add [Name]","), musst du Eingaben strikt validieren:",[91,1037,1039],{"className":110,"code":1038,"language":112,"meta":7,"style":7},"\u002F\u002F GEFÄHRLICH: Angreifer könnte 'luca\\nop luca' übergeben!\nconst badCommand = `whitelist add ${userInput}`;\n\n\u002F\u002F SICHER: Nur alphanumerische Zeichen und Unterstriche erlauben\nexport function sanitizePlayerName(name: string): string {\n  if (!\u002F^[a-zA-Z0-9_]{3,16}$\u002F.test(name)) {\n    throw new Error('Ungültiger Spielername (nur 3-16 Buchstaben, Zahlen und Unterstriche erlaubt).');\n  }\n  return name;\n}\n",[30,1040,1041,1046,1071,1075,1080,1105,1147,1168,1172,1181],{"__ignoreMap":7},[116,1042,1043],{"class":118,"line":119},[116,1044,1045],{"class":287},"\u002F\u002F GEFÄHRLICH: Angreifer könnte 'luca\\nop luca' übergeben!\n",[116,1047,1048,1050,1053,1055,1058,1061,1063,1066,1069],{"class":118,"line":147},[116,1049,209],{"class":157},[116,1051,1052],{"class":126}," badCommand ",[116,1054,215],{"class":133},[116,1056,1057],{"class":133}," `",[116,1059,1060],{"class":137},"whitelist add ",[116,1062,496],{"class":133},[116,1064,1065],{"class":126},"userInput",[116,1067,1068],{"class":133},"}`",[116,1070,144],{"class":133},[116,1072,1073],{"class":118,"line":154},[116,1074,151],{"emptyLinePlaceholder":150},[116,1076,1077],{"class":118,"line":168},[116,1078,1079],{"class":287},"\u002F\u002F SICHER: Nur alphanumerische Zeichen und Unterstriche erlauben\n",[116,1081,1082,1084,1086,1089,1091,1094,1096,1098,1101,1103],{"class":118,"line":183},[116,1083,299],{"class":122},[116,1085,302],{"class":157},[116,1087,1088],{"class":221}," sanitizePlayerName",[116,1090,308],{"class":133},[116,1092,1093],{"class":311},"name",[116,1095,175],{"class":133},[116,1097,317],{"class":161},[116,1099,1100],{"class":133},"):",[116,1102,317],{"class":161},[116,1104,165],{"class":133},[116,1106,1107,1109,1111,1114,1116,1119,1122,1125,1128,1131,1133,1135,1138,1140,1142,1145],{"class":118,"line":195},[116,1108,403],{"class":122},[116,1110,406],{"class":171},[116,1112,1113],{"class":133},"!",[116,1115,468],{"class":133},[116,1117,1118],{"class":122},"^",[116,1120,1121],{"class":133},"[",[116,1123,1124],{"class":137},"a-zA-Z0-9_",[116,1126,1127],{"class":133},"]{3,16}",[116,1129,1130],{"class":122},"$",[116,1132,468],{"class":133},[116,1134,358],{"class":133},[116,1136,1137],{"class":221},"test",[116,1139,308],{"class":171},[116,1141,1093],{"class":126},[116,1143,1144],{"class":171},")) ",[116,1146,430],{"class":133},[116,1148,1149,1151,1153,1155,1157,1159,1162,1164,1166],{"class":118,"line":201},[116,1150,480],{"class":122},[116,1152,218],{"class":133},[116,1154,485],{"class":221},[116,1156,308],{"class":171},[116,1158,141],{"class":133},[116,1160,1161],{"class":137},"Ungültiger Spielername (nur 3-16 Buchstaben, Zahlen und Unterstriche erlaubt).",[116,1163,141],{"class":133},[116,1165,338],{"class":171},[116,1167,144],{"class":133},[116,1169,1170],{"class":118,"line":206},[116,1171,526],{"class":133},[116,1173,1174,1176,1179],{"class":118,"line":244},[116,1175,937],{"class":122},[116,1177,1178],{"class":126}," name",[116,1180,144],{"class":133},[116,1182,1183],{"class":118,"line":260},[116,1184,198],{"class":133},[21,1186,1187],{},"Mit dieser doppelten Absicherung aus Loopback-Isolation und strikter Befehlsvalidierung bleibt dein Minecraft-Server gegen unberechtigte RCON-Zugriffe geschützt.",[1189,1190,1191],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":7,"searchDepth":147,"depth":147,"links":1193},[1194,1195,1196,1197,1199],{"id":50,"depth":147,"text":51},{"id":85,"depth":147,"text":86},{"id":103,"depth":147,"text":104},{"id":951,"depth":147,"text":1198},"4. Server-Konfiguration: Best Practices in server.properties",{"id":1027,"depth":147,"text":1028},"Das Remote Console (RCON) Protokoll von Minecraft ermöglicht die Ausführung beliebiger Server-Befehle über eine TCP-Verbindung. Ein Angreifer, der ein RCON-Passwort knackt, erhält uneingeschränkte Administrator-Rechte auf dem Server (op, stop, whitelist off, Ausführung von NBT-Befehlen). Da das originale Source-RCON-Protokoll aus dem Jahr 2004 stammt und von Haus aus weder Verschlüsselung noch Brute-Force-Schutz bietet, erfordert der Betrieb im Internet strikte Sicherheitsmaßnahmen.","md",{},0,"\u002Fdocs\u002Fde\u002Frcon-security-hardening",{"title":1206,"description":1200},{"Minecraft RCON Protokoll Absicherung":1207,"description":1208,"category":1209,"order":147,"author":1210,"readTime":1211,"lastUpdated":1212},"Socket-Hardening & Anti-Brute-Force","Sicherheitsleitfaden für Minecraft RCON-Verbindungen. Schutz vor Klartext-Passwort-Sniffing, Denial-of-Service und Brute-Force-Angriffen.","security","Luca Lichtenwald","12 min","2026-10-09","docs\u002Fde\u002Frcon-security-hardening","aZ5FIh-3fh6dsTukLXcsVZzS85lVIfd6YMT5brV1sTo",{"enabled":150,"clientPubId":1216,"docsSlotId":7,"newsSlotId":7,"guidesSlotId":7,"dashboardSlotId":7,"docsEnabled":150,"newsEnabled":150,"guidesEnabled":150,"dashboardEnabled":150},"ca-pub-9454065621077312"]