我试图只允许我的域中的特定计算机连接到 SQL Server 实例,但我似乎无意中阻止了所有计算机的连接。
当我进入托管数据库的服务器配置防火墙时,在设置了哪些计算机可以访问实例后,防火墙会阻止所有计算机。将规则恢复到原始状态后,防火墙便可以正常工作。
在防火墙规则上,我设置了以下内容:
- 常规选项卡
- 操作:如果连接安全,则允许连接。
- 远程计算机
- 仅允许来自这些计算机的连接:已选中
- 下面的对话框中填写的是我想要的计算机名:DOMAIN\PC1$,DOMAIN\PC2$等等。
设置此规则会导致与服务器的连接在大约 60 秒后超时,然后返回通用的“服务器不存在或访问被拒绝”消息。
我需要使用哪些正确的设置?
答案1
您可以使用Windows 服务器 2012内置防火墙,发布简单适用Netsh AdvFirewall 防火墙命令从命令提示符(或批处理脚本)以管理员身份运行。
看“脚本和命令”下方有“解释”...
解释
本质上你可以允许这样的入站连接:
由TCP 端口号SQL Server 实例正在侦听服务器
[ localport = { any | Integer | rpc | rpc-epmap | teredo | [ ,... ] } ]
指定与该规则匹配的具有匹配IP端口号的网络数据包。本地端口与出站网络数据包的源端口字段进行比较。 与入站网络数据包的目标端口字段进行比较。
- 整数. 指定确切的端口号必须存在才能使数据包与规则匹配。端口值可以是单独的数字从 0 到 65535,一个范围,例如 5000-5020,或以逗号分隔的数字和范围列表。
可以指定多个条目本地端口用逗号分隔。请勿包含任何空格。
如果本地端口没有指定,默认值为任意。
仅允许此 TCP 端口上的连接来自特定(或一组)IP 地址
[ localip = { Addresses } ]
指定具有匹配 IP 地址的网络数据包与此规则匹配。localip 与入站网络数据包的目标 IP 地址字段进行比较。它与出站网络数据包的源 IP 地址字段进行比较。
- IP地址。仅匹配精确的 IPv4或者IPv6地址。
多次入境可以指定为本地IP用逗号分隔。请勿包含任何空格。
如果本地IP没有指定,默认值为任意。
脚本和命令
命令行
netsh advfirewall firewall add rule name="Inbound 1433 Access Per IP Address" dir=in protocol=tcp action=allow localip=192.168.1.10,192.168.1.20,192.168.1.30
批处理脚本允许
ECHO ON
SET name="Inbound 1433 Access Per IP Address"
SET dir=in
SET protocol=tcp
SET action=allow
SET localport=1433
SET localip=192.168.1.1,192.168.1.2,192.168.1.1
netsh advfirewall firewall add rule name=%name% dir=%dir% protocol=%protocol% action=%action% localip=%localip%
删除规则
netsh advfirewall firewall delete rule name="Inbound 1433 Access Per IP Address"