Wie kann in einen DDOS Angriff auf meinen (virtuellen) Server blockieren?

Ein Kundenhost wurde von einer DDOS-Attacke getroffen, etwa 50Mbps. Der Uplink war nahezu saturiert, mit ~80% packet loss war SSH noch so graaade eben möglich.

Interessant: Nach einer ersten schnellen iptables DROP regel „stieg“ die Bandbreite auf 90%. Im ersten Moment wirkt das seltsam, ist aber logisch: Wenn eine interne Paketverarbeitung nicht mehr der Flaschenhals ist, trifft es den nächsten Engpass.

Aus gegebenem Anlass, tldr;: man kann ddos nicht auf seinem Host filtern. Sobald die Host-Firewall erreicht wurde, ist das Paket ja schon durch die Leitung geflogen … (da hilft es auch nicht, die schnellen Admins anzurifen).

Mehr Details zu „how to ddos“ und „how to mitigate“

Ein Server (Socket, Application, Whatever) kann den Empfang eines Pakets durch den darunterliegenden Kernel nicht verhindern. Jegliche Filterung innerhalb eines Betriebssystems erfolgt erst, nachdem der Kernel das Paket bereits komplett empfangen und (ggf) zusammengebaut hat. Dieser kann das Paket dann zwar verwerfen, zum Beispiel um eine Verarbeitung durch eine Applikation zu verhindern, aber nicht den Empfang „nachträglich“ verhindern. Und ja, auch so ein Kernel braucht für Filteraktionen Rechenleistung – viele Pakete = viel CPU.

Anders ausgedrückt: Bis ein Host von dem Paket erfährt, ist die Kapazität der physischen Anbindung bereits erschöpft. Die Ressource „Bandbreite“ wurde schon verbraucht, sobald der vorgelagerte Router das Paket an seinem Ethernet-Port (physisch oder virtuell) ausgibt. Sobald sich das Paket im Netzwerk befindet, erreicht es unweigerlich den Buffer der Ethernet-Schnittstelle des Ziels – und löst dort Interrupts (mit Rechenzeitverbauch) aus. Das ist ein [D]DOS.

Und was macht man jetzt?

Die einzige Möglichkeit, ddos auf einen Host (Kernel) zu verhindern, besteht darin, die Filterung vorgelagert durchzuführen. Firewall, Router, Netfilter, Burstfilter, CDN oder whatever.

Es wird noch besser: Wenn die Anzahl der Packets die Uplink-Kapazität des ISPs überlastet, muss die Filterung noch weiter vorgelagert werden. Idealerweise durch Umleitung des gesamten Datenverkehrs über einen externen DDoS-Protection-Service.

Ist das nicht ohne weiteres möglich, muss diese „Umleitung“ via DNS passieren. Man kann seine Domain(s) auf einen dritten Filter-Proxy oder ein CDN umleiten, das den DDoS Traffic abfängt. Cloudflare macht dabei einen guten Job, es gibt aber auch viele andere. Einzig auf „seine“ original IP muss man dann etwas aufpassen, denn wird diese bekannt, umgeht der Angreifer die Schutzmaßnahme kurzerhand.

Ende gut?

In diesem Fall ist alles wieder gut. Die Applikationen auf dem Host konnten alle geschützt werden und ein „Notfall“ Anruf beim ISP war erfolgreich. Dieser hat kurzerhand die Regeln auf dem Kernrouter geändert, die das Weiterleiten der (glücklicherweise gut „identifizierbaren“) Pakete verhinderte. Außerdem wurde eine Firewall „dazubestellt“.

Lieber ein kleiner und kompetenter ISP als ein Hyperscaler der am Ende noch für den Traffic eine Rechnung geschrieben hätte …

PDFs die in Firefox heruntergeladen werden, werden in Firefox UND im Adobe Reader geöffnet

Seit einer Weile […] öffnet Firefox PDFs nicht mehr nur im internen Viewer, sondern auch im externen System-Viewer (oft der Adobe Reader oder Foxit). Supernervig, in der Regel unnötig und langsam.

Das liegt, fieserweie, nicht an Firefox. Zumindest nicht an der Einstellung für den Download von PDFs:

Diese Einstellung bleibt für den Adobe Reader ohne Wirkung

Das liegt an einer „neuen“ (seit 2022) aktiven Funktion von Firefox. Die Umstrittene Standardeinstellung sorgt dafür, das Downloads (auch verm vermeintlich temporäre) nun immer dauerhaft im „Downloads“ Ordner gespeichert werden. Auch, wenn man gar nichts speichern will (aka „Temporary klicks“).

Abgesehen davon, dass das den Download-Ordner seitdem (unnötig) zumüllt, können nun andere Apps den Download-Ordner überwachen und … Dinge tun. Das wird von Adobe natürlich sofort in vollem Umfang ausgenutzt.

Lösung

  1. Man öffne „about:config“ und suche nach browser.download.start_downloads_in_tmp_dir
  2. Man setze selbiges auf true

Und schon hat dieses nervige Verhalten ein Ende.

Super Simples DynDNS (DDNS) Update via PowerShell

Manchmal muss man nur „schnell mal eben“ eine IP-Adresse im DNS via DynDNS aktualisieren. Zum Testen, für schnelle Hostname-Verbindungen, um einen PC erreichbar zu machen oder ähnliches. Dynamisches DNS hat auch in der heutigen Zeit noch eine große Bedeutung.

Wie aktualisiert man also einen DDNS Namen an der Kommandozeile?

Lösung

Sehr schnell und sehr einfach, ohne Fehlerhandling:

# Supersimpler DDNS Client für PowerShell von ugg.li

# --- configuration ---
$updateURL = "UPDATEURL zB. http[s]://dynupdate.no-ip.com:8245/ducupdate.php"
$hostname = "HOSTNAME.EXAMPLE.COM"
$username = "USERNAME"
$password = "PASSWORD"

# --- IPs holen (v4 und v6) ---
$ipv6 = (Resolve-DnsName myip.opendns.com -Server 2620:119:35::35 -Type AAAA).IPAddress
$ipv4 = (Resolve-DnsName myip.opendns.com -Server 208.67.222.222 -Type A).IPAddress

# --- update DNS (v4 und v6) ---
curl.exe --user "${username}:${password}" "${updateURL}?hostname=${hostname}&myip=${ipv4}&myip6=${ipv6}"

Das Script holt sich die anfragenden (z.B. NAT) Adresse via DNS, genauer via openDNS. Schneller und sicherer (z.B. bei multihomed Hosts) ist das kaum möglich.

Natürlich gibt es auch jede Menge DDNS-Clients („DUC“ oder „NUC“) die das übernehmen können und mehr oder weniger komfortabel zu handhaben sind.

Im Wesentlichen ist dieser Schnipsel ein „aus der Not geborener“ Einzeiler der nach und nach ein bisschen gewachsen ist. Bisher gibt es keinen Plan, hieraus eine „echte“ Software mit Caching und so weiter zu machen.

Druckverwaltung („Print Management“) unter Windows 11 oder Windows Server schnell anb der Kommandozeile nachinstallieren

Zeit für einen kurzen „zu oft gegoogelt“ Snippet.

Wie installiert man das sinnvollste jemals von Microsoft zur Druckerverwaltung bereitgestellte „Print Management“ (Druckverwaltung) unter Windows 11 oder Windows Server nach? Druckverwaltung schnell (windows-Schnell) hinzufügen.

Wie man überhaupt auf die Idee kommen kann, dieses Tool nicht automatisch überall installiert zu haben, ist für uns nicht nachvollziehbar …

Lösung

Eingabeaufforderung (CMD), Als Administrator

dism.exe /online /add-capability /capabilityName:Print.Management.Console~~~~0.0.1.0

PowerShell

Get-WindowsCapability -Online -Name "Print.Management.Console*" | Add-WindowsCapability -Online