Um meinen Blog hier künftig wieder etwas mehr zu nutzen, habe ich mir folgendes überlegt:
Ab dem 01.01.2024 werde ich hier wöchentlich, immer montags, eine Zusammenfassung der für meinen Teil der Arbeit mit Azure relevanten Änderungen, News und Abkündigungen für euch bereitstellen. Dabei wird es primär um die Bereiche Compute, Storage und Network gehen, aber auch Themen aus dem Umfeld von Azure Monitor, Azure Migrate, Datenbanken und mehr werdet ihr dann hier finden. Schaut also gerne jede Woche rein – und lasst mich gerne wissen, was ihr über dieses Vorhaben denkt. Danke!
Und jetzt wünsche ich euch erstmal ein paar schöne Tage im „alten Jahr“ – bis zum ersten Januar!
Auch in diesem Jahr gibt es einen Azure Adventskalender. Jeden Tag präsentiere ich euch ein neues Thema rund um Microsoft Azure auf meinem YouTube Kanal. Schaut doch gerne mal rein, die ersten Videos sind bereits online!
Die Azure Firewall hat ein für mich zunächst nicht nachvollziehbares, aber dann verständliches, wenn auch nicht erwartetes Verhalten. Allerdings steht es, wenn man dann genau nachliest, auch genau so, wie es passiert in der Doku. Aber nochmal langsam…
Ich habe auf einer Azure Firewall einige DNAT Rules, um auf Jump-Hosts zu kommen, die in unterschiedlichen Netzwerken stehen:
Hier ist also für zwei VMs aus dem freien Internet über die Public IP der Azure Firewall und zwei höhere Ports der Durchgriff auf RDP TCP/3389 konfiguriert.
Zwischen den beiden Netzwerken, in denen sich die VMs befinden, soll der Traffic aber stark reglementiert sein. Daher sind dort nur einige Ports explizit erlaubt, für den Rest sollte die Azure Firewall „per default“ blockieren:
Jedoch ist es dennoch so, dass zwischen den beiden VMs, die ja in getrennten Netzen stehen, weiterhin Kommunikation möglich ist, auch jenseits von ICMP und HTTP(S). Getestet hatte ich es mit RDP – das geht noch, obwohl das nach meiner Meinung nicht so sein sollte.
Und das hatte mich sehr verwundert. Zunächst hatte ich das als Fehlverhalten interpretiert. Ein kurzer Call mit dem Support hat aber geklärt, dass dieses Verhalten so ganz normal ist. Das wiederum war für mich unerwartet.
Die Lösung hier ist, dass eine DNAT Rule eine implizite Network Rule nach sich zieht. Dabei werden allerdings nicht Port und Destination IP sondern Translated Adress und Translated Port für die Destination verwendet. So steht es auch in der Doku:
Weihnachten 2020 ist nun Geschichte und damit endete auch mein Azure Adventskalender in diesem Jahr. Jeden Tag ein neues Video für euch – das hat mir viel Spaß, aber auch einiges an Arbeit bereitet. Daher möchte ich natürlich, dass die Videos auch nach der Weihnachtszeit weiterhin zu eurem Nutzen sind. Und deswegen fasse ich euch hier nochmal alle Videos kurz zusammen:
01. Dezember 2020
Hinter Tür Nummer eins verbarg sich ein Video zu den Diagnostic Settings in Azure. Ihr findet es hier: https://youtu.be/cAjqU0202X4
02. Dezember 2020
Das zweite Türchen hielt einen Überblick zu den verschiedenen VM-Größen in Azure und eine Erklärung selbiger bereit. Es ist hier zu finden: https://youtu.be/mTZbOxKrlrM
03. Dezember 2020
Hinter diesem Türchen war ein Video zu den Resource Locks zu finden. Hier geht es zum Video: https://youtu.be/X0IHwU6EA_E
04. Dezember 2020
Das vierte Türchen verbarg einen Überblick zum Azure Advisor und Erklärungen zu seinen Empfehlungen. Das Video gibt es hier: https://youtu.be/RmTaXwZfP6o
05. Dezember 2020
Am fünften Tag gab es ein Video zur Datenbank-Migration in Azure. Es ist über diesen Link zu erreichen: https://youtu.be/c1xfZqY-eyM
06. Dezember 2020
Am Nikolaustag ging es im täglichen Video um die Azure Firewall (verbunden mit VNET-Peering). Das Video findet ihr hier: https://youtu.be/EsX2B1DZvzA
07. Dezember 2020
Für das siebte Türchen habe ich ein Video zu einem netten Sicherheitsfeature des Security Center bzw. Defender aufgezeichnet – es geht um Just-in Time (JIT) VM Access. Das Video ist über diesen Link zu sehen: https://youtu.be/k2LUYmMxOx4
08. Dezember 2020
Für diesen Tag gab es ein Video zu den Network Security Groups (NSG) und den Application Secruity Groups (ASG). Ihr findet es hier: https://youtu.be/FBmInxpkSEM
09. Dezember 2020
Das neunte Türchen hat ein Video zu den verschiedenen Disk-Typen für Azure VMs beschert. Schaut es euch hier an: https://youtu.be/oANdFp21W9k
In einer Woche ist es soweit – mit dem 01.12. beginnt die jährliche Saison der Adventskalender. Ich habe mir für dieses Jahr etwas Besonderes überlegt. ich werde jeden Tag ein virtuelles Türchen auf meinem YouTube-Kanal bereithalten, hinter dem sich dann jeweils ein neues Video verbergen wird! Also seid gespannt, abonniert meinen Kanal und schaut euch die täglichen Videos an.
With Halloween only a few days away, this year Altaro gathered SysAdmins’ funniest and most horrifying stories into one eBook, especially for you.
We all know that a SysAdmin’s job is no easy task and apart from constantly having systems to update, bugs to fix and users to please, SysAdmins encounter all sorts of situations throughout their careers. From tech situations to funny anecdotes, terrible mishaps or incidents with colleagues, this eBook includes real stories of what SysAdmins go through on a daily basis.
The eBook is very easy to download as no registration is required. Click on Download and it’s yours. It includes more than 25 short stories but this one is our personal favourite 😊.
Für mich als langjähriger Chrome-User war es eine klasse Ankündigung – der nächste Microsoft-Browser würde auf der Chromium-Plattform aufbauen. Nun gibt es endlich eine Preview-Version zum Ausprobieren:
Der Download geht am besten über die offizielle Edge Insider Landingpage:
Wie ihr ggf. dem ein- oder anderen Blog-Artikel hier entnehmen könnt, beschäftige ich mich seit einigen Monaten sowohl berufsbedingt als auch aus eigenem Interesse mit Microsoft Azure. Als logische Konsequenz daraus habe ich jetzt bereits einige erste YouTube Videos aus diesem Umfeld aufgezeichnet und veröffentlicht. Ihr findet diese hier:
Konkret geht es in den ersten Videos um ARM Templates und Azure CDN – weitere werden folgen! Schaut mal rein – ich freue mich auf Kommentare, Fragen und Likes!
Auf meiner in den letzten Wochen und Monaten gebauten Fotobox (Mehr dazu hier) gibt es einen extra Bildschirm für eine Slideshow der aufgenommenen Fotos. Diese zeigt die neuesten x Fotos aus der Liste aller aufgenommenen Bilder, wobei ein neues Foto immer das älteste Bild ablöst (zu der technischen Realisierung hier werde ich später noch einen größeren Artikel schreiben).
Nun kam mir in diesem Zusammenhang die Idee, aus den sozialen Medien ebenfalls die aktuellsten Bilder zu einem bestimmten Hashtag abzurufen, damit die Gäste unter diesem Hashtag Handyfotos posten könnten, die dann wiederum in die Slideshow einfließen sollten. Hierzu gibt es ein paar Lösungen im Internet, die aber fast alle recht teuer sind und auch größtenteils nur im Browser ablaufen. Ich wollte aber gern die einzelnen Dateien lokal auf dem Rechner haben. Also habe ich mir ein PowerShell-Skript geschrieben, welches genau diese Anforderung erfüllt – allerdings vorerst nur für Instagram.
# What are you searching for?$Hashtag="PUTYOURHASHTAGHERE"# How long to wait for the next retry - set to 0 to only search once$SecondsBetweenRequests=10# Where do you want to store the downloaded pictures? Use no "\" at the end!$WhereToStorePictures="D:\Pictures\"### Don't change anything below here unless you know what you are doing! #### If the destination folder does not exist, we need to create it firstIf(!(Test-Path$WhereToStorePictures-PathType Container)){New-Item$WhereToStorePictures-ItemType Directory
}$URI="https://www.instagram.com/explore/tags/$Hashtag/"# We are running this from now one until CTRL-C is pressedWrite-Host"To stop the process, press CTRL+C - otherwise it runs forever!"-ForegroundColor Yellow
While($true){# Get the whole content according to the hashtag search$HTML= Invoke-WebRequest -Uri $URI# Get all the filenames of pictures with that hashtag from the HTML$URLs=($HTML.Content |Select-String-Pattern'"display_url":\s.*?"edge_liked_by"'-AllMatches).Matches.Value |ForEach-Object{$_.Substring(16,$_.Length-34)}# Iterate through all the pics on the websiteForEach($URLin$URLs){# We need the filename to see if it was allready downloaded$Filename=$URL.Substring($URL.LastIndexOf('/')+1,$URL.length-$URL.LastIndexOf('/')-1)# If the pic is not allready in the destination folder, download itIf(!(Test-Path-PathType Leaf -Path"$WhereToStorePictures\$Filename")){Write-Host"`nNew Picture found!"# You can remove this if you want
Start-BitsTransfer $URL-Destination"$WhereToStorePictures\"# The actual download}}If($SecondsBetweenRequests-eq0)# Then we just do the download-thing once{break}else{Start-Sleep-Seconds$SecondsBetweenRequestsWrite-Host"."-NoNewline# Just to let you know it is still working... - you can remove this if you want}}
# What are you searching for?
$Hashtag = "PUTYOURHASHTAGHERE"
# How long to wait for the next retry - set to 0 to only search once
$SecondsBetweenRequests = 10
# Where do you want to store the downloaded pictures? Use no "\" at the end!
$WhereToStorePictures = "D:\Pictures\"
### Don't change anything below here unless you know what you are doing! ###
# If the destination folder does not exist, we need to create it first
If(!(Test-Path $WhereToStorePictures -PathType Container))
{
New-Item $WhereToStorePictures -ItemType Directory
}
$URI = "https://www.instagram.com/explore/tags/$Hashtag/"
# We are running this from now one until CTRL-C is pressed
Write-Host "To stop the process, press CTRL+C - otherwise it runs forever!" -ForegroundColor Yellow
While($true)
{
# Get the whole content according to the hashtag search
$HTML = Invoke-WebRequest -Uri $URI
# Get all the filenames of pictures with that hashtag from the HTML
$URLs = ($HTML.Content | Select-String -Pattern '"display_url":\s.*?"edge_liked_by"' -AllMatches).Matches.Value | ForEach-Object {$_.Substring(16,$_.Length-34)}
# Iterate through all the pics on the website
ForEach($URL in $URLs)
{
# We need the filename to see if it was allready downloaded
$Filename = $URL.Substring($URL.LastIndexOf('/')+1,$URL.length-$URL.LastIndexOf('/')-1)
# If the pic is not allready in the destination folder, download it
If(!(Test-Path -PathType Leaf -Path "$WhereToStorePictures\$Filename"))
{
Write-Host "`nNew Picture found!" # You can remove this if you want
Start-BitsTransfer $URL -Destination "$WhereToStorePictures\" # The actual download
}
}
If($SecondsBetweenRequests -eq 0) # Then we just do the download-thing once
{
break
}
else
{
Start-Sleep -Seconds $SecondsBetweenRequests
Write-Host "." -NoNewline # Just to let you know it is still working... - you can remove this if you want
}
}
Wer kennt das nicht? Da hat man einen oder mehrere größere Downloads, da müsste man den PC die ganze Nacht oder sogar mehrere Tage laufen lassen. Wenn man dabei an die Stromkosten denkt, dann wird einem schnell bewusst, dass dies nicht die optimale Lösung ist. So ging es auch mir. Also musste eine leise, kleine und vor allem stromsparende Lösung her.
Da ich nicht viel Geld ausgeben wollte, entschied ich mich für einen etwas älteren gebrauchten Thinclient der Firma Wyse, den ich vor einiger Zeit bei eBay erworben hatte. Kurz zu den Details des Gerätes:
AMD Geode GX CPU
128MB DDR Ram (fix)
10/100MBit/s FastEthernet
256MB IDE Flash HDD
4x USB
2x PS/2
VGA-Anschluss
Audio-Anschluss
2x Seriell (COM), 1x Parallel (LPT)
ca. 3kg schwer
210x57x160mm groß
ca. 7W Leistungsaufnahme
Komplett lüfterlos
So, nun zu der Realisierung. Als Betriebssystem sollte Debain Linux 6.0 Squeeze (stable) zum Einsatz kommen, es gibt sicher Alternativen, aber die CPU wird nicht von jedem Linux-Derivat unterstützt und außerdem muss man eben mit recht wenig RAM auskommen.
Da der interne Flash-Speicher natürlich viel zu klein ist, kommen bei mir ein 4GB USB Stick (bootfähig) für das Betriebssystem sowie eine 40GB 2.5“ USB Festplatte für die Downloads zum Einsatz. Der USB-Stick muss zur Installation im unteren rechten USB-Port stecken. Für die Installations-Quelle gibt es 2 Möglichkeiten: Booten via PXE (von mir favorisiert) oder von einem zweiten USB-Stick (dieser müsste dann oben links im USB-Port stecken).
Wichtig: Bei der Installation muss ein 486-er Kernel installiert werden, da die aktuellen 686 alle mit PAE sind, was vom Prozessor nicht unterstützt wird.
Nach der Installation habe ich den pyLoad Download-Manager installiert, da dieser über ein schönes Web-Frontend verfügt und auch die gängigen One-Click-Hoster und Container-Formate unterstützt.
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional
Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt.Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.