Windows服务器上通过IPSec策略限制特定端口的访问源,本质上就是在操作系统层面建立一套"谁能连、连哪个端口"的访问控制规则。具体做法是打开"高级安全Windows Defender防火墙",创建入站规则,指定目标端口(比如只允许3389远程桌面被特定IP访问),然后在规则的"作用域"里填入允许的源IP地址或IP段,最后绑定到对应的IPSec策略上。这套方法不需要额外装软件,系统自带,安全级别高,适合生产环境长期使用。
很多运维人员习惯用Windows自带防火墙的基本规则来限制端口,但那种方式只能做到"开放或关闭某个端口",没法精细到"只让某几个IP用这个端口"。IPSec策略配合防火墙入站规则就能解决这个问题,它在网络层和传输层同时生效,比单纯的端口过滤更底层、更可靠。
一、IPSec策略的核心逻辑是什么IPSec(Internet Protocol Security)是Windows系统内置的一套网络安全协议框架,工作在IP层(网络层第三层)。它的核心能力有两个:一是对数据包进行加密和认证,二是对通信双方的身份和权限做验证。当我们用它来限制端口访问源时,主要用到的是"筛选器"和"筛选器操作"这两个组件。
筛选器(Filter)定义了"什么样的流量"需要被处理,比如源IP是192.168.1.100、目标端口是443的TCP流量。筛选器操作(Filter Action)定义了"对这些流量怎么处理",比如允许、阻止或者要求协商安全。把这两个东西组合在一起,再绑定到一个IPSec规则上,就形成了完整的访问控制策略。
理解这个逻辑很重要,因为很多人一上来就去配规则,结果配错了方向。记住:筛选器管"识别流量",筛选器操作管"处置流量",IPSec规则管"把它们串起来"。
二、操作前的准备工作在动手配置之前,有几件事必须确认好,否则配完可能直接把自己锁在服务器外面。
第一,确认你当前的管理方式。如果你是通过远程桌面(RDP,默认3389端口)管理服务器,那你在限制3389端口之前,必须先把你自己的IP加到允许列表里,否则规则生效后你自己也连不上了。这是最常见的"翻车"场景。
第二,确认服务器的网络适配器和IP配置。打开命令提示符,输入以下命令查看本机IP:
ipconfig /all
记下你的管理IP和服务器对外的IP,后面配置"作用域"时要用到。
第三,确保"IPSec策略"服务正在运行。按Win+R输入services.msc,找到"IPSec Policy Agent"服务,确认状态是"正在运行",启动类型设为"自动"。如果这个服务没启动,IPSec策略根本不会生效。
三、通过图形界面配置IPSec策略限制端口访问源下面是完整的图形界面操作步骤,一步步跟着做就行。
步骤一:打开"高级安全Windows Defender防火墙"。按Win+R输入wf.msc回车,或者在"控制面板→系统和安全→Windows Defender防火墙→高级设置"里打开。
步骤二:创建IPSec筛选器。在左侧面板点击"IPSec筛选器列表",右侧点"操作→创建筛选器"。
在弹出的窗口中:
名称填一个有意义的名字,比如"允许特定IP访问3389"。
描述可以写"仅允许192.168.1.0/24网段通过RDP端口访问"。
源地址选"特定IP地址"或"子网",填入允许访问的IP或IP段,比如192.168.1.0/24。
目标地址选"我的IP地址"(因为流量是从外部打到本机的)。
协议类型选TCP,目标端口填3389(或者你要限制的其他端口)。
镜像属性选"是"(如果你还需要反向流量也受控制的话)。
步骤三:创建筛选器操作。在左侧点击"IPSec筛选器操作",右侧点"操作→创建筛选器操作"。
选择"允许"或者"要求安全"。"允许"意味着匹配的流量直接放行,"要求安全"意味着匹配的流量必须走IPSec协商。一般做访问源限制用"允许"就够了。
步骤四:创建IPSec规则。在左侧点击"连接安全规则",右侧点"操作→创建规则"。
规则类型选"自定义"。
端点选"任意到任意"或者根据实际情况选"特定IP"。
要求的身份验证方式选"默认"或者"计算机证书"。
隧道设置选"不需要隧道"。
在"筛选器"选项卡,把刚才创建的筛选器和筛选器操作绑定上去。
步骤五:把IPSec规则绑定到防火墙入站规则。这一步是关键,很多人做到上一步就以为完了,其实还差一步。回到"高级安全Windows Defender防火墙"主界面,点击左侧"入站规则",找到或者新建一条针对目标端口的规则(比如3389端口的入站规则),右键属性,切换到"高级"选项卡,在"IPSec设置"里选择"自定义",然后指定刚才创建的IPSec规则。
这样,防火墙层面的端口规则和IPSec层面的访问源限制就联动起来了。
四、用PowerShell批量配置IPSec策略如果你管理的服务器数量多,或者需要标准化部署,图形界面一个一个点太慢了。PowerShell可以批量完成同样的操作。
以下是一段完整的PowerShell脚本示例,实现"只允许192.168.1.0/24网段访问本机3389端口":
# 创建IPSec筛选器
New-NetIPsecRule -DisplayName "Restrict RDP to 192.168.1.0/24" `
-InboundSecurity Require `
-OutboundSecurity Require `
-Protocol TCP `
-LocalPorts 3389 `
-RemoteAddress 192.168.1.0/24 `
-Action Allow `
-Phase1AuthSet (New-NetIPsecAuthProposal -Machine -Cert `
-CertProposalMethod Negotiate -CertProposalName Any `
-DHGroup Group14) `
-Phase2AuthSet (New-NetIPsecAuthProposal -Machine -Cert `
-CertProposalMethod Negotiate -CertProposalName Any) `
-PolicyStore ActiveStore
# 创建防火墙入站规则并绑定IPSec
New-NetFirewallRule -DisplayName "RDP Inbound with IPSec" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 3389 `
-Action Allow `
-RemoteAddress 192.168.1.0/24 `
-Profile Any
# 绑定IPSec规则到防火墙规则
Set-NetFirewallRule -DisplayName "RDP Inbound with IPSec" `
-Phase1AuthSet (New-NetIPsecAuthProposal -Machine -Cert `
-CertProposalMethod Negotiate -CertProposalName Any `
-DHGroup Group14) `
-Phase2AuthSet (New-NetIPsecAuthProposal -Machine -Cert `
-CertProposalMethod Negotiate -CertProposalName Any)
这段脚本做了三件事:创建IPSec规则限定源IP和端口、创建对应的防火墙入站规则、把两者绑定。实际使用时根据你的环境调整IP段和端口号即可。注意,运行PowerShell需要管理员权限。
五、常见端口的IPSec限制场景和建议不同业务场景需要限制的端口不一样,下面列出几个高频场景和对应的配置思路。
场景一:远程桌面(RDP,3389)。这是被攻击最多的端口之一。建议只允许运维管理网段访问,比如10.0.0.0/8或者更细的子网。千万不要对全网开放3389。
场景二:SQL Server(1433)。数据库端口如果暴露在公网,风险极大。用IPSec限制只允许应用服务器的IP访问,同时在SQL Server自身层面也做好登录认证。
场景三:SMB文件共享(445)。这个端口曾经是勒索软件的重灾区。如果必须开放,务必限制源IP,并且关闭SMBv1协议。
场景四:Web服务(80/443)。一般来说Web端口需要对公网开放,但管理端口(比如IIS管理器的远程管理端口)应该用IPSec限制来源。
一个通用原则:凡是不需要对全网开放的端口,都应该加上IPSec访问源限制。这是纵深防御的基本要求。
六、配置完成后的验证和排错规则配好之后,必须验证是否生效,否则等于白配。
验证方法一:从允许的IP发起连接,看是否能正常访问目标端口。用telnet或者Test-NetConnection测试:
Test-NetConnection -ComputerName 你的服务器IP -Port 3389
如果返回TcpTestSucceeded: True,说明通了。
验证方法二:从不允许的IP尝试连接,应该被拒绝。如果被拒绝了,说明规则在起作用。
验证方法三:查看IPSec安全关联(SA)是否建立成功。在命令行输入:
netsh ipsec static show all
或者用:
Get-NetIPsecRule -DisplayName "Restrict RDP to 192.168.1.0/24" | Get-NetIPsecPhase1SA
如果看到有对应的SA条目,说明IPSec协商成功。
常见排错点:如果配完之后发现自己连不上了,大概率是作用域填错了,把自己的IP排除在外了。这时候需要通过带外管理(比如云平台的控制台、物理KVM)登录服务器,修改规则把自己的IP加回去。
另一个常见问题是IPSec策略和防火墙规则没有正确绑定。检查防火墙规则的"高级"选项卡里是否指定了IPSec设置,如果显示"无",那就是没绑上,流量不会走IPSec过滤。
七、IPSec策略的维护和最佳实践IPSec策略不是配一次就完事的,需要持续维护。
第一,定期审计规则。每隔一到两个月检查一次所有IPSec规则,看看有没有过期的、冗余的或者过于宽松的。用PowerShell导出规则列表做对比:
Get-NetIPsecRule | Export-Csv -Path "C:\ipsec_rules_backup.csv" -NoTypeInformation
第二,规则命名要规范。不要用"规则1""规则2"这种名字,要用能说明用途的命名,比如"Allow_AppSrv_SQL1433""Block_Public_RDP"。后面排查问题时一目了然。
第三,优先使用子网而不是单个IP。如果你的允许来源是一个网段,直接填子网地址(比如192.168.1.0/24),不要一个一个IP添加。子网方式规则少、维护简单、性能也更好。
第四,注意规则优先级。当多条IPSec规则匹配同一条流量时,系统按优先级从高到低匹配。确保高优先级的规则是你最核心的限制策略,低优先级的放宽松规则。
第五,做好备份。每次修改规则之前先导出当前配置,万一出问题可以快速回滚。Windows没有自带的IPSec规则一键备份功能,但用上面的PowerShell导出命令可以手动做。
八、IPSec策略和其他安全手段的配合IPSec策略是网络层的访问控制,但它不是万能的。在实际生产环境中,它需要和其他安全手段配合使用。
和Windows防火墙基本规则配合:IPSec管"谁能连",防火墙基本规则管"端口开不开"。两者缺一不可。比如你可以用防火墙规则关闭某个端口,再用IPSec对必须开放的端口做来源限制。
和组策略配合:如果你管理的是域环境,可以通过组策略统一下发IPSec规则到所有域内服务器,保证策略一致性。
和日志审计配合:开启IPSec日志记录,可以追踪哪些IP尝试了连接、是否被阻止。在事件查看器的"应用程序和服务日志→Microsoft→Windows→IPsec"下可以找到相关日志。
和网络层ACL配合:如果你的服务器前面有硬件防火墙或者云平台的安全组,可以在那里也做一层源IP限制。多层防护永远比单层更安全。
总结来说,Windows服务器上用IPSec策略限制特定端口的访问源,是一种系统原生、不依赖第三方工具、安全级别高的访问控制方案。核心就是"筛选器定义流量特征+筛选器操作定义处置方式+IPSec规则串联绑定+防火墙入站规则联动"。掌握了这套逻辑,不管是单个服务器还是批量部署,都能游刃有余地控制好网络访问权限。
