努力
加油

没有图形界面的Windows Server 2022怎么配置网络和防火墙?

在 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 (谨慎使用!)

四、 注意事项与最佳实践

  1. 远程管理问题:

    • 如果你是通过 RDP 远程连接到这台 Core 服务器,修改防火墙规则时务必小心,避免把自己锁在外面。
    • 建议在修改前,先添加一条允许 RDP(默认端口 3389)的规则,或者确保你使用的是带外管理(如 iDRAC/iLO)或已有其他管理通道。
    • 可以使用 -PassThru 参数让命令立即执行并返回结果,便于调试。
  2. 配置文件选择:

    • Windows 防火墙有三个配置文件:Domain(加入域后)、Private(可信网络)、Public(不可信网络,如咖啡厅 Wi-Fi)。
    • 生产环境中,服务器通常处于 Domain 或 Private 网络,Public 配置文件应严格限制甚至禁用。
    • 使用 -Profile Domain, Private 可以更精细地控制策略。
  3. 自动化与脚本化:

    • 由于没有 GUI,所有配置都应写成 PowerShell 脚本(.ps1),便于版本控制和重复部署。
    • 可以将上述命令封装成函数,例如 Configure-ServerNetwork。
  4. 日志与审计:

    • 防火墙事件默认记录在 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
  5. 替代方案: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% 以上的网络和防火墙配置任务。记住:先备份当前配置,再修改;操作前确认远程连接不会被阻断。