SQL Server: Jak nastavit síťovou komunikaci skrze Windows Firewall s pomocí PowerShell (ProTIP)

V současné době vytvářím novou síť s novým vývojovým prostředím, kde již aplikuji důsledněji různá bezpečnostní pravidla, včetně povinně zapnutého firewallu. V síti provozujeme mimo jiné také SQL Server 2016 s pojmenovanou instancí. Poněkud mne překvapilo, Jaké bylo mé překvapení, když jsem zjistil, že zprovoznění po síti není již tak
jednoduché jako kdysi u starších verzí SQL Serveru … Povolení obvyklých dvou portů pro SQL Server Browser a instanci nestačilo …

Na počátku, když jsem začal řešit jaké porty povolit, si všude na internetu přečtete, že stačí dva porty (i v dokumentaci Microsoftu – SQL Server – Configure a Windows
Firewall for Database Engine Access
), pro SQL Server Browser a následně pro instanci. V praxi jsem pak zjistil, že komunikace je blokována, tedy až poté, co jsem vyřešil jak zapnout protokolování ve Windows Firewall.

Ve skutečnosti SQL Server používá poměrně slušný počet portů a to i v případě, pokud použijete metodu portu pro výchozí instanci s jedním portem. Při tomto spojení je zajištěna komunikace skrze SQL Server Browser, který pak zjistí se kterou instanci chcete navázat komunikaci a komunikaci na ni přesměruje.

 

Seznam portů pro SQL Server

Seznam portů pro Named instance. Služba/účel, protokol, port.

  • SQL Server, TCP, 1433
  • SQL Admin Connection, TCP, 1434
  • SQL Database Management, UDP, 1434
  • SQL Service Broker, TCP, 4022
  • SQL Debugger/RPC, TCP, 135
  • SQL Analysis Services, TCP, 2383
  • SQL Browser, TCP, 2382

 

Automatická konfigurace Firewallu, jednotlivé porty

Pro automatickou konfiguraci lze použít následující skript v PowerShellu

 

New-NetFirewallRule -DisplayName “SQL Server” -Direction Inbound –Protocol TCP –LocalPort 1433 -Action allow -Profile Domain -Group “SQL Server” New-NetFirewallRule -DisplayName “SQL Admin Connection” -Direction Inbound –Protocol TCP –LocalPort 1434 -Action allow -Profile Domain -Group “SQL Server” New-NetFirewallRule -DisplayName “SQL Database Management” -Direction Inbound –Protocol UDP –LocalPort 1434 -Action allow -Profile Domain -Group “SQL Server” New-NetFirewallRule -DisplayName “SQL Service Broker” -Direction Inbound –Protocol TCP –LocalPort 4022 -Action allow -Profile Domain -Group “SQL Server” New-NetFirewallRule -DisplayName “SQL Debugger/RPC” -Direction Inbound –Protocol TCP –LocalPort 135 -Action allow -Profile Domain -Group “SQL Server” New-NetFirewallRule -DisplayName “SQL Analysis Services” -Direction Inbound –Protocol TCP –LocalPort 2383 -Action allow -Profile Domain -Group “SQL Server” New-NetFirewallRule -DisplayName “SQL Browser” -Direction Inbound –Protocol TCP –LocalPort 2382 -Action allow -Profile Domain -Group “SQL Server”

 

 

Povolení síťové komunikace pro službu

Výše uvedený postup se mi nelíbil v tom směru, že je třeba řešit jednotlivé porty a v případě více instancí bude komplikovanější celý proces plně automatizovat. Více se mi líbila možnost konfigurace na jednotlivé služby. Taková konfigurace mi připadne také bezpečnější.Z hle­diska konfigurace s pomocí skriptů v PowerShellu se navíc jedná jen o dva řádky pro první instanci, následující instance vyžadují už jen přidání nové služby pro novou instanci (pokud používáte pouze základní konfiguraci SQL Serveru)

 

New-NetFirewallRule -DisplayName “SQL Server Browser” -Direction Inbound -Service „SQLBrowser“ -RemoteAddress LocalSubnet -Action Allow -Profile Domain -Group “SQL Server” New-NetFirewallRule -DisplayName “SQL Server Service DBDEV2 Instance” -Direction Inbound -Service „MSSQL`$DBDEV2“ -RemoteAddress LocalSubnet -Action Allow -Profile Domain -Group “SQL Server”

 

 

Odkazy

 

Michal Zobec

Michal Zobec Senior IT Consultant, Project Manager ZOBEC Consulting