quinta-feira, 6 de fevereiro de 2014

SharePoint - PowerShell Script para verificar todas as portas utilizadas pelo SharePoint

PowerShell Script para verificar todas as portas utilizadas pelo SharePoint baseado no artigo Plan security hardening for SharePoint 2013.




Muito útil quando trabalhamos em uma farm com mais de um servidor!


## Script based on http://gallery.technet.microsoft.com/scriptcenter/Security-hardening-for-c425db1d

## Added several ports mentioned within this article http://technet.microsoft.com/en-us/library/cc262849.aspx
## Script works with SharePoint 2010 and 2013 (it checks Distributed Cache and App Fabric related ports too)
## Edited by David Amenda

$ComputerName = $Env:COMPUTERNAME


Function TestPort([string]$ComputerName,[int]$port,[String]$Type)

{
    $report = @()
$Temp = "" | select Status, Notes
 
    If ($Type -eq "tcp")
{  
        #Create temporary holder
      try
{
       $tcpobject = new-Object system.Net.Sockets.TcpClient($ComputerName,$port)
       #Connect to remote machine's port              
       If($tcpobject.Connected)
{    
           $True

       }
Else
{
$False

       }
$tcpobject.Close()
}
Catch
{
$False
}
 
    }    
    If ($Type -eq "UDP")
{
        #Create temporary holder
        $temp = "" | Select Status, Notes                                  
        #Create object for connecting to port on computer
        $udpobject = new-Object system.Net.Sockets.Udpclient
        #Set a timeout on receiving message
        $udpobject.client.ReceiveTimeout = 1000
        #Connect to remote machine's port            
        $udpobject.Connect($ComputerName,$port)
        #Sends a message to the host to which you have connected.
     
        $a = new-object system.text.asciiencoding
        $byte = $a.GetBytes("$(Get-Date)")
        [void]$udpobject.Send($byte,$byte.length)
     
        $remoteendpoint = New-Object system.net.ipendpoint([system.net.ipaddress]::Any,0)
        Try
{
            #Blocks until a message returns on this socket from a remote host.

            $receivebytes = $udpobject.Receive([ref]$remoteendpoint)

            [string]$returndata = $a.GetString($receivebytes)
            If ($returndata)
{
                $True
                $udpobject.close()
          }                    
        }
Catch
{
            If ($Error[0].ToString() -match "\bRespond after a period of time\b") {
                #Close connection
                $udpobject.Close()
                #Make sure that the host is online and not a false positive that it is open
                If (Test-Connection -comp $ComputerName -count 1 -quiet)
{
                    $True
                }
Else
{
                   $False                      
                }                      
            }
ElseIf ($Error[0].ToString() -match "forcibly closed by the remote host" )
{
                $False                    
            }
Else
{                    
                $udpobject.close()
            }
        }  
     
    }                                
                 
}


$PortCol = @()

$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 80
$Temp.RelatedService = "SSL"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 443
$Temp.RelatedService = "SSL"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16500
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16501
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16502
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16503
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16504
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16505
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16506
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16507
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16508
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16509
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16510
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16511
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16512
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16513
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16514
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16515
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16516
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16517
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16518
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 16519
$Temp.RelatedService = "Search Index Component (Intra-Farm only)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 22233
$Temp.RelatedService = "AppFabric Caching Service"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 22234
$Temp.RelatedService = "AppFabric Caching Service"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 22335
$Temp.RelatedService = "AppFabric Caching Service"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 22236
$Temp.RelatedService = "AppFabric Caching Service"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 808
$Temp.RelatedService = "Windows Communication Foundation communication"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 5725
$Temp.RelatedService = "Profile Sync"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 389
$Temp.RelatedService = "Profile Sync (LDAP Service)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "UDP"
$Temp.Port = 389
$Temp.RelatedService = "Profile Sync (LDAP Service)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 88
$Temp.RelatedService = "Profile Sync (Kerberos)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "UDP"
$Temp.Port = 88
$Temp.RelatedService = "Profile Sync (Kerberos)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 53
$Temp.RelatedService = "Profile Sync (DNS)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "UDP"
$Temp.Port = 53
$Temp.RelatedService = "Profile Sync (DNS)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "UDP"
$Temp.Port = 464
$Temp.RelatedService = "Profile Sync (Kerberos Password Change)"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 445
$Temp.RelatedService = "Direct-hosted SMB"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "UDP"
$Temp.Port = 445
$Temp.RelatedService = "Direct-hosted SMB"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "UDP"
$Temp.Port = 137
$Temp.RelatedService = "NetBIOS over TCP/IP"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "UDP"
$Temp.Port = 138
$Temp.RelatedService = "NetBIOS over TCP/IP"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 139
$Temp.RelatedService = "NetBIOS over TCP/IP"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 32843
$Temp.RelatedService = "HTTP binding"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 32844
$Temp.RelatedService = "HTTPS binding"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 32845
$Temp.RelatedService = "net.tcp binding"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 1433
$Temp.RelatedService = "SQL Server communication"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "UDP"
$Temp.Port = 1434
$Temp.RelatedService = "SQL Server communication"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 32846
$Temp.RelatedService = "Microsoft SharePoint Foundation User Code Service"
$PortCol += $Temp
$Temp = "" | select Proto,Port,RelatedService,Open
$Temp.Proto = "TCP"
$Temp.Port = 25
$Temp.RelatedService = "SMTP for e-mail integration"
$PortCol += $Temp



foreach($Item in $PortCol)

{
$Type = $Item.Proto
$Port = $Item.port
If(TestPort $ComputerName $port $Type)
{

$Item.Open = "True"
}
Else
{
$Item.Open = "False"
}

}

$PortCol | Sort-Object -Property "Port"







Um comentário:

  1. Excelente script! Funciona impecavelmente. Eu adicionaria as portas do WorkFlow Manager, ultimamente quase todas as implementações de SharePoint 2013 levam o Workflow Manager junto.

    ResponderExcluir