Lab06 Ansible II

Objetivo

Ahora nos tocan los hosts Windows, poco pero alguno tenemos en el laboratorio.

Requisitos

  • Añadir a nuestro Ansible la capacidad de control para sistemas Windows.
  • Configuración correcta para escalar privilegios utilizando sudo del usuario que ejecute Ansible.

Mapa de red

+----------+      +--------+           +----------+
|          |      |        |           |          |<--> Lan 10.0.0.1/28
|          |      |        |           | Firewall |
| Internet |<---> | Router |<---Wan--->| OPNsense |<--> DMZINT 10.0.0.17/28
|          |      |        |           |          |
|          |      |        |           |          |<--> DMZEXT 10.0.0.33/28
+----------+      +--------+           +----------+

Configuración Ansible

Desde el terminal.

Fedora:

$sudo pip install https://github.com/diyan/pywinrm/archive/master.zip#egg=pywinrm
$sudo pip install kerberos
$sudo yum -y install gcc python-devel krb5-devel krb5-workstation

Debian:

$sudo pip install https://github.com/diyan/pywinrm/archive/master.zip#egg=pywinrm
$sudo pip install kerberos

Configuracion

Tanto el fichero de configuración de Ansible (ansible.cfg) como el de inventario (inventario)los tengo en un directorio dedicado únicamente a la gestión del laboratorio. Tienen el siguiente contenido.

Fichero de inventario (inventario)

[windows]
w1000-01 ansible_host=10.0.0.3

[windows:vars]
ansible_ssh_user=Administrador
ansible_ssh_pass=SuperPassword123!
ansible_ssh_port=5986
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore

Fichero de configuracion (ansible.cfg)

Fichero copiado del de defecto de la instalación y modificado lo siguiente:

///////////
[defaults]

# some basic default values...

inventory      = ./inventario

Host Windows

Utilizaremos WinRM.

Abiremos la consola de PowerShell con privilegios de administrador y seguimos los siguientes pasos:

  • Levantar servicio.
PS C:/> Enable-PSRemoting -force -SkipNetworkProfileCheck
WinRM se ha actualizado para recibir solicitudes.
Se cambió el tipo de servicio WinRM correctamente.
Servicio WinRM iniciado.

WinRM se actualizó para administración remota.
Excepción de firewall WinRM habilitada.
LocalAccountTokenFilterPolicy configurado para conceder derechos administrativos en modo remoto a usuarios locales.
  • Inicio automatico.
PS C:\> Set-Service WinRM -StartMode Automatic
  • Comprobar inicio autommatico.
PS C:\> Get-WmiObject -Class win32_service | Where-Object {$_.name -like "WinRM"}
ExitCode  : 0
Name      : WinRM
ProcessId : 6328
StartMode : Auto
State     : Running
Status    : OK
  • Habilitar ejecucion de scripts.
PS C:\> Set-ExecutionPolicy Unrestricted

Cambio de directiva de ejecución
La directiva de ejecución te ayuda a protegerte de scripts en los que no confías. Si cambias dicha directiva, podrías
exponerte a los riesgos de seguridad descritos en el tema de la Ayuda about_Execution_Policies en
https:/go.microsoft.com/fwlink/?LinkID=135170. ¿Quieres cambiar la directiva de ejecución?
[S] Sí  [O] Sí a todo  [N] No  [T] No a todo  [U] Suspender  [?] Ayuda (el valor predeterminado es "N"): s
  • Definimos entorno con ejecutnado un ps1 con el siguieten contenido:
$url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Upgrade-PowerShell.ps1"
$file = "$env:temp\Upgrade-PowerShell.ps1"
$username = "Administrador"
$password = "SuperPassword123!"

(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force

# Version can be 3.0, 4.0 or 5.1
&$file -Version 5.1 -Username $username -Password $password -Verbose
  • Creamos el siguiente ps1 para modificar el sistema y lo ejecutamos:
$url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
$file = "$env:temp\ConfigureRemotingForAnsible.ps1"
 
(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
 
powershell.exe -ExecutionPolicy ByPass -File $file
  • Creamos otro ps1 y lo ejecutamos para modifcar la plitica de ejecución y eleminamos wl WinLogon por seguridad:
# This isn't needed but is a good security practice to complete
Set-ExecutionPolicy -ExecutionPolicy Restricted -Force

$reg_winlogon_path = "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon"
Set-ItemProperty -Path $reg_winlogon_path -Name AutoAdminLogon -Value 0
Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultUserName -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultPassword -ErrorAction SilentlyContinue

Comprobación

Para verificar que Ansible esta configurado correctamente ejecutaremos el modulo win_ping.

$ansible windows -m win_ping

Como se puede observar se ejecuta correctamente. Sin esta comprobación correcta no podemos continuar.

Documentación oficial

Mi repo en Github