Windows Server Core 管理与 PowerShell 笔记(七)———— 防火墙与网络安全

2019-04-06 362 Words Windows Powershell

Windows Server Core 管理与 PowerShell 笔记(七)———— 防火墙与网络安全

这篇文章主要介绍 Windows 网络安全的相关知识。Windows Server 的工作核心是提供网络服务,因此不可避免的会有遭受攻击的风险。从这个角度说,Windows 的网络安全也是 Windows 安全的重要组成部分。

PowerShell 的 NetSecurity 模块提供了关于网络安全相关的命令,可以使得我们较为方便的对 Windows 的网络安全加以维护。在 NetSecurity 模块中,主要分为两部分指令。一部分是防火墙配置的相关指令。这些指令提供了对 Windows 防火墙不同细粒度的操作。另外一部分是 IPSec 协议的具体实现。IPSec 是一个 TCP/IP 网络层的安全协议,提供了加密、认证等功能。

由于篇幅原因。本文只介绍 Windows 防火墙有关的最基础指令,使用这些指令可以完成绝大部分的防火墙配置工作。更加高级的指令和 IPSec 相关指令暂且不介绍,如有需要可以具体查阅文档。

一、 Windows 防火墙概述

在 Windows Server 防火墙之中,预先定义了多种配置文件适用于不同的网络环境之下。主要有一下几种:

  • Domain 域环境。当计算机加入某一个特定域的时候,其防火墙边界扩展到域的边界。而对域内计算机信任程度较高。开启网络发现和文件共享服务。
  • Private 专有网路。当计算机处在某一个局域网(主要用于家庭和工作网络时),对于该网络中的设备比较信任。此时,开启网络发现和文件共享服务。
  • Public 公共网络。此时计算机处在公网之上。因此具有最严格的防火墙策略。此时文件共享和发现服务对外不可见。

Windows 防火墙由多组规则(Rule)所定义。每一个规则都可以设置规则名称、端口、方向、用户、IP、接口、应用程序、服务等属性。多个规则聚合成一些规则组,便于管理。每一个规则都可以设置成“允许”或者“拒绝”。

对于网络流量包,有默认三种处理方式:“全部允许”、“拒绝与规则不匹配的”以及“全部拒绝”三种默认动作。其中使用“拒绝与规则不匹配的”的策略时候,需要经过上面这些 Filter 进行过滤。只有留下的数据包才能够进入安全区。

二、Windows 防火墙配置文件设置

我们使用 Get-NetFirewallPrfile 命令来查看当前计算机的防火墙配置文件,以及配置文件中的属性。下面的例子可以看到防火墙的三组策略,并且全部开启。

PS C:\Windows\system32> Get-NetFirewallProfile | Format-Table Name,Enabled

Name    Enabled
----    -------
Domain     True
Private    True
Public     True

使用 Set-NetFirewallProfile 来设置防火墙配置属性(主要是是否开启、默认动作等)。例如:

PS C:\>Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True # 开启所有防火墙配置
Set-NetFirewallProfile –Name Domain –DefaultInboundAction Block # 默认阻塞域网络中所有入境请求。

三、Windows 防火墙规则设置

Comlet Get-NetFirewallRule 用于查询目前所有的 Rules。比如:

PS C:\ > Get-NetFirewallRule | where {$_.Enabled -eq "True"} | ft 

可以将使能的规则以表格的形式打印出来。

PS C:\>Get-NetFirewallProfile -Name Public | Get-NetFirewallRule

则打印所有公共区域的规则。

Comlet Set-NetFirewallRule 用于设置一条已经存在的规则;New-NetFirewallRule 则用于新建一条新的规则。这些命令的常用可选参数有:

  • -DisplayName 展示名称,可以使用这个名字便于记忆,并选取规则。
  • -Action 动作,可以为 Allow 或者 Block。
  • -Name 名称
  • -Description 描述
  • -Profile 区域 Domain、Public 和 Private
  • -Direction 方向,可以为 InBound 或者 OutBound。
  • -Enabled 是否开启,True 或 False
  • -Group 组名
  • -InterfaceAlias 接口别名
  • -InterfaceType 接口类型
  • -LocalAddress 本地地址
  • -LocalPort 本地端口
  • -LocalUser 本地用户
  • -Program 制定程序
  • -Protocol 协议 TCP 或 UDP
  • -RemoteAddress 远程地址
  • -RemoteMachine 远程机器
  • -RemotePort 远程端口
  • -RemoteUser 远程用户
  • -Service 服务

例子:

PS C:\> New-NetFirewallRule -DisplayName "Block Outbound Port 80" -Direction Outbound –LocalPort 80 -Protocol TCP -Action Block # 打开 80 端口

PS C:\> New-NetFirewallRule -DisplayName "Allow Authenticated Messenger" -Direction Inbound -Program "C:\Program Files (x86)\Messenger\msmsgs.exe" -Authentication Required -Action Allow # 允许 msmsgs 程序流量进入

PS C:\> New-NetFirewallRule -Name "Block Wireless In" -Direction Inbound -InterfaceType Wireless -Action Block # 组织所有无限网卡流量进入

Enable-NetFirewallRuleDisable-NetFirewallRule 用于启动和关闭一条配置。可以使用 -Name、 -DisplayName 或 -Group 来选取一个或一组配置。而后开启这些配置。例子:

PS C:\> Enable-NetFirewallRule -DisplayName "Network Discovery" # 打开网络发现的规则
PS C:\> Enable-NetFirewallRule –Group "@FirewallAPI.dll,-28502" # 打开某一个组的规则
PS C:\> Disable-NetFirewallRule –DisplayName "Network Discovery" # 关闭网络发现规则。

Rename-NetFirewallRule 用于重命名;Copy-NetFirewallRule 用于复制一条规则。参数 -NewName 指定了新的名称。

Remove-NetFirewallRule 用于删除规则。可以使用上面这些参数来筛选处删除的规则。当参数为空时候,默认删除所有规则。

四、Windows 防火墙 Filter

对于 AddressFilter, ApplicationFilter,InterfaceFilter, InterfaceTypeFilter, PortFilter, SecurityFilter 和 ServiceFilter 这些过滤器,都有对应的 Get 和 Set 命令。通过这些 Get 函数可以获取对应的过滤器对象。也可以使用 Set 函数修改这些过滤器对象,并进而修改防火墙规则。

这里不再具体讲解这些 Filter 如何使用,而给出官网文档中的历程,予以参考:

PS C:\> Set-NetFirewallRule -DisplayName "Play to streaming server" | Get-NetFirewallRulePortFilter |  where {$_.LocalPort -eq "10246"} | Set-NetFirewallPortFilter -LocalPort Any  # 将 Play to streaming server 规则中选出 10246 端口的规则,并将其端口改为 Any。

PS C:\> Get-NetFirewallRule -DisplayName "Core Networking" | Get-NetFirewallAddressFilter | Where-Object {$_.RemoteAddress -Eq "LocalSubnet6"} | Get-NetFirewallRule | Set-NetFirewallRule -RemoteAddress LocalSubnet4 # 将 Core Networking 规则中所有 RemoteAddress 为 LocalSubnet6 的修改为 LocalSubnet4。

五、总结

本文介绍了 Windows 防火墙配置的 PowerShell 基本命令以及基本使用方法,而没有介绍 netsh 这一个传统 CMD 命令。