miércoles, 17 de marzo de 2021

vCenter a través de NGINX reverse proxy



Cómo acceder a un vCenter web a través de NGINX.



Podemos acceder a un vCenter vía web con su subdominio en dominio.local, del tipo vcenter.dominio.local, pero eso llevará a que el subdominio tenga un certificado autofirmado y el navegador web se queje de ello.

Podríamos subir un certificado SSL firmado por una autoridad certificadora como GoDaddy al vSphere y solucionar el problema, pero entonces tendríamos que recordar de renovarlo cada año.

Por otro lado, podemos hacer que el acceso al vCenter pase por un reverse proxy como NGINX.

Veamos un ejemplo:

server { listen 443 ssl; server_name vcenter.dominio.com; ssl_certificate /etc/ssl/dominio.com/dominio.com.crt; ssl_certificate_key /etc/ssl/dominio.com/dominio.com.key; access_log /var/log/nginx/vcenter.dominio.com_access.log; error_log /var/log/nginx/vcenter.dominio.com_error.log; location / { proxy_set_header Host vcenter.dominio.local; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; sub_filter "vcenter.dominio.local" "vcenter.dominio.com"; proxy_pass https://vcenter.dominio.local; } }

En este ejemplo, usamos la directiva proxy_set_header Host seguida del dominio.local para forzar las peticiones hacia el dominio configurado en vSphere.

Además, usamos 'sub_filter' para filtrar las peticiones hacia dominio.local y cambiarlas por dominio.com (string original primero, reemplazo en segundo lugar).


Fuentes:

http://nginx.org/en/docs/http/ngx_http_sub_module.html#sub_filter
0

miércoles, 10 de marzo de 2021

Solucionar Windows Remote Desktop Protocol Weak Encryption Method Allowed (Qualys)



Cómo solucionar la vulnerabilidad de Windows reportada por el scanner de Qualys "Windows Remote Desktop Protocol Weak Encryption Method Allowed".



Tras escanear un host Windows con la herramienta Qualys, me encontré con la vulnerabilidad "Windows Remote Desktop Protocol Weak Encryption Method Allowed".

Ante todo, comprobé qué encriptación veía activa mediante uno de los plugins de nmap:

HOST# nmap -p 3389 --script rdp-enum-encryption 192.168.1.1 Starting Nmap 7.70 ( https://nmap.org ) at 2021-03-10 10:26 CEST Nmap scan report for host.local (192.168.1.1) Host is up (0.00058s latency). PORT STATE SERVICE 3389/tcp open ms-wbt-server | rdp-enum-encryption: | Security layer | CredSSP: SUCCESS | Native RDP: SUCCESS | SSL: SUCCESS | RDP Encryption level: Unknown |_ 128-bit RC4: SUCCESS MAC Address: 00:50:56:A6:07:15 (VMware) Nmap done: 1 IP address (1 host up) scanned in 0.77 seconds

Acto seguido, ejecuté estos comando en PowerShell:

PS C:\Users\Administrator> $RDSSettings = Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'" PS C:\Users\Administrator> $RDSSettings.SetEncryptionLevel(3) __GENUS : 2 __CLASS : __PARAMETERS __SUPERCLASS : __DYNASTY : __PARAMETERS __RELPATH : __PROPERTY_COUNT : 1 __DERIVATION : {} __SERVER : __NAMESPACE : __PATH : ReturnValue : PSComputerName : PS C:\Users\Administrator> $RDSSettings.SetSecurityLayer(2) __GENUS : 2 __CLASS : __PARAMETERS __SUPERCLASS : __DYNASTY : __PARAMETERS __RELPATH : __PROPERTY_COUNT : 1 __DERIVATION : {} __SERVER : __NAMESPACE : __PATH : ReturnValue : PSComputerName : PS C:\Users\Administrator>

Después de esto, volví a pasar nmap y vi lo siguiente:

HOST# nmap -p 3389 --script rdp-enum-encryption 192.168.1.1 Starting Nmap 7.70 ( https://nmap.org ) at 2021-03-10 10:28 CEST Nmap scan report for host.local (192.168.1.1) Host is up (0.00058s latency). PORT STATE SERVICE 3389/tcp open ms-wbt-server | rdp-enum-encryption: | Security layer | CredSSP: SUCCESS |_ SSL: SUCCESS MAC Address: 00:50:56:A6:07:15 (VMware) Nmap done: 1 IP address (1 host up) scanned in 0.93 seconds

Tras esto, el scanner de Qualys ya no mostró la vulnerabilidad.


Más información:

https://docs.microsoft.com/es-es/windows/win32/termserv/win32-tsgeneralsetting-setsecuritylayer
https://docs.microsoft.com/es-es/windows/win32/termserv/win32-tsgeneralsetting-setencryptionlevel
0

miércoles, 3 de marzo de 2021

Crear SNMP community en Linux



Cómo crear una comunidad SNMP en un sistema operativo Linux.



Para crear una comunidad SNMP en un sistema operativo Linux debemos editar el archivo:

/etc/snmp/snmpd.conf

Una vez dentro, hacer que la community sea read-only con el parámetro "rocommunity".

A continuación, escribir el nombre de la community (en este caso la he llamado "prueba"):

# Please see /usr/share/doc/packages/net-snmp/EXAMPLE.conf for a # more complete example and snmpd.conf(5). # # Writing is disabled by default for security reasons. If you'd like # to enable it uncomment the rwcommunity line and change the community # name to something nominally secure (keeping in mind that this is # transmitted in clear text). # don't use ' < > in strings for syslocation or syscontact # Note that if you define the following here you won't be able to change # them with snmpset syslocation Server Room syscontact Sysadmin (root@localhost) # These really aren't meant for production use. They include all MIBS # and can use considerable resources. See snmpd.conf(5) for information # on setting up groups and limiting MIBS. rocommunity prueba # rwcommunity mysecret 127.0.0.1

Por último, reiniciar el daemon de snmp:

HOST# service snmpd restart

Tras esto, ya se debería poder acceder a la community "prueba" en este servidor.
0

miércoles, 24 de febrero de 2021

Forzar PC a conectarse a un DC específico



Forzar a qué Domain Controller / Active Directory / Directorio Activo se autentica el ordenador o PC de un usuario de una organización o empresa.



En las organizaciones que tienen varios controladores de dominio, los inicios de sesión de máquina y de usuario se reparten entre ellos. Esto hace que dos máquinas de una misma sede puedan estar autenticadas en diferentes controladores de dominio.

En otra entrada ya dije cómo averiguar en qué controlador de dominio se ha autenticado una máquina. Ahora mostraré como forzar que una máquina se autentique contra el controlador de dominio que le especifiquemos nosotros manualmente.

Para forzar la autenticación de una máquina:

1. Abrir cmd.exe
2. Ejecutar la siguiente instrucción:

nltest /SC_RESET:dominio.local\SERVIDORDC

Donde dominio.local es el dominio de la organización y SERVIDORDC el nombre de máquina del servidor DC (Domain Controller) en el que queramos que la máquina se autentique.
0

miércoles, 17 de febrero de 2021

cifs_mount failed w/return code = -512



Resolver cifs_mount error 512



Hoy me ha tocado montar en un Linux una carpeta compartida desde un Windows Server 2003 (sí, lo se, debería ser delito tener un Windows Server 2003 corriendo en 2021).

He tratado de montar la carpeta compartida con este comando:

mount -t cifs -o username=usuario,password=password //192.168.1.1/carpeta /carpeta/en/linux

El comando se quedaba cargando infinitamente, así que le he metido verbosidad con:

mount -t cifs -o username=usuario,password=password //192.168.1.1/carpeta /carpeta/en/linux --verbose

pero cifs no me ha mostrado nada.

Llegados a este punto, me he ido a /var/log/messages y he visto el siguiente mensaje:

CIFS: Attempting to mount //192.168.1.1/carpeta No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount. CIFS VFS: Cancelling wait for mid 0 cmd: 0 CIFS VFS: cifs_mount failed w/return code = -512

He probado a forzar la versión de Samba a 1.0 del siguiente modo:

mount -t cifs -o vers=1.0,username=usuario,password=password //192.168.1.1/carpeta /carpeta/en/linux

Y la carpeta ha montado sin problemas.
0

miércoles, 10 de febrero de 2021

Presentar un nuevo volumen a una EC2 Linux



Cómo presentar un nuevo disco o volumen a una EC2 Linux.



La situación es la siguiente: tenemos una instancia (o máquina virtual) Linux en AWS y queremos presentarle un nuevo disco o volumen EBS para montarlo en una carpeta y almacenar ficheros en él.

Primero de todo, creamos un nuevo volumen en la consola de AWS con el tamaño que necesitemos (luego se puede ampliar) y lo adjuntamos a la instancia EC2 en cuestión.

Lo podemos ver ahora en la instancia ejecutando el comando lsblk como xvdb:

HOST# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 300G 0 disk ├─xvda1 202:1 0 2M 0 part ├─xvda2 202:2 0 20M 0 part /boot/efi └─xvda3 202:3 0 300G 0 part / xvdb 202:16 0 1.5T 0 disk

A continuación, formateamos el volumen. En este caso, lo he formateado a XFS:

HOST# mkfs -t xfs /dev/xvdb meta-data=/dev/xvdb isize=512 agcount=4, agsize=98304000 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=0, rmapbt=0 = reflink=0 data = bsize=4096 blocks=393216000, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=192000, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0

En este punto, ya podemos crear el directorio donde se montará el disco (/oradata):

HOST# mkdir /oradata

Monto el disco sobre la carpeta:

HOST# mount /dev/xvdb /oradata

Compruebo que el disco esté montado sobre el directorio en cuestión mediante df:

HOST# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 16G 4.0K 16G 1% /dev tmpfs 16G 0 16G 0% /dev/shm tmpfs 16G 353M 16G 3% /run tmpfs 16G 0 16G 0% /sys/fs/cgroup /dev/xvda3 300G 57G 244G 19% / /dev/xvda2 20M 142K 20M 1% /boot/efi tmpfs 3.2G 0 3.2G 0% /run/user/1000 /dev/xvdb 1.5T 1.6G 1.5T 1% /oradata

Se observa que /dev/xvdb está montado sobre /oradata.

Llegados aquí, toca hacer que el montaje sea persistente. Para ello, miramos el ID del volumen con blkid:

HOST# blkid /dev/xvda1: PARTLABEL="p.legacy" PARTUUID="73cfc22b-6651-4fa1-9cee-04818d0607be" /dev/xvda2: SEC_TYPE="msdos" LABEL_FATBOOT="EFI" LABEL="EFI" UUID="564C-A498" TYPE="vfat" PARTLABEL="p.UEFI" PARTUUID="2d0407cf-5df1-4ff4-9c7f-5796c942fd32" /dev/xvda3: LABEL="ROOT" UUID="15991bdf-394d-4e90-b988-5061b112debe" TYPE="xfs" PARTLABEL="p.lxroot" PARTUUID="0e94321a-99d8-4a89-8b3e-ee0ffaad835c" /dev/xvdb: UUID="3a21705d-ad34-4ce2-94ab-9df6edcc727d" TYPE="xfs"

Vemos el ID de xvdb en la última línea.

Ahora, modifico el archivo /etc/fstab para que el volumen se monte automáticamente tras un reinicio:

HOST# vi /etc/fstab

El archivo /etc/fstab queda así:

LABEL=ROOT / xfs defaults 0 0 LABEL=EFI /boot/efi vfat defaults 0 0 UUID="3a21705d-ad34-4ce2-94ab-9df6edcc727d" /oradata xfs defaults 0 0

Por último, podemos probar a desmontar /oradata y montarlo automáticamente siguiendo los puntos de montaje presentes en /etc/fstab para emular el comportamiento tras un reinicio de la instancia:

HOST# umount /oradata

Ahora monto todas las particiones automáticamente:

HOST# mount -a

Y compruebo que el disco esté montado usando df:

HOST# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 16G 4.0K 16G 1% /dev tmpfs 16G 0 16G 0% /dev/shm tmpfs 16G 353M 16G 3% /run tmpfs 16G 0 16G 0% /sys/fs/cgroup /dev/xvda3 300G 57G 244G 19% / /dev/xvda2 20M 142K 20M 1% /boot/efi tmpfs 3.2G 0 3.2G 0% /run/user/1000 /dev/xvdb 1.5T 1.6G 1.5T 1% /oradata


Fuentes:

https://docs.aws.amazon.com/es_es/AWSEC2/latest/UserGuide/ebs-using-volumes.html
0

miércoles, 3 de febrero de 2021

Listar carpetas compartidas por samba



¿Cómo listar las carpetas compartidas por samba en un servidor remoto?



Si queremos listar las carpetas que un servidor remoto está compartiendo en red, podemos usar smblcient para ello desde la terminal de un Linux.

HOST# smbclient -L 192.168.1.1 Enter WORKGROUP\root's password: Sharename Type Comment --------- ---- ------- profiles Disk Network Profiles Service users Disk All users groups Disk All groups print$ Disk Printer Drivers IPC$ IPC IPC Service (Samba 4.11.14-git.247.8c858f7ee144.19.1-SUSE-oS15.0-x86_64) SMB1 disabled -- no workgroup available

192.168.1.1 es la IP del servidor que está publicando carpetas en red.

El nombre de cada carpeta es cada una de las líneas de la columna sharename.
0

miércoles, 27 de enero de 2021

Averiguar a qué DC se ha autenticado una máquina



¿A qué Domain Controller / Active Directory / Directorio Activo se ha autenticado una máquina de una organización cuando ha iniciado sesión en su sistema operativo Windows?



En las organizaciones que tienen varios Domain Controllers, los inicios de sesión de máquina y de usuario se reparten entre ellos para balancear la carga. Esto hace que dos máquinas de una misma sede puedan estar autenticadas en diferentes controladores de dominio.

Para ver a qué directorio activo se ha conectado una máquina para recibir sus GPO, podemos usar el siguiente comando en una ventana de cmd:

nltest /DSGETDC:

Esto nos dará información sobre el DC en el que se ha conectado la máquina, por ejemplo:

C:\Users\usuario>nltest /DSGETDC: DC: \\USA-DC01.dominio.local Dirección: \\192.168.1.4 GUID del DOM: c95a30af-2af1-cf3c-a4fa-cfbe3b776daf Nombre del DOM: dominio.local Nombre del bosque: dominio.local Nombre de sitio DC: USA Nuestro nombre de sitio: USA Marcas: GC DS LDAP KDC TIMESERV WRITABLE DNS_DC DNS_DOMAIN DNS_FOREST CLOSE_SITE FULL_SECRET WS DS_8 DS_9 DS_10 El comando se completó correctamente

En el resultado del comando podemos ver el nombre de máquina del controlador de dominio, su IP, el nombre del dominio, etc.
0

miércoles, 20 de enero de 2021

Instalar vmware tools en SUSE Linux



Cómo instalar vmware tools en un SLES (SUSE Linux Enterprise Server).



Me acabo de descargar la última versión de SUSE Linux Enterprise Server 15 SP2 y he creado una plantilla en vmware para desplegar máquinas a partir de ella.

Ahora, el vCenter me indica que el sistema operativo no tiene instaladas las vmware tools.

He tratado de instalar las "open vm tools" como de costumbre:

HOST# zypper install open-vm-tools zypper in open Refreshing service 'Basesystem_Module_15_SP2_x86_64'. Refreshing service 'Desktop_Applications_Module_15_SP2_x86_64'. Refreshing service 'Development_Tools_Module_15_SP2_x86_64'. Refreshing service 'Python_2_Module_15_SP2_x86_64'. Refreshing service 'SUSE_Linux_Enterprise_Server_15_SP2_x86_64'. Refreshing service 'SUSE_Package_Hub_15_SP2_x86_64'. Refreshing service 'Server_Applications_Module_15_SP2_x86_64'. Refreshing service 'Web_and_Scripting_Module_15_SP2_x86_64'. Loading repository data... Reading installed packages... 'open' not found in package names. Trying capabilities. No provider of 'open-vm-tools' found. Resolving package dependencies... Nothing to do.

Esta vez no ha funcionado.

Tras darle algunas vueltas, he hecho lo siguiente:

HOST# zypper install open-vm-tools* Refreshing service 'Basesystem_Module_15_SP2_x86_64'. Refreshing service 'SUSE_Linux_Enterprise_Server_15_SP2_x86_64'. Refreshing service 'Server_Applications_Module_15_SP2_x86_64'. Loading repository data... Reading installed packages... 'open-vm-tools' providing '*vm-tools*' is already installed. No update candidate for 'open-vm-tools-11.2.5-4.12.1.x86_64'. The highest available version is already installed. Resolving package dependencies... The following NEW package is going to be installed: open-vm-tools-sdmp 1 new package to install. Overall download size: 44.4 KiB. Already cached: 0 B. After the operation, additional 31.6 KiB will be used. Continue? [y/n/v/...? shows all options] (y): y Retrieving package open-vm-tools-sdmp-11.2.5-4.12.1.x86_64 (1/1), 44.4 KiB ( 31.6 KiB unpacked) Retrieving: open-vm-tools-sdmp-11.2.5-4.12.1.x86_64.rpm ...............[done] Checking for file conflicts: ..........................................[done] (1/1) Installing: open-vm-tools-sdmp-11.2.5-4.12.1.x86_64 .............[done]

Tras instalar este paquete con un wildcard al final (*), el sistema ha encontrado un paquete con la coletilla "sdmp". Lo he instalado y vmware ya no se ha quejado más.
0

miércoles, 13 de enero de 2021

No matching host key type found



Cómo solucionar el error "no matching host key type found. Their offer: ssh-dss".



Tuve que crear un script que se conectara a un host externo vía SSH. Al probar la conexión manualmente para ver que podía establecerse, me encontré con el siguiente problema:

HOST # sftp usuario@host Unable to negotiate with 1.2.3.4 port 22: no matching host key type found. Their offer: ssh-dss Connection closed

Parece que el otro extremo corre una versión antigua (muy antigua) de OpenSSH, por lo que hay que indicarle explícitamente a la última versión de OpenSSH (es decir, la versión que ejecutamos en nuestro host) que use el algortimo "ssh-dss" para establecer la conexión.

Para ello, deberemos usar una opción en el comando ssh (las opciones se añaden con el parámetro -o seguido de la opción que querramos añadir) del siguiente modo:

-oHostKeyAlgorithms=+ssh-dss

De esta forma, el comnando completo queda así:

HOST # sftp -oHostKeyAlgorithms=+ssh-dss usuario@host

Tras usar el comando ssh con el parámetro indicado, ya podremos establecer la conexión con el host en cuestión con normalidad y ya no nos saltará el mensaje de error.

Como curiosidad, si queremos averiguar qué versión de OpenSSH corre en el otro extremo, podemos usar la opción "-vvv" de ssh para ver las versiones local y remota:

debug1: Local version string SSH-2.0-OpenSSH_8.4 debug1: Remote protocol version 2.0, remote software version OpenSSH_6.2p2+sftpfilecontrol-v1.3-hpn13v12
0

miércoles, 6 de enero de 2021

Averiguar a qué DC se ha autenticado un usuario



¿A qué Domain Controller / Active Directory / Directorio Activo se ha autenticado un usuario de una organización cuando ha iniciado sesión en su sistema operativo Windows?



Si trabajamos en una organización que tenga varios Domain Controllers, puede resultarnos útil saber en cual de ellos ha iniciado sesión un usuario determinado con el fin de resolver problemas en el inicio de sesión de esa cuenta de usuario, por ejemplo.

Averiguar a qué directorio activo ha iniciado sesión un usuario al introducir sus credenciales en el inicio de sesión de Windows es posible mediante una variable de sistema de Windows llamada %logonserver%.

Para ver el contenido de la variable %logonserver% podemos usar la sentencia:

echo %logonserver%

Esto nos devolverá el nombre de máquina del directorio activo donde el usuario ha iniciado sesión.

Un ejemplo de output del comando en una ventana de cmd podría ser:

C:\Users\usuario>echo %logonserver% \\USA-DC01

En este caso, el directorio activo en cuestión sería el USA-DC01.


Alternativa



Alternativamente, podemos usar el comando "set L":

C:\Users\usuario>set L LOCALAPPDATA=C:\Users\usuario\AppData\Local LOGONSERVER=\\USA-DC01

Como vemos, este comando muestra también la variable LOGONSERVER.
0