Public/Enable-Management.ps1
<#
.Description Configures trusted hosts that the admin account may connect from and enables management from the WAN interface. Don't forget to include your internal and management subnets if you still want to be able to manage the firewall from them! DO NOT ALLOW ADMINISTRATIVE ACCESS ON THE WAN INTERFACE WITHOUT CONFIGURING LOCALIN POLICIES (New-LocalinPolicy). IT'S A MAJOR SECURITY RISK. .Parameter AdminUsername Specify the admin username who management access is being enabled for .Parameter AllowAccess Specify the Administrative Access preferences that should be allowed. Should be provided in a space delimited string format. Options below ping PING access. https HTTPS access. ssh SSH access. snmp SNMP access. http HTTP access. telnet TELNET access. fgfm FortiManager access. radius-acct RADIUS accounting access. probe-response Probe access. fabric Security Fabric access. ftm FTM access. .Parameter TrustedCIDR1 Set the first Trusted CIDR address allowed to access the Fortigate. ex: 192.168.0.0/24 .Parameter TrustedCIDR2 Set the second Trusted CIDR address allowed to access the Fortigate. ex: 192.168.0.0/24 .Parameter TrustedCIDR3 Set the third Trusted CIDR address allowed to access the Fortigate. ex: 192.168.0.0/24 .Parameter TrustedCIDR4 Set the fourth Trusted CIDR address allowed to access the Fortigate. ex: 192.168.0.0/24 .Parameter TrustedCIDR5 Set the fifth Trusted CIDR address allowed to access the Fortigate. ex: 192.168.0.0/24 .Parameter TrustedCIDR6 Set the sixth Trusted CIDR address allowed to access the Fortigate. ex: 192.168.0.0/24 .Parameter WANInterfaceName Name of the Wan Interface .Example $Params = @{ AdminUsername = "admin" AllowAccess = "ping https ssh ftm fgfm" TrustedCIDR1 = "192.168.0.0/16" TrustedCIDR2 = "10.0.0.0/8" TrustedCIDR3 = "172.16.0.0/12" TrustedCIDR4 = "8.8.8.8/32" WANInterfaceName = "port1" } Enable-Management @Params This example allows management from all Private Class ranges and one public IP .Example $Params = @{ AdminUsername = "admin" AllowAccess = "https" TrustedCIDR1 = "192.168.0.0/24" TrustedCIDR2 = "8.8.8.8/32" WANInterfaceName = "port1" } Enable-Management @Params This example allows management from a single /24 subnet and a single public range. It also limits access to HTTPS .Example New-SSHSession -computername 192.168.0.1 $Params = @{ AdminUsername = "admin" AllowAccess = "ping https ssh ftm fgfm" TrustedCIDR1 = "192.168.0.0/16" TrustedCIDR2 = "10.0.0.0/8" TrustedCIDR3 = "172.16.0.0/12" TrustedCIDR4 = "8.8.8.8/32" WANInterfaceName = "port1" } $command = Enable-Management @Params $result = Invoke-SSHCommand -Command $command -SessionId 0 $result.output This example generates an SSH session and invokes the output of this function against that session. .Example New-SSHSession -computername 192.168.0.1 New-SSHSession -computername 192.168.1.1 $Params = @{ AdminUsername = "admin" AllowAccess = "ping https ssh ftm fgfm" TrustedCIDR1 = "192.168.0.0/16" TrustedCIDR2 = "10.0.0.0/8" TrustedCIDR3 = "172.16.0.0/12" TrustedCIDR4 = "8.8.8.8/32" WANInterfaceName = "port1" } $command = Enable-Management @Params $sessions = Get-SSHSession foreach ($session in $sessions) { Write-Output "Invoking Command against $session.host" $result = Invoke-SSHCommand -Command $command -SessionId $session.sessionID $result.output } This example generates multiple SSH sessions and invokes the output of this function against all active sessions. .Notes This function currently supports up to 6 Trusted Host subnets. Open a Github issue to request more added. .Link https://github.com/TheTaylorLee/AdminToolbox/tree/master/docs #> Function Enable-Management { [CmdletBinding()] Param ( [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR1')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR2')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR3')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR4')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR5')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR6')] [string]$AdminUsername, [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR1')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR2')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR3')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR4')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR5')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR6')] [string]$AllowAccess = "ping https ssh ftm fgfm", [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR1')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR2')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR3')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR4')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR5')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR6')] $WANInterfaceName, [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR1')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR2')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR3')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR4')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR5')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR6')] [ValidateScript( { if ($_ -match '^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[/]{1}[0-9]{2}$') { $true } else { throw "$_ is an invalid pattern. You must provide a proper CIDR format. ex: 192.168.0.0/24" } })] $TrustedCIDR1, [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR2')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR3')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR4')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR5')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR6')] [ValidateScript( { if ($_ -match '^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[/]{1}[0-9]{2}$') { $true } else { throw "$_ is an invalid pattern. You must provide a proper CIDR format. ex: 192.168.0.0/24" } })] $TrustedCIDR2, [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR3')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR4')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR5')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR6')] [ValidateScript( { if ($_ -match '^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[/]{1}[0-9]{2}$') { $true } else { throw "$_ is an invalid pattern. You must provide a proper CIDR format. ex: 192.168.0.0/24" } })] $TrustedCIDR3, [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR4')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR5')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR6')] [ValidateScript( { if ($_ -match '^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[/]{1}[0-9]{2}$') { $true } else { throw "$_ is an invalid pattern. You must provide a proper CIDR format. ex: 192.168.0.0/24" } })] $TrustedCIDR4, [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR5')] [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR6')] [ValidateScript( { if ($_ -match '^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[/]{1}[0-9]{2}$') { $true } else { throw "$_ is an invalid pattern. You must provide a proper CIDR format. ex: 192.168.0.0/24" } })] $TrustedCIDR5, [Parameter(Mandatory = $true, ParameterSetName = 'TrustedCIDR6')] [ValidateScript( { if ($_ -match '^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[/]{1}[0-9]{2}$') { $true } else { throw "$_ is an invalid pattern. You must provide a proper CIDR format. ex: 192.168.0.0/24" } })] $TrustedCIDR6 ) if ($TrustedCIDR1) { $calc = Invoke-PSipcalc $TrustedCIDR1 $IPAddress = ($calc).IP $SubnetMask = ($calc).SubnetMask $t1 = "set trusthost1 $IPAddress $SubnetMask" $t2 = $null $t3 = $null $t4 = $null $t5 = $null $t6 = $null } if ($TrustedCIDR2) { $calc = Invoke-PSipcalc $TrustedCIDR2 $IPAddress = ($calc).IP $SubnetMask = ($calc).SubnetMask $t2 = "set trusthost2 $IPAddress $SubnetMask" $t3 = $null $t4 = $null $t5 = $null $t6 = $null } if ($TrustedCIDR3) { $calc = Invoke-PSipcalc $TrustedCIDR3 $IPAddress = ($calc).IP $SubnetMask = ($calc).SubnetMask $t3 = "set trusthost3 $IPAddress $SubnetMask" $t4 = $null $t5 = $null $t6 = $null } if ($TrustedCIDR4) { $calc = Invoke-PSipcalc $TrustedCIDR4 $IPAddress = ($calc).IP $SubnetMask = ($calc).SubnetMask $t4 = "set trusthost4 $IPAddress $SubnetMask" $t5 = $null $t6 = $null } if ($TrustedCIDR5) { $calc = Invoke-PSipcalc $TrustedCIDR5 $IPAddress = ($calc).IP $SubnetMask = ($calc).SubnetMask $t5 = "set trusthost5 $IPAddress $SubnetMask" $t6 = $null } if ($TrustedCIDR6) { $calc = Invoke-PSipcalc $TrustedCIDR6 $IPAddress = ($calc).IP $SubnetMask = ($calc).SubnetMask $t6 = "set trusthost6 $IPAddress $SubnetMask" } if ($t6) { Write-Output " config system admin edit ""$AdminUsername"" $t1 $t2 $t3 $t4 $t5 $t6 next end config system interface edit ""$WANInterfaceName"" set allowaccess ping https ssh ftm next end" } elseif ($t5) { Write-Output " config system admin edit ""$AdminUsername"" $t1 $t2 $t3 $t4 $t5 next end config system interface edit ""$WANInterfaceName"" set allowaccess ping https ssh ftm next end" } elseif ($t4) { Write-Output " config system admin edit ""$AdminUsername"" $t1 $t2 $t3 $t4 next end config system interface edit ""$WANInterfaceName"" set allowaccess ping https ssh ftm next end" } elseif ($t3) { Write-Output " config system admin edit ""$AdminUsername"" $t1 $t2 $t3 next end config system interface edit ""$WANInterfaceName"" set allowaccess ping https ssh ftm next end" } elseif ($t2) { Write-Output " config system admin edit ""$AdminUsername"" $t1 $t2 next end config system interface edit ""$WANInterfaceName"" set allowaccess ping https ssh ftm next end" } else { Write-Output " config system admin edit ""$AdminUsername"" $t1 next end config system interface edit ""$WANInterfaceName"" set allowaccess $AllowAccess next end" } } |