#3 Firewall Ports für den SQL Server öffnen mit Powershell
This post might contain affiliate links. We may earn a commission if you click and make a purchase. Your support is appreciated!
Nach ein paar Tagen Ruhe kommt nun mein dritter Teil der Powershell Serie zum Thema „Firewall Ports öffnen„.
Sicherlich wird der ein oder andere sagen, „Firewall? die interne? die haben wir per Gruppenrichtlinie immer ausgeschaltet!“…was ist vielleicht in einem halben Jahr, jemand aktiviert die Windows Firewall auf dem Server manuell? Kann der SQL Server (also die Datenbank-Enigne) dann immer noch mit der Welt da draußen kommunizieren?
Sicherheit geht vor – daher nur definiert und bewußt die Firewall Ports öffnen
Ich empfehle nur die notwendigen Ports für die Datenbank-Enigne zu öffnen, im Beispielbild wären das die folgenden Ports
- SQL Server DB Engine => TCP 10001
- der SQL Browser => UDP 1434
- der SQL Service => Broker 4022
Dies reicht völlig aus, um dem SQL Server und den nutzenden Applikationen im Notfall eine Kommunikation zu ermöglichen. Nun gibt es mehrere Möglichkeiten dies zu realisieren, die Konfiguration der Firewall über die grafische Oberfläche, was doch umständlich und „kompliziert“ sein kann, aber ebenso der Weg über die Kommandozeile entweder als DOS-Befehl bzw mit dem netsh-Befehl oder mit einem Powershell-Skript.
Wer noch andere Features des SQL Servers auf dem selben Server einsetzt, muss natürlich noch weitere Ports öffnen und auch die entsprechenden Skripte erweitern, aber in der Regel reichen diese Firewall Ports für einen Datenbank Server aus.
weitere Hinweise zu den Firewall Ports des SQL Server findet man hier : https://msdn.microsoft.com/de-de/library/cc646023.aspx
Umsetzung über die Kommandozeile
netsh advfirewall firewall add rule name="SQL Server (TCP 10001) TEST_Instanz" dir=in action=allow protocol=TCP localport=10001 profile=domain netsh advfirewall firewall add rule name="SQL Service Broker (TCP 4022)" dir=in action=allow protocol=TCP localport=4022 profile=domain netsh advfirewall firewall add rule name="SQL Browser (UDP 1434)" dir=in action=allow protocol=UDP localport=1434 profile=domain
Der netsh-Befehl lässt sich sehr gut parametrisieren und skripten, ist daher sehr individuell einsetzbar, also recht umgänglich. Hier kommt es auf die Unternehmensstrategie oder die der Systemadministratoren an, welche Skriptsprache bevorzugt wird. Ich bevorzuge (mittlerweile) Powershell, was auch Hauptthema dieser Serie ist, daher gehe ich nun etwas tiefer in die Umsetzung „Firewall Ports öffnen“ mit Powershell ein.
Umsetzung mittels Powershell
Auch die Windows-Firewall hat ein Powershell Commandlet, so dass wir die Firewall Ports recht einfach und komfortabel öffnen können. Mein Lösungsansatz ist vielleicht etwas länger und umfangreicher, der erfahrene Powershell Programmierer bekommt das bestimmt auch in eine Schleife gepackt oder gar in eine Zeile 😉
Meine Zeilen stammen aus einem Skript, welches ich für die Konfiguration nach der Installation verwende, daher sind hier zahlreiche Variablen genutzt worden, um die Flexibilität zu erhalten.
- $SQLServerTCPPort = 10001
- $InstanceName = TEST_Instanz
Auch ein wenig „Monitoring“ habe ich implementiert, so dass man gleich das Ergebnis, den Fehlschlag bzw den Fortschritt anhand der Ausgabe erkennen kann. Für meine Zwecke im Rahmen der SQL Server Installation reichen diese Zeilen um die Firewall Ports zu öffnen, zudem erklären sich die einzelnen Parameter nahezu von selbst.
Write-Host "Opening Firewall ports for this Instance" Try { Write-Host "Opening Firewall on Port $SQLServerTCPPort" $port1 = New-Object -ComObject HNetCfg.FWOpenPort $port1.Port = $SQLServerTCPPort $port1.Name = "SQL Server (TCP " + $SQLServerTCPPort + ") " + $InstanceName $port1.Enabled = $true $port1.Protocol = 6 $fwMgr = New-Object -ComObject HNetCfg.FwMgr $profiledomain=$fwMgr.LocalPolicy.GetProfileByType(0) $profiledomain.GloballyOpenPorts.Add($port1) Write-Host "[INFO] Successfully opened Firewall on Port $SQLServerTCPPort." -ForegroundColor Green } Catch { Write-Host "[ERROR] Opening Firewall on Port $SQLServerTCPPort failed." -ForegroundColor Red } Try { Write-Host "Opening Firewall on Port 4022" $port1 = New-Object -ComObject HNetCfg.FWOpenPort $port1.Port = 4022 $port1.Name = "SQL Service Broker (TCP 4022)" $port1.Enabled = $true $port1.Protocol = 6 $fwMgr = New-Object -ComObject HNetCfg.FwMgr $profiledomain=$fwMgr.LocalPolicy.GetProfileByType(0) $profiledomain.GloballyOpenPorts.Add($port1) Write-Host "[INFO] Successfully opened Firewall on Port 4022." -ForegroundColor Green } Catch { Write-Host "[ERROR] Opening Firewall on Port 4022 failed." -ForegroundColor Red } Try { Write-Host "Opening Firewall on Port UDP 1434" $port1 = New-Object -ComObject HNetCfg.FWOpenPort $port1.Port = 1434 $port1.Name = "SQL Browser (UDP 1434)" $port1.Enabled = $true $port1.Protocol = 17 $fwMgr = New-Object -ComObject HNetCfg.FwMgr $profiledomain=$fwMgr.LocalPolicy.GetProfileByType(0) $profiledomain.GloballyOpenPorts.Add($port1) Write-Host "[INFO] Successfully opened Firewall on Port UDP 1434." -ForegroundColor Green } Catch { Write-Host "[ERROR] Opening Firewall on Port 1434 failed." -ForegroundColor Red }
This post might contain affiliate links. We may earn a commission if you click and make a purchase. Your support is appreciated!
Björn arbeitet auch weiterhin aus Mexiko als Senior Consultant – Microsoft Data Platform und Cloud für die Kramer&Crew in Köln. Auch der Community bleibt er aus der neuen Heimat treu, er engagiert sich auf Data Saturdays oder in unterschiedlichen Foren. Er interessiert sich neben den Themen rund um den SQL Server, Powershell und Azure SQL für Science-Fiction, Backen 😉 und Radfahren.
Amazon.com Empfehlungen
Damit ich auch meine Kosten für den Blog ein wenig senken kann, verwende ich auf diese Seite das Amazon.com Affiliate Programm, so bekomme ich - falls ihr ein Produkt über meinen Link kauft, eine kleine Provision (ohne zusätzliche Kosten für euch!).
Auto Amazon Links: Keine Produkte gefunden.