DKIM en Microsoft 365 desde PowerShell

DKIM en Microsoft 365 desde PowerShell

No hay sistema 100% seguro pero las medidas a aplicar para la mejora de la seguridad son continuas, para incrementar la de los correos salientes en dominios personalizados con planes Microsoft 365, debemos añadir 2 registros CNAME a nuestro DNS, sustituyendo «MiDominio» y «MiTenant» por el correspondiente:

selector1._domainkey CNAME 3600 selector1-MiDominio-com._domainkey.MiTenant.onmicrosoft.com
selector2._domainkey CNAME 3600 selector2-MiDominio-com._domainkey.MiTenant.onmicrosoft.com

Para conectar desde PowerShell aprovecharemos para actualizar los modulos EXO V2 (de paso los de Azure) y establecer la política de ejecución…

Leer más

Puntos de recuperación en Azure Backup

La interfaz visual de Azure Backup Server (MABS) (v13.0.580.0) parece contener ciertos problemas en la visualización de puntos de recuperación creados en servidores locales y online, a fecha de hoy se ha reportado a Microsoft varios problemas similares. Para estar seguro de los puntos creados podemos acudir a PowerShell:

$Grupo = Get-DPMProtectionGroup -DPMServerName "NombreServidorDPM"
$Obj = Get-DPMDatasource -ProtectionGroup $Grupo[0]
Get-DPMRecoveryPoint -Datasource $Obj[0]
Get-DPMRecoveryPoint -Datasource $Obj[0]  -Online

Si tenemos definidos varios grupos de protección deberemos seleccionar el que queremos comprobar, el indice empieza en cero:

Get-DPMProtectionGroup -DPMServerName "NombreServidorDPM"
$Obj = Get-DPMDatasource -ProtectionGroup $Grupo[1]
PrincipalId webapp Azure

PrincipalId webapp Azure

El acceso a propiedades de objeto Identity desde línea de comandos en PowerShell para Azure debería obtenerse mediante:

Get-AzWebApp -ResourceGroupName "NombreDeRecursos" -Name "NombreAplicacionWeb"
--$appId=(Get-AzWebApp -ResourceGroupName $resourcegroupname -Name $webappname).Identity.PrincipalId
--$appId=(Get-AzureRmWebApp $resourcegroupname -Name $webappname).Identity.PrincipalId

No tenemos acceso a estos identificadores, podemos utilizar en su lugar el acceso mediante Service Managed Identity:

az webapp identity assign -g $resourcegroupname -n $webappname 

Del que obtendremos el identificador necesario:

{- Finished ..
  "principalId": "b1dd98c4-eae0-4fea-8e46-efzs563dc9630",
  "tenantId": "504c8804-c8a6-9090-8fzs-e35841104187",
  "type": "SystemAssigned",
  "userAssignedIdentities": null
}

Con la administración de identidades administradas habilitadas y permitiendo al acceso a los recursos a la aplicación, ya podemos utilizar tokens de acceso Oauth. De este modo solo se puede acceder a este extremo desde el código que se ejecuta en el servicio de la aplicación, por ejemplo, solo nuestro sitio web puede obtener tokens de acceso.

Activar escritorio remoto mediante Powershell

Por defecto la conexión por escritorio remoto aparece deshabilitada en los equipos con Windows Pro, en una red de dominio es posible establecer mediante políticas de grupo los permisos necesarios:

– Configuración de Equipo \ Directivas \ Plantillas Administrativas
— Componentes de Windows \ Servicios de escritorio remoto \ Host de sesión de Escritorio remoto \ Conexiones \ Permitir que los usuarios se conecten de forma remota mediante Servicios de Escritorio Remoto

— Red \ Conexiones de red \ Firewall de Windows \ Perfil de dominio \ Firewall de Windows: permitir excepciones de Escritorio remoto entrantes

Igualmente podemos echar mano de un Script para powershell escrito por Sitaram Pamarthi en 2013, que mediante WMI nos facilita acciones puntuales:

[cmdletbinding()]
param(
	[parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
	[string[]]$ComputerName = $env:computername,
	[ValidateScript({Test-Path $_})]
	[string]$OutFolder = "c:\"
)

begin {
$SuccessComps = Join-Path $OutFolder "Successcomps.txt"
$FailedComps = Join-Path $OutFolder "FailedComps.txt"
}

process {
	foreach($Computer in $ComputerName) {

		try {
			$RDP = Get-WmiObject -Class Win32_TerminalServiceSetting `
								-Namespace root\CIMV2\TerminalServices `
								-Computer $Computer `
								-Authentication 6 `
								-ErrorAction Stop
								
		} catch {
			Write-Host "$Computer : WMIQueryFailed"
			"$Computer : WMIQueryFailed" | Out-File -FilePath $FailedComps -Append
			continue
		}
		
		if($RDP.AllowTSConnections -eq 1) {
			Write-Host "$Computer : RDP Already Enabled"
			"$Computer : RDP Already Enabled" | Out-File -FilePath $SuccessComps -Append
			continue
		} else {
			try {
				$result = $RDP.SetAllowTsConnections(1,1)
				if($result.ReturnValue -eq 0) {
					Write-Host "$Computer : Enabled RDP Successfully"
					"$Computer : RDP Enabled Successfully" | Out-File -FilePath $SuccessComps -Append
				} else {
					Write-Host "$Computer : Failed to enabled RDP"
					"$Computer : Failed to enable RDP" | Out-File -FilePath $FailedComps -Append

				}
			
			} catch {
				Write-Host "$computer : Failed to enabled RDP"
				"$Computer : Failed to enable RDP" | Out-File -FilePath $FailedComps -Append
			}
		}
	}

}

end {}

Su utilización para un equipo concreto:

.\Enable-RDPAccess.ps1 -ComputerName <computer name>

 Si obtenemos errores al ejectuarlo, debemos comprobar que tenemos acceso mediante WMI o activarlo mediante GPO:

– Configuración del equipo \ Directivas \ Configuración de Windows \ Configuración de seguridad \ Firewall de Windows con seguridad avanzada \ Reglas de Entrada

Nombres de servicios en Windows

En ocasiones las traducciones de algunos servicios de Inglés a Español en los nombres de los servicios de windows, tanto para servidores como para clientes son algo… peculiares y no siempre se ajustan… podemos contrastarlos con los nombres cortos. Mediante PowerShell sacamos el listado completo:

Get-Service | Sort-Object -Property DisplayName | Format-Table DisplayName, Name -AutoSize

En el caso de necesitar conocer que servicio, programa, proceso… tiene abierto un fichero determinado, podemos recurrir a la herramienta Process Explorer, pulsamos sobre «Find -> Find Handle or DLL…» con el nombre del fichero.

Una vez encontrado desde las propiedades podemos ver si tiene algún servicio asociado.