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 hlediska 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
- PowerShell Script for SQL Firewall rules (anglicky)
- SQL Server – Configure a Windows Firewall for Database Engine Access (anglicky)