Наводим порядок с правилами фаэвола для Remote Desktop


При установке новой системы на сервер нередко администратор вручную включает доступ к удаленному рабочему столу (RDP, Remote Desktop). При этом автоматически включаются соответствующие стандартные правила фаэрвола.

Если позднее на сервер приезжает групповая политика (GPO), которая централизованно управляет включением сервиса RDP и добавляет кастомизированные правила фаэрвола для RDP (например, содержат разрешение доступа по ip-адресам только для администраторов), то включенные стандартные правила начинают мешать, т.к. разрешают доступ всем, и их необходимо выключить.

Задача: среди множества серверов найти те, где нужно запретить включенные стандартные правила Remote Desktop, и произвести выключение таких правил.

В настоящее время задача удобно решается с помощью командлетов Get-NetFirewallRule и Disable-NetFirewallRule. (При их тестировании выяснилось, что они плохо работают (баг) в конвейере, т.к. не принимают параметр InputObject).

Скрипт опубликован в TechNet Gallery Disable-RDPStandartFirewallRules

Текст скрипта приведен ниже:



<#


.Synopsis


   Disable standart Remote Desktop firewall rules


.DESCRIPTION


   The cmdlet disable standart Remote Desktop firewall rules for one or multiple computers.


   If you manually enable RDP (and RDP firewall rules) on an server and later create GPO to manage RDP 


   then you must disable standart RDP firewall rules (GPO rules is working). 


   The manual process is very long for multiple servers. The cmdlet automate the process.


   You can discover servers with enabled standart RDP rules (use -Whatif and -PassThru keys simultaneously)


.EXAMPLE


    $comps = Get-ADComputer -Filter * -SearchBase "OU=AppServers,DC=domain,DC=ru" | Select-Object -ExpandProperty Name


    $r=$comps | Disable-RDPStandartFirewallRules -Verbose -WhatIf -PassThru


.EXAMPLE


   "server1" | Disable-RDPStandartFirewallRules


.INPUTS


    The Cmdlet input string or array of strings with computer names


    The Cmdlet support pipeline for ComputerNames.


.OUTPUTS


   Array of processed computer's names if PassThru = True


.PARAMETER ComputerName


    Name of computer to be connected (by CIM Session).


    The parameter is mandatory.


    The parameter support pipeline (alias is Name)


.PARAMETER PassThru


    If True, output contain a processed computer names.


    Default = False


#>


function Disable-RDPStandartFirewallRules


{


    [CmdletBinding( 


                  SupportsShouldProcess=$true, 


                  PositionalBinding=$false,


                  HelpUri = 'http://www.microsoft.com/',


                  ConfirmImpact = 'High'


                  )]


    [OutputType([String[]])]


    Param


    (


        # Param1 help description


        [Parameter(Mandatory=$true, 


                   ValueFromPipeline=$true,


                   #ValueFromPipelineByPropertyName=$true, 


                   ValueFromRemainingArguments=$false, 


                   Position=0)]


        [ValidateNotNull()]


        [ValidateNotNullOrEmpty()]


        [Alias("Name")]


        $ComputerName,


        [parameter(mandatory=$False)]


        [switch]


        $PassThru = $False


    )


    Begin


    {


        [string[]]$ResultComputerNames = @()


    }


    Process


    {


        $RDPRules_All = Get-NetFirewallRule -DisplayGroup "Remote Desktop" -CimSession $ComputerName -PolicyStore ActiveStore


        [array]$RDPRules_GPO = $RDPRules_All | ? { $_.PolicyStoreSourceType -eq "GroupPolicy" -and $_.Enabled -eq "True" }


        [array]$RDPRules_Persist = $RDPRules_All | ? { $_.PolicyStoreSourceType -eq "Local" -and $_.Enabled -eq "True" }


        if ($RDPRules_Persist) {


            Write-Verbose "There is enabled Persist RDP rules: count=$($RDPRules_Persist.Count) on target $ComputerName"


            if ($RDPRules_GPO) {


                Write-Verbose "There is enabled GPO RDP rules: count=$($RDPRules_GPO.Count) on target $ComputerName"


                if ($pscmdlet.ShouldProcess("$ComputerName", "Disable Persist RDP Rules"))


                {


                    Disable-NetFirewallRule -DisplayGroup "Remote Desktop" -CimSession $ComputerName 


                } else {


                    Disable-NetFirewallRule -DisplayGroup "Remote Desktop" -CimSession $ComputerName -WhatIf


                }


                $ResultComputerNames +=[string]$ComputerName


            } else {


                Write-Warning "No GPO RDP Rules on target $ComputerName"            }


        } else {


            Write-Warning "No Enabled Persist RDP rules on target $ComputerName"


        }


    }


    End


    {


        if ($PassThru) {


            $ResultComputerNames


        }


    }


}


Реклама

Один ответ

  1. […] Наводим порядок с правилами фаэвола для Remote Desktop […]

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: