News zu Tech Portfolio

TCP/IP-Kon­­­fi­­gu­ra­­ti­on und Probleme mit Firewalls im SQL-Server-Alltag

Ei­gent­lich könnte man den aktuellen DBA-Tipp genauso gut als Netzwerk-Admin-Tipp be­zeich­nen. Denn hier geht es aus­nahms­wei­se mal nicht explizit um Da­ten­ban­ken, Tabellen und Zeilen. Statt­des­sen geht es um ein Thema, welches sehr häufig (und besonders zu Unrecht) über­gan­gen wird – die TCP/IP-Kon­fi­gu­ra­ti­on.

“Klei­nig­keit!” … werden manche DBAs nun viel­leicht denken. 
“Einfach im SQL Server Config Manager ak­ti­vie­ren und schon geht ’s.” … ist häufig die Devise.

Doch die Realität sieht anders aus. Warum das so ist, zeigen wir euch im Folgenden:

Firewall Pro­ble­ma­tik

Windows Defender Firewall

Das SQL-Server-Setup in­stal­liert und kon­fi­gu­riert zwar (fast) alles, ändert jedoch nicht die Ein­stel­lun­gen der Windows Defender Firewall. Diese Aufgabe wird dem DBA oder zumindest dem­je­ni­gen über­las­sen, der den SQL Server in­stal­liert. In vielen Fällen führt das be­dau­er­li­cher­wei­se dazu, dass die Windows Defender Firewall de­ak­ti­viert wird. Das mag zunächst un­rea­lis­tisch klingen, ist im pro­duk­ti­ven Umfeld aber in einem Drittel aller Fälle tat­säch­lich so vorzufinden.

Wir zeigen in diesem DBA-Tipp mit welcher TCP/IP-Kon­fi­gu­ra­ti­on beides möglich ist – eine tadellose Ver­bin­dung von und zum SQL Server und zugleich ein aktiver IP-Paketfilter.

Die Lösung ist simpel. Alles was zu tun bleibt, ist zwei (optional drei) TCP/IP-Ports zu öffnen. Und das auch nur für zwei Dienste. Nach­fol­gend klären wir zunächst die Frage, welche Ports das sind und zeigen einen prak­ti­ka­blen Lö­sungs­weg auf.

Her­aus­for­de­rung bei der TCP/IP-Kon­fi­gu­ra­ti­on

Hier erklären wir an zwei schlich­ten Bei­spie­len, wie die beiden TCP/IP-Ports zu bestimmen sind und wie an­schlie­ßend jeweils eine Ausnahme definiert werden kann.

Der erste Port ist besonders einfach, da er nicht kon­fi­gu­rier­bar, und somit immer der Selbe ist. Es handelt sich um den SQL Server Browser, einen 32-Bit-Un­ter­stüt­zungs­dienst, der die einzelnen lokalen Instanzen kennt und ver­mit­telt. Er ist immer auf Port 1434 des UDP-Pro­to­kolls zu finden.

Der zweite (und zugleich wich­tigs­te) Port ist zwar nicht immer pauschal zu nennen, doch es kostet keinen nen­nens­wer­ten Aufwand ihn ausfindig zu machen. Man findet ihn in den Start-Meldungen des SQL-Server-Dienstes. Im Folgenden werden ver­schie­de­ne Wege zur Be­stim­mung aufgezeigt. 

Er­mitt­lung der Ports via klas­si­scher ERRORLOG-Datei:

EXECUTE   [master].[sys].[xp_ReadErrorLog]    0,   1,   N' listening ',   N'',   NULL,   NULL,   'ASC';
EXECUTE   [master].[sys].[xp_ReadErrorLog]    0,   1,   N' listening ',   N'',   NULL,   NULL,   'ASC';

Er­mitt­lung der Ports per Windows-Ereignisprotokoll:

Filter Current Log
Event View Filter

Außerdem lohnt sich ein Blick in den SQL Server Config Manager unter:

SQL Server Network Configuration

Protocols for MSSQLSERVER*

TCP/IP → Properties

↓        

IP Addresses



* Hier die jeweilige Instanz auszuwählen.

SQL Server Config Manager

Dabei gilt:

TCP/IP Einstellungen

Eine SQL Server Stan­dard­in­stanz läuft von Haus aus immer auf dem Port 1433 des TCP-Protokolls.

TCP/IP Einstellungen

Eine zu­sätz­li­che (benannte) SQL Server Instanz läuft zunächst auf einem dy­na­mi­schen Port des TCP-Pro­to­kolls, oft auch High Port genannt. Noch dazu ändert der Port sich bei jedem Start des Dienstes.

Letzteres ist un­er­freu­lich und hieraus re­sul­tiert auch das ei­gent­li­che Problem für Ad­mi­nis­tra­to­ren, welches auch einer der häu­figs­ten Gründe für das komplette Ab­schal­ten der in­te­grier­ten Firewall sein dürfte.

Lö­sungs­an­satz zur Kon­fi­gu­ra­ti­on der TCP/IP-Ports

Es stellt sich uns nun also die Frage: Wie soll man eine sinnvolle Aus­nah­me­re­gel anlegen, wenn der TCP/IP-Port wahllos wechselt?

Unsere Antwort: Gar nicht.

Denn anstatt sich mit dy­na­mi­schen Re­gel­wer­ken oder selbst­ler­nen­den Firewalls her­um­zu­schla­gen, ist es viel einfacher, den nötigen TCP/IP-Port fest (statisch) zu kon­fi­gu­rie­ren und an­schlie­ßend eine simple Regel dafür zu definieren.

Hierzu entfernt man die dy­na­mi­sche Port­an­ga­be im Ein­ga­be­feld des SQL Server Config Managers und setzt statt­des­sen den sta­ti­schen Port ein. Der einzige Nachteil daran ist, dass man die Instanz neu starten muss. Daher empfehlen wir, diese Kon­fi­gu­ra­ti­on gleich un­mit­tel­bar nach der In­stal­la­ti­on durchzuführen.

Nachdem die nötigen Än­de­run­gen vor­ge­nom­men wurden, kann man schnell und einfach eine Regel in der Windows Defender Firewall anlegen. Dafür bietet die Ma­nage­ment-Konsole einen guten As­sis­ten­ten an. Doch selbst dieser ist nicht unbedingt nötig, sofern man die Windows Power­Shell nicht scheut.

Beispiel-Skript Stan­dard­in­stanz:

new-NetFirewallRule  `
   -Name                  "MSSQL13-Queries"  `
   -DisplayName   "SQL Server 2016 - General Usage"  `
   -Group                "SQL Databases"  `
   -Direction        INBOUND  `
   -Description   "Microsoft SQL Server 2016 - default instance - standard queries and DDL statements"  `
   -Protocol          "TCP"  `
   -LocalPort        1433  `
   -Program            "C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\SQLServr.exe"  `
   -Service            "MSSQLSERVER"
 
new-NetFirewallRule  `
   -Name                  "MSSQL13-Browser"  `
   -DisplayName   "SQL Server 2016 - Instance Browser"  `
   -Group                "SQL Databases"  `
   -Direction       INBOUND  `
   -Description   "Microsoft SQL Server 2016 - finding and advertising local instances"  `
   -Protocol         "UDP"  `
   -LocalPort       1434  `
   -Program           "C:\Program Files (x86)\Microsoft SQL Server\90\Shared\SQLBrowser.exe"  `
   -Service           "SQLBrowser"

Das hier gezeigte Beispiel-Skript legt die nötigen Min­dest­re­geln für eine SQL Server 2016 Stan­dard­in­stanz an, um jenen Server un­mit­tel­bar im Anschluss zu benutzen. Erwähnt werden muss hier, dass der SQL-Browser-Dienst für Stan­dard­in­stan­zen nicht zwingend nötig ist.

Beispiel-Skript benannte Instanz:

new-NetFirewallRule  `

   -Name                  "MSSQL13-Queries"  `
   -DisplayName   "SQL Server 2016 - General Usage"  `
   -Group                "SQL Databases"  `
   -Direction       INBOUND  `
   -Description   "Microsoft SQL Server 2016 - instance CHRISTOPH - standard queries and DDL statements"  `
   -Protocol         "TCP"  `
   -LocalPort       1492  `
   -Program           "C:\Program Files\Microsoft SQL Server\MSSQL13.CHRISTOPH\MSSQL\Binn\SQLServr.exe"  `
   -Service           "MSSQL`$CHRISTOPH"
 
new-NetFirewallRule  `
   -Name                  "MSSQL13-Management"  `
   -DisplayName   "SQL Server 2016 - Maintenance"  `
   -Group                "SQL Databases"  `
   -Direction       INBOUND  `
   -Description   "Microsoft SQL Server 2016 - instance CHRISTOPH - dedicated admin connection for emergency                         purposes"
   -Protocol          "TCP"  `
   -LocalPort        1494  `
   -Program            "C:\Program Files\Microsoft SQL Server\MSSQL13.CHRISTOPH\MSSQL\Binn\SQLServr.exe"  `
   -Service            "MSSQL`$CHRISTOPH"
 
new-NetFirewallRule  `
   -Name                  "MSSQL13-Browser"  `
   -DisplayName   "SQL Server 2016 - Instance Browser"  `
   -Group                "SQL Databases"  `
   -Direction       INBOUND  `
   -Description   "Microsoft SQL Server 2016 - finding and advertising local instances"  `
   -Protocol         "UDP"  `
   -LocalPort       1434  `
   -Program           "C:\Program Files (x86)\Microsoft SQL Server\90\Shared\SQLBrowser.exe"  `
   -Service           "SQLBrowser"
Windows Defender Firewall Regeln

Im zweiten Beispiel werden ex­em­pla­risch die Regeln für eine SQL Server 2016 Instanz mit dem Namen “CHRISTOPH” angelegt. Hierbei wurden die freien TCP/IP-Ports 1492, sowie 1494 genutzt, wie im Screen­shot (rechter, oberer Bereich) zu sehen ist.
Es sei darauf hin­ge­wie­sen, dass die beiden Ports vorher von Hand kon­fi­gu­riert wurden. Zu sehen ist dies, zumindest teilweise, im rechten Drittel des Screenshot.

Mit beiden Bei­spie­len wollen wir ver­deut­li­chen, wie einfach und schnell man den Microsoft SQL Server auf die Ver­wen­dung eines ge­wünsch­ten TCP/IP-Ports festlegen kann.

Kontrolle

Hat man alles richtig gemacht – zur Er­in­ne­rung: Die Änderung am SQL Server wird immer erst nach einem Instanz-Neustart wirksam – so kann man sich an­schlie­ßend davon überzeugen.

Active Ports for T‑SQL
 
SELECT  LEFT(CONCAT([ip_address],':',[port]),24)          AS   'LocalConnection',
       LEFT(CONCAT([type_desc],' / ',[state_desc]),16)   AS   'UsageStatus'
FROM      [master].[sys].[dm_tcp_listener_states]
WHERE    [type]                = 0
         [is_ipv4]             = 1;

Eine Stan­dard­in­stanz wird von Haus aus immer Folgendes melden:

Die im obigen Beispiel ver­wen­de­te Instanz “CHRISTOPH” würde dagegen Folgendes ausgeben:

Default Instance
 
LocalConnection          UsageStatus    
------------------------ ----------------
127.0.0.1:1434           TSQL / ONLINE  
0.0.0.0:1433             TSQL / ONLINE
Named Instance
 
LocalConnection          UsageStatus    
------------------------ ----------------
127.0.0.1:1494           TSQL / ONLINE  
0.0.0.0:1492             TSQL / ONLINE

Besonders kritische Geister können natürlich auch die NetStat.exe bemühen und “von außen” auf den SQL-Server-Prozess schauen.

Weiterer Bedarf und Impulse

Mit unserem aktuellen DBA Tipp wollen wir dazu beitragen, dass ent­ste­hen­de Firewall-Probleme durch eine man­gel­haf­te TCP/IP-Kon­fi­gu­ra­ti­on künftig vermieden werden. 

Darüber hinaus können wir dir auch bei weiteren Her­aus­for­de­run­gen, verbunden mit dem Thema TCP/IP-Kon­fi­gu­ra­ti­on helfen.

  • Du hast mehr als eine Hand voll SQL Server auf einem Windows-Host und willst nun jede Instanz auf den gleichen TCP-Port legen?
  • Dein Anliegen ist es, mehrere benannte Instanzen auf dem selben Windows-Host ohne laufenden Brow­ser­dienst betreiben?
  • Um den Se­cu­ri­ty­/­Com­pli­ance-Richt­li­ni­en zu genügen, musst du aus­nahms­los alle ver­wen­de­ten TCP/IP-Ports (inklusive DAC, Service Broker und AlwaysOn) deines SQL Servers auflisten?
  • Du planst, eine Stan­dard­in­stanz ab­sicht­lich auf einen der hinteren Ports zu verlegen, um sie möglichst gut zu verbergen?

Dann ruf uns unter +49.371.909515–100 an. Unsere Spe­zia­lis­ten un­ter­stüt­zen dich gern!

Hier findest du weitere Posts zu den Themen Microsoft oder SQL Server aus unserem News Bereich. 
icon-arrow_right_medium-violet-blue.svg

Share this article

Facebook 
Twitter 
LinkedIn 
XING 
WhatsApp 
Email