在 Windows Server 2022 的“服务器核心”(Server Core)或“最小安装”模式下,没有图形界面(GUI)是常态,尤其是对于容器化部署、Hyper-V 主机或作为域控/文件服务器的场景。这时候,配置网络和防火墙主要依赖 PowerShell 和 命令行工具(Netsh)。
以下是针对网络配置和防火墙配置的标准操作流程,基于 Windows Server 2022 的实际环境。
一、 网络配置
在 GUI 环境中,我们通常通过“网络连接”属性设置 IP。在 Core 模式下,主要使用 NetAdapter PowerShell 模块。
1. 查看当前网络适配器状态
首先,你需要知道哪个网卡对应哪个接口索引(Index)。
Get-NetAdapter
输出示例:
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
Ethernet Intel(R) I211 Gigabit Network Connection 2 Up 00-11-22-33-44-55 1 Gbps
记下 ifIndex(例如这里是 2),后续命令会用到。
2. 配置静态 IP 地址
假设我们要给名为 “Ethernet” 的网卡设置静态 IP。
# 获取适配器对象
$adapter = Get-NetAdapter -Name "Ethernet"
# 设置静态 IP、子网掩码、网关
New-NetIPAddress -InterfaceIndex $adapter.ifIndex -IPAddress "192.168.1.100" -PrefixLength 24 -DefaultGateway "192.168.1.1"
# 配置 DNS 服务器
Set-DnsClientServerAddress -InterfaceIndex $adapter.ifIndex -ServerAddresses ("8.8.8.8", "114.114.114.114")
注意:
PrefixLength是 CIDR 格式的子网掩码位数。/24 代表 255.255.255.0。
3. 验证配置
Get-NetIPAddress -InterfaceIndex $adapter.ifIndex
Get-DnsClientServerAddress -InterfaceIndex $adapter.ifIndex
4. 重置网络配置(故障排查用)
如果配错了,想恢复 DHCP 自动获取:
Remove-NetIPAddress -InterfaceIndex $adapter.ifIndex -Confirm:$false
Remove-NetRoute -InterfaceIndex $adapter.ifIndex -DestinationPrefix "*" -Confirm:$false
二、 防火墙配置
Windows Server 2022 默认启用 Windows Defender 防火墙。Core 模式下推荐使用 NetSecurity PowerShell 模块,它比传统的 netsh advfirewall 更现代、更直观。
1. 查看当前防火墙状态
Get-NetFirewallProfile
这会显示 Domain、Private、Public 三个配置文件的状态(Enabled/Disabled)。
2. 创建入站规则(允许特定端口)
假设你要开放 TCP 80 端口(Web 服务):
# 创建规则名称为 "Allow-HTTP-80"
New-NetFirewallRule -DisplayName "Allow-HTTP-80" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 80 `
-Action Allow `
-Profile Any `
-RemoteAddress Any
-Profile Any:表示对所有网络类型(域、专用、公用)生效。建议根据实际网络环境指定,如-Profile Domain, Private更安全。-RemoteAddress Any:允许任何源 IP。如果需要限制特定 IP,可改为-RemoteAddress "192.168.1.0/24"。
3. 创建出站规则(允许访问外部)
通常默认允许所有出站流量,但出于安全加固,可能需要限制:
# 允许出站 HTTPS (443)
New-NetFirewallRule -DisplayName "Allow-Outbound-HTTPS" `
-Direction Outbound `
-Protocol TCP `
-LocalPort 443 `
-Action Allow `
-Profile Any
4. 管理现有规则
- 禁用规则:
Disable-NetFirewallRule -DisplayName "Allow-HTTP-80" - 启用规则:
Enable-NetFirewallRule -DisplayName "Allow-HTTP-80" - 删除规则:
Remove-NetFirewallRule -DisplayName "Allow-HTTP-80"
5. 高级技巧:按程序名放行
有时你不想暴露端口,而是允许某个 .exe 通信:
New-NetFirewallRule -DisplayName "Allow-Nginx" `
-Program "C:nginxnginx.exe" `
-Action Allow `
-Profile Any
三、 常用实用命令汇总
| 功能 | 命令 |
|---|---|
| 查看所有防火墙规则 | Get-NetFirewallRule | Format-Table DisplayName, Enabled, Direction, Action |
| 测试端口连通性(客户端) | Test-NetConnection 192.168.1.100 -Port 80 |
| 查看监听端口 | Get-NetTCPConnection -State Listen |
| 重置防火墙到默认设置 | Reset-NetFirewallProfile -All (谨慎使用!) |
四、 注意事项与最佳实践
-
远程管理问题:
- 如果你是通过 RDP 远程连接到这台 Core 服务器,修改防火墙规则时务必小心,避免把自己锁在外面。
- 建议在修改前,先添加一条允许 RDP(默认端口 3389)的规则,或者确保你使用的是带外管理(如 iDRAC/iLO)或已有其他管理通道。
- 可以使用
-PassThru参数让命令立即执行并返回结果,便于调试。
-
配置文件选择:
- Windows 防火墙有三个配置文件:Domain(加入域后)、Private(可信网络)、Public(不可信网络,如咖啡厅 Wi-Fi)。
- 生产环境中,服务器通常处于 Domain 或 Private 网络,Public 配置文件应严格限制甚至禁用。
- 使用
-Profile Domain, Private可以更精细地控制策略。
-
自动化与脚本化:
- 由于没有 GUI,所有配置都应写成 PowerShell 脚本(
.ps1),便于版本控制和重复部署。 - 可以将上述命令封装成函数,例如
Configure-ServerNetwork。
- 由于没有 GUI,所有配置都应写成 PowerShell 脚本(
-
日志与审计:
- 防火墙事件默认记录在 Windows 事件查看器中。
- 路径:
应用程序和服务日志 > Microsoft > Windows > Windows Firewall with Advanced Security > Firewall。 - 可以通过 PowerShell 查询:
Get-WinEvent -LogName "Microsoft-Windows-Windows Firewall With Advanced Security/Firewall" | Select-Object TimeCreated, Message
-
替代方案:Netsh
- 虽然
NetSecurity模块是新标准,但netsh advfirewall依然兼容且在某些旧脚本中常见。 - 例如:
netsh advfirewall firewall add rule name="Allow HTTP" dir=in action=allow protocol=TCP localport=80 - 建议优先使用 PowerShell 模块,因为它是面向对象的,更容易集成到自动化流程中。
- 虽然
总结
在没有图形界面的 Windows Server 2022 上,PowerShell 是唯一且最高效的管理方式。掌握 Get-NetAdapter、New-NetIPAddress、New-NetFirewallRule 这几个核心 cmdlet,就能完成 90% 以上的网络和防火墙配置任务。记住:先备份当前配置,再修改;操作前确认远程连接不会被阻断。
云技术博客