我有一个sql Server实例(sqlSERVER01-i01),在多实例sql Server上有一个专用的IP地址和端口(162.xxx.xxx.51:1433)(Windows Server上的每个sql Server实例都有自己的IP地址) )它们都在一台Windows服务器上运行(sqlSERVER01 / 162.xxx.xxx.50).
我还有一个专用的Reporting Services实例(sqlSERVERRS01-i01),它有自己的IP地址和端口(168.xxx.xxx.71:1433),它运行在具有自己IP地址的不同Windows服务器(sqlSERVERRS01)上(168 .xxx.xxx.70).
专用Reporting Services服务器具有应用程序APPL1,可通过http:// sqlSERVERRS01-i01:80 / Reports_APPL1或通过http:// sqlSERVERRS01:80 / Reports_APPL1访问.
由于主机标头的Reporting Services配置中的*:80配置,SSRS将接收这两个请求.
我们在每个IP范围之间有多个防火墙,这意味着我们必须为每个IP到IP或IP范围到IP连接申请特定规则.但是,当涉及两个服务器时,安全性要求它始终必须是防火墙中的IP到IP规则.
题
(根据屏幕截图进一步下调)
当Reporting Services服务器连接到sql Server实例(在162.xxx.xxx.51上)以检索数据时,它是否始终与Windows服务器的基础IP地址建立连接(168.xxx.xxx.70 /首选)SSRS正在运行,或者它(有时)是否使用sql Server Reporting Services实例的IP地址(168.xxx.xxx.71)?
这与使用IP到IP方法的防火墙规则的配置相关.我将要么申请通过端口1433或168.xxx.xxx.70到162.xxx.xxx.51连接定义168.xxx.xxx.71到162.xxx.xxx.51连接的规则港口1433.
目前我会申请两个防火墙规则.
奖金问题
是否可以将Reporting Services服务器配置为与专用IP地址通信?在这种情况下使用168.xxx.xxx.71地址.
答案我不是在寻找
我不是在寻求如何优化防火墙配置或如何为我们的网络实现分区概念的建议. (它已经在管道中).另外,我对反馈建议在同一台服务器上安装sql Server和SSRS以解决我的问题不感兴趣.我知道并且很乐意这样做但是对于需要与SSRS组件一起运行的第三方软件.
有用
如果我在SSRS和sql Server实例之间应用两个防火墙规则,我的配置是有效的.
168.xxx.xxx.71 --> 162.xxx.xxx.51 : 1433 168.xxx.xxx.70 --> 162.xxx.xxx.51 : 1433
我希望通过一个防火墙规则安全地减少并确保一切都能正常工作. (见下面的截图)
编辑:到目前为止我读过的文章暗示我只需要第二条规则,但不能保证.
我已经咨询过的文章
> Security Considerations for a SQL Server Installation
基础文章.
> Configure the Windows Firewall to Allow SQL Server Access
本文指向有关sql Server防火墙配置的所有其他文章.
> Configure a Windows Firewall for Database Engine Access
没有使用IP地址.
> Configure a Firewall for Report Server Access
这篇文章非常有趣,因为它注意到:
If you are accessing sql Server relational databases on external computers,or if the report server database is on an external sql Server instance,you must open port 1433 and 1434 on the external computer.
…但仍然没有关于IP配置/设置/默认值的说法.
> Source IP address selection on a Multi-Homed Windows Computer
> The functionality for source IP address selection in Windows Server 2008 and in Windows Vista differs from the corresponding functionality in earlier versions of Windows
第5条和第5条我们在James(dba.se)之前向我提供了6个.他们目前似乎是最合适的答案.然而,我有点怀疑一篇文章提到使用多个NIC,而我只有一个NIC分配了多个IP. Tom(dba.se)也提出了建议和一般性评论.
为什么在这里而不是在dba.stackexchange.com
由于问题的复杂性,我最初不愿意在serverfault.com上发布这个问题.这个问题既有sql Server特定的倾向,也有特定于Windows Server的倾向.最终我决定在这里发布它,因为我认为这是一个Windows Server IP处理的东西(丢失更好的单词).
如果主持人认为我会在dba.stackexchange.com上得到更好的回复,那么请在那里移动问题.
长解释
在我们的环境中,我们拥有托管多个sql Server实例和多个IP设置的Windows服务器.我们添加了复杂的防火墙配置,专用的sql Server Reporting Services(SSRS)服务器,并提出了一个看起来像这样的环境:
基本上我们可以在一个Windows服务器上运行多达15个(15个)sql Server实例.这对于专用的Reporting Services实例也是有效的.
防火墙规则
目前,不同的IP范围未配置为区域,这意味着我们必须将每个防火墙规则独立配置为IP到IP或IP范围到IP规则.当涉及两个服务器时,安全性要求它始终必须是IP到IP规则.每个sql Server实例都有自己的一套规则,用于通信中涉及的防火墙,这是服务器到服务器或客户端到服务器的链接.申请防火墙规则目前需要四到六周的等待期.减少防火墙规则的数量将减少网络安全团队的压力.
sql Server实例IP配置
通过修改sql Server配置管理器实用程序中的某些设置,可以将sql Server实例配置为仅在专用IP和端口上进行选取.第一步是启动sql Server配置管理器,在左侧部分选择sql Server网络配置| InstanceName的协议.在左侧窗格中,左键单击TCP / IP协议名称并启用协议.然后再次左键单击该协议,并打开“TCP / IP属性”窗口.
然后确保在协议寄存器中设置以下设置:
Enabled : Yes Listen All : No
在IP地址寄存器中,检查以下有关IP地址的设置(例如,对于此示例中的Reporting Services服务器,它将适用于168.xxx.xxx.71)
Active : Yes Enabled : Yes IP Address : 168.xxx.xxx.71 TCP Dynamic Ports : TCP Port : 1433
Note: It is important that the setting for TCP Dynamic Ports is empty not just a 0 (zero).
现在您有一个sql Server实例,它只使用端口1433在168.xxx.xxx.71上获取数据库连接.
sql Server Browser服务未运行,并且每个单独的sql Server实例都配置为仅在端口1433上使用其自己的IP地址.给定一个名为GENERAL的sql Server实例,一个主机名为sqlSERVER01且两个IP地址为162.xxx的Windows服务器.xxx.50(主机)和162.xxx.xxx.51(sql实例)我将得到以下配置项:
Windows Server : sqlSERVER01 Windows Server IP : 162.xxx.xxx.50 sql Server Instance : sqlSERVER01-i01 (DNS A record) sql Server Instance : GENERAL (can only be used on the host itself) sql Server IP/Port : 162.xxx.xxx.51:1433
sql Server不会接收162.xxx.xxx.50:1433的请求,因为没有sql Server实例配置为在sql Server配置管理器实用程序中侦听此IP地址. sql Server将仅接收对sqlSERVER01-i01(在端口1433上)或162.xxx.xxx.51,1433的请求.
sql Server Reporting Services实例摘要
sql Server Browser服务未运行,并且每个单独的sql Server Reporting Services实例都配置为仅在端口1433上使用其自己的IP地址.给定一个名为GENERAL的sql Server Reporting Services实例,一个主机名为sqlSERVERRS01的Windows服务器,一个应用程序在名为APPL1的SSRS和两个IP地址168.xxx.xxx.70(主机)和168.xxx.xxx.71(sql实例)上,我将得到以下配置项:
Windows Server : sqlSERVERRS01 Windows Server IP : 168.xxx.xxx.70 sql Server Instance : sqlSERVERRS01-i01 (DNS A record) sql Server Instance : GENERAL (can only be used on the host itself) sql Server IP/Port : 168.xxx.xxx.71:1433 Reporting Services : http://sqlserverrs01-i01/Reports_APPL1 http://sqlserverrs01/Reports_APPL1
sql Server不会获取168.xxx.xxx.70:1433的请求,因为没有sql Server实例配置为在sql Server配置管理器实用程序中侦听此IP地址. sql Server将仅接收对sqlSERVER01-i01(在端口1433上)或162.xxx.xxx.71,1433的请求.
由于主机标头的Reporting Services配置中的*:80配置,SSRS将接收http://sqlserverrs01-i01/Reports_APPL1或http://sqlserverrs01/Reports_APPL1的请求.
我希望我能为愿意花时间写答案的人提供足够的信息,我期待着您的技术细节和链接.
Written with 070011 and later manually modified to be stackexchange compatible.
历史
Edit 1:初始版本
Edit 2:为便于阅读而重新格式化.移动说明SF / DB向下.添加了Windows Server的主机名
Edit 3:修复了防火墙规则列表中的错误IP地址.
Edit 4:在某些地方将托管这个词改为运行(这是一个非虚拟化的环境).一次性添加IP地址
Edit 5:添加了我已经查阅过的文章列表并引用了支持
Edit 6:清理历史部分
解决方法
根据我在初期研究中发现的各种文件以及链接和讨论中提供的文件,我提出了一个可靠,可靠,合规的解决方案.
RFC 3484
进一步向下进行二进制比较,并且应用的规则根据RFC 3484,其显然也对IPv4地址有效.
RFC 3484也在规则8之后发布
Rule 8 may be superseded if the implementation has other means of choosing among source addresses. For example,if the implementation somehow knows which source address will result in the "best" communications performance.
多宿主Windows计算机上的源IP地址选择
现在并非RFC 3484中的所有规则都适用于IPv4地址. Microsoft博客文章Source IP address selection on a Multi-Homed Windows Computer解释了适用的规则.
Windows Vista / Windows Server 2008行为下方有一小部分内容如下:
Similar to XP when if a program doesn’t specify a source IP,the stack references the target IP address,and then examines the entire IP route table so that it can choose the best network adapter over which to send the packet. After the network adapter has been chosen,the stack uses the address selection process defined in RFC 3484 and uses that IP address as the source IP address for the outbound packets.
看到我在sql / SSRS实例中只有一个NIC,第一部分是没有意义的. Windows Server将始终选择唯一可用的NIC.
到目前为止,将RFC 3484与Microsoft Blog相结合,导致两个IP地址都是源IP地址的有效候选者.在答案中进一步解释.
电缆专家
来自Cable Guy The Cable Guy Strong and Weak Host Models的文章详细介绍了IP选择如何在强主机发送和接收环境以及弱主机发送和接收环境中工作.这是一个很好的附加读取,但不再说明如何选择源IP.该文章涉及已知的RFC 3484.
解释无法解释的
为了解释该解决方案,我们首先必须将所讨论的IP地址转换为它们的二进制等价物.看来我在我的问题中没有提供网关,我将假设两个值.
源IP地址和二进制表示法
以下是所涉及的IP地址的转换二进制值的列表.
10101000.00000001.00000001.01000110 168.xxx.xxx.070/128 Windows Server 10101000.00000001.00000001.01000111 168.xxx.xxx.071/128 sql Server / SSRS Instance 10101000.00000001.00000001.00000010 168.xxx.xxx.002/128 Gateway (Assumption 1) 10101000.00000001.00000001.01100010 168.xxx.xxx.100/128 Gateway (Assumption 2) 11111111.11111111.11111111.10000000 255.255.255.128/025 Subnet Mask / CIDR
目标IP地址和二进制表示法
10101000.00000000.00000000.00110011 168.xxx.xxx.051/128 sql Server
示例1:网关IP低于sql / SSRS实例IP
在此示例中,我将假设网关的IP地址低于sql Server / SSRS实例的IP地址,即168.001.001.002.
如果比较Windows Server和sql Server / SSRS实例的二进制地址,则具有以下内容:
sql/SSRS Instance IP 10101000.00000001.00000001.00000010 (Gateway Assumption 1) 10101000.00000001.00000001.01000111 (sql/SSRS) ----------------------------------- xxxxxxxx.xxxxxxxx.xxxxxxxx.x------- (x=matching high order bits) Window Server IP 10101000.00000001.00000001.00000010 (Gateway Assumption 1) 10101000.00000001.00000001.01000110 (Windows) ----------------------------------- xxxxxxxx.xxxxxxxx.xxxxxxxx.x------- (x=matching high order bits)
结果例1
在该示例中,两个IP地址具有相同数量的匹配高阶位(或最长匹配前缀).
到目前为止,http.sys进程将使用任一IP地址进行传出通信.
示例2:网关IP高于sql / SSRS实例IP
在此示例中,我将假设网关的IP地址高于sql Server / SSRS实例的IP地址,即168.001.001.100.
如果比较Windows Server和sql Server / SSRS实例的二进制地址,则具有以下内容:
sql/SSRS Instance IP 10101000.00000001.00000001.00000010 (Gateway Assumption 2) 10101000.00000001.00000001.01100010 (sql/SSRS) ----------------------------------- xxxxxxxx.xxxxxxxx.xxxxxxxx.x------- (x=matching high order bits) Windows Server IP 10101000.00000001.00000001.00000010 (Gateway Assumption 2) 10101000.00000001.00000001.01100010 (Windows) ----------------------------------- xxxxxxxx.xxxxxxxx.xxxxxxxx.x------- (x=matching high order bits)
结果例2
即使网关的IP地址现在高于Windows服务器的IP地址和sql / SSRS实例,匹配的高阶位(或最长匹配前缀)的数量仍然相同.到目前为止,http.sys进程将使用任一IP地址进行传出通信.
迄今为止的调查结果摘要
到目前为止,无法确定http.sys进程将在Windows服务器(.70)上的sql / SSRS实例(.71)上运行的传出通信使用哪个IP地址.
“当你消除了不可能的事物,无论剩下什么,无论多么不可能,都必须是真理” – 夏洛克福尔摩斯
在某些情况下,源IP地址绝对可以通过前面提到的RFC和Microsoft知识进行定位/选择/定义.但是,如果IP地址彼此太靠近并且靠近网关,那么这一切都归功于运气.或者是吗?
看到我处于制定(防火墙)规则的位置,微软有……
implementation (that) has other means of choosing among source addresses. For example,if the implementation somehow knows which source address will result in the “best” communications performance.
…然后,我需要做的就是确定http.sys进程的IP地址,即只创建一个具有所需IP地址的防火墙规则.
怎么了
>我将防火墙规则从168.xxx.xxx.71定义为168.xxx.xxx.51:1433
> sql / SSRS实例的http.sys组件符合RFC 3484,并根据定义的规则选择源IP
> IP地址168.xxx.xxx.71(在NIC1上)被确定为通过端口1433到达IP地址168.xxx.xxx.51的源IP地址,因此被分配给所有传出数据包
优点
>我绝不干涉RFC 3484的实现
>我绝不是在处理路由或ARP配置
>我遵守RFC 3484和Microsoft的实现
>我没有破解任何注册表设置或系统配置
>我有一个防火墙规则
验证
我还没有从防火墙规则中删除IP地址,但我相信它将按设计/定义的方式工作.随后将摘要.
历史