Archivo de la categoría: Virtualización

Trabajar con elasticsearch mediante docker

Trabajar con elasticsearch, sobre todo para entornos de pruebas, es mucho más fácil con el contenedor Docker que Elasticseacrh nos facilita.

Las ventajas del uso de contenedores es evidente, fácil portabilidad, bajo uso de recursos, etc. Por ello, muchas de las grandes empresas de software están creando este tipo de contenedores para facilitar la implementación de sus productos.

Descarga del contendor de Elasticsearch

En el caso de Elasticsearch, podemos obtener este contenedor fácilmente desde el propio hub de Docker. Para descargarlo en nuestra máquina solo tendremos que ejecutar el siguiente comando.

docker pull docker.elastic.co/elasticsearch/elasticsearch:X.XX.X

Sustituiremos X.XX.X por el número de versión que deseemos instalar.

Podemos ver las versiones disponibles en está página de Elasticsearch (https://www.docker.elastic.co/r/elasticsearch). Tambien podes ver las versiones disponibles, desde la propia página del hub de docker (https://hub.docker.com/_/elasticsearch?tab=tags)

Para descargar la ultima versión disponible en el momento de escribir este post, tendríamos que ejecutar el siguiente comando.

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.13.4

Una vez que ha concluido la descarga y la instalación

$ sudo docker pull docker.elastic.co/elasticsearch/elasticsearch:7.13.4
7.13.4: Pulling from elasticsearch/elasticsearch
ddf49b9115d7: Pull complete
67831602c5f6: Pull complete
e9244a58c58a: Pull complete
02513d648eec: Pull complete
2a31f6c80f77: Pull complete
9022d53d3571: Pull complete
3fc2a72e96e7: Pull complete
Digest: sha256:70e5f2454148f16385ffbc1b1fb71f3a171a8ef8665c8b482235656678b7df93
Status: Downloaded newer image for docker.elastic.co/elasticsearch/elasticsearch:7.13.4
docker.elastic.co/elasticsearch/elasticsearch:7.13.4

Ejecución del contenedor de Elasticsearch

Lanzaremos la ejecución del contenedor, para ello ejecutaremos el siguiente comando.

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.13.4

El comando configurara la ejecución, activando el enrutado de los puertos 9200 y 9300 desde nuestra máquina, al contenedor. Además, establece el servidor de elasticsearch en modo autónomo.

En la pantalla nos aparece la salida del log de elasticsearch.

Si queremos pararla, solo tendremos que pulsar la combinación de teclas Ctrl-C. Puede que a la primera no responda, pulsaremos varias veces hasta que se pare. También, lo podremos parar, abriendo otra terminal, y ejecutando el siguiente comando

$ sudo docker stop <nombre_imagen>

Para saber como se llama nuestro contenedor podemos lanzar el siguiente comando para ver las imágenes que tenemos en ejecución

$ docker ps

Una vez que lo hemos parado, no tenemos que volver a ejecutar el comando «docker run», simplemente con iniciar nuestro contenedor, sera  suficiente. Esto lo podemos hacer con el siguiente comando.

$ sudo docker start <nombre_imagen>

Podemos personalizar el nombre de nuestra imagen agregando el siguiente argumento al comando «docker run»

--name <nombre_imagen>

El comando «docker run» nos quedaría de la siguiente forma.

$ sudo docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name elastic_prueba docker.elastic.co/elasticsearch/elasticsearch:7.13.4

Prueba de funcionamiento de Elasticsearch

Para probar que nuestro servidor de elasticsearch está funcionado, y responde correctamente, podemos lanzar el siguiente comando.

$ curl -X GET "localhost:9200/?pretty"

Y si todo es correcto, y nuestro contenedor está funcionado correctamente, obtendremos una respuesta parecida a la siguiente.

{
"name" : "1c1a4c8db052",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "lg2UQNHASCGozGjkaAV12g",
"version" : {
"number" : "7.13.4",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "c5f60e894ca0c61cdbae4f5a686d9f08bcefc942",
"build_date" : "2021-07-14T18:33:36.673943207Z",
"build_snapshot" : false,
"lucene_version" : "8.8.2",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

Problemas de consumo de memória de Elastic

El consumo de la memoria de Elaticsearch puede ser muy grande, dejando a la máquina host casi sin recursos. Para evitar este escenario, podemos establece un limite de uso de memoria para el elastic dentro del contenedor.

Para establecer este límite, tendremos que establecer unas variables de entrono dentro de nuestro contenedor. Esto se realiza añadiendo el siguiente argumento al comando «docker run».

-e «ES_JAVA_OPTS=-Xms<Xg> -Xmx<Xg>»

Quedando nuestro comando de la siguiente forma para una configuración de uso de 3g de memoria para nuestro elasticsearch.

sudo docker run -p 9200:9200 -p 9300:9300 -e «discovery.type=single-node» -e «ES_JAVA_OPTS=-Xms3g -Xmx3g» –name elastic_prueba docker.elastic.co/elasticsearch/elasticsearch:7.13.4

Tambien podemos establecer este valor en megas, para ello solo tendremos que cambia la «g» del final por una m. Por ejemplo para establecer los mismos 3 gigas anteriores en megas, el comando quedaría de la siguiente forma:

sudo docker run -p 9200:9200 -p 9300:9300 -e «discovery.type=single-node» -e «ES_JAVA_OPTS=-Xms3072m -Xmx3072m» –name elastic_prueba docker.elastic.co/elasticsearch/elasticsearch:7.13.4

El valor recomendable para estos paŕámetros, son el 50% de la memoria de la que disponga la máquina host.

 

 

 

Activar ejecución de script en PowerShell

La ejecución de script en PowerShell esta bloqueado por defecto, ademas de la recomendación de bloquearlo en las directivas de grupo si estamos dentro de un directorio activo.Script en PowerShell

Pero en ocasiones nos vemos en la necesidad de ejecutar algun script en powershell. Como fue en mi caso activar el entrono virtual para desarrollar en Python. No suelo utilizar windows, pero las obligaciones son las que son.

Powershell nos ofrece varios comandos para configurar este tipo de configuraciones.

Estado de las politicas de ejecución

Para ver nuestra configuración respecto a la politica de ejecución de script en nuestro powershell podemos utlizar el comando

Get-ExecutionPolicy

La salida de este comando nos mostrara el nivel de restriccion en el que nos escontramos actualmente. El valor por defecto suele ser «Restricted». No podemos ejecutar ningun tipo de de script .ps1.

Tipos de politicas de ejecución de PowerShell

Los tipos de restricciones que nos podemos encontrar son las siguientes.

RESTRICTED: Es la opción predetermida a partir de sistemas Windows 8 y Windows Server 2012. No permite la ejecución de ningun tipo de script.

ALLSIGNED: Podemos ejecutar, siempre y cuando, el script este firmado por una organización de confianza. Antes de la ejecuión nos pedira autorización.

REMOTESIGNED: Es la opción predeterminada en Windows Server 2012 R2. Podemos ejecutar script, tanto locales como remotos. Los descargados desde internet tendran que estar desbloqueados.

UNRESTRICTED: Podemos ejecutar cualquier tipo de script, tanto lo firmado como los que no lo estan. Alto riesgo de ejecutar script peligrosos.

BYPASS: No bloquea la ejecuación de ningun script, tampoco nos pìde confirmación. Este modulo esta pensado para los script que se ejecutan embebidos dentro de otras aplicaciones más grandes.

UNDEFINED: Sin ningun tipo de restricciones.

Como cambiar las policas de ejecución en PowerShell

Aunque tengamos establecida la politica predeterminada, podemos establecer otro tipo de politica global que mejor se ajuste a nuestras necesidades. Para hacer esto utilizaremos el comando

Set-ExecutionPolicy

Si ejecutamos el comando sin ningun tipo de parametro, este no pedira el tipo de politca que deseamos utilizar.

Para saltarnos este paso podemos establecer el tipo de politica que deseamos utlizar seguido del comando, o seguido del paramentro «-ExecutionPolicy», por ejemplo

Set-ExecutionPolicy Unrestricted

o

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

Pero en ocasiones las directivas establecidas en las politicas del dominio en el directorio activo, nos lo impide.

Ambitos en las directivas de ejecución

PowerShell nos estable varios ambitos de ejecución. Si por politicas en el directorio activo, estas bloque algun tipo, como es mi caso, el cambio global puede no estar permitido. Para saltar esta restrición podemos establecer el tipo de politica de ejecución ha algun ambito de ejecución en concreto.

Tipos de ambitos de policas de ejecuión

En PowerShell tenemos tres ambitos para ejecutar nuestro script.

PROCESS: La politica de ejecución se estable para la sesión actual. Al reiniciar se establecera de nuevo la politica establecida por defecto.

CURRENTUSER: Este ambito avarca al usuario actual. Se cambia en estado en la subclave que se encuentra en HKEY_CURRENT_USER que se encarga de almacenar la configuración del usuario actual.

LOCALMACHINE: Este ambito se aplica a la maquina local, cualquier usuario que se registra en la maquina afectada tendra la politica de ejecución que establezcamos.

Em mi caso el problema que me impedia cambiar la politica global es la restricción en las politicas del directorio activo para establecer el tipo en el ambito de LOCALMACHINE.

Podemos ver las configuraciones de los diferentes ambitos los podemos realizarar indicando el parametro -List al comando Get-ExecutionPolicy

Get-ExecutionPolicy -List

El comando de Set-ExecutionPolicy nos permite especificar en que ambito queremos interactuar.

Para ello ejecutaremos el comando de la siguiente forma Set-ExecutionPolicy -Scope Ambito_queremos_actuar tipo_politica, por ejemplo

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

 

Crear la maquina virtual de Metasploitable3

Hace poco Rapid7 a puesto a disposición una nueva versión Metasploitable, una maquina virtual que nos permite practicar técnicas de pentesting sin tener que «romper» nada. Estas maquinas esta preparadas con múltiples vulnerabilidades lo que permite practicar deber técnicas de hacking.

Nueva versión de Metasploitable 3

Ha diferencia de las maquina anteriores, en las que estaban basadasMetasploitable 3 - Rapid7 en Linux. Esta nueva versión esta basada en una versión de Windows Server, en concreto en la 2008 r2.

Las versiones anteriores de estas maquinas estaban disponibles las maquinas virtuales completas. En esta ocasión, lo que dispones en el Github de Rapid7 son unos script, tanto para Linux, como para Windows, realizado con PowerShell, para crear nuestra máquina.

En fichero de README.md, tenemos los pasos que debemos seguir para crear la maquina, ya sea de forma automática, utilizando los script anteriores, o de forma manual, que no deja de ser los pasos contenidos en los ficheros, introducidos manualmente por nosotros en la consola, ya sea en linux, o en windows.

Programas necesarios para crear la maquina

Para la creación de la maquina virtual tenemos que tener varios programas, en unas versiones en concreto para su realización.

VirtualBox 5.1.6

Lo primero que tendremos que tener instalado, sera la versión 5.1.6 de VirtualBox, por que dice la ultima versión de VirtualBox la 5.1.8 tiene un fallo que no permite el correcto funcionamiento del script. Podemos descargar la versión coreccta de VirtualBox desde esta dirección https://www.virtualbox.org/wiki/Download_Old_Builds_5_1

Una vez descargado el VirtualBox en la versión adecuada los instalamos. En mi caso con Ubuntu.

sudo dpkg -i virtualbox-5.1_5.1.6-110634-Ubuntu-xenial_amd64.deb

Packer

Otro programa que debemos tener en nuestro sistema es Packer, que permite la creación y distribución de la maquina, si quieres saber mas sobre este programa puedes echarle un vistazo a su pagina. Para instalar este programa solo tenemos que descargar la ultima versión desde la pagina. En mi caso con Ubuntu, solo tuve que descomprimir el fichero, y agregar la ruta donde se encuentra a la variable Path del sistema. Para agregar la ruta del Packer en Linux.

export PATH=$PATH:~/packer

Cambiaremos «~/packer» por la ruta donde hallamos descomprimido el fichero.

Vagrant

Otro de los programas que necesitaremos tener instalados es Vagrant y Vagrant Reload Plugin. En el caso de Ubuntu podemos hacerlo mediante los repositorios del sistemas.

sudo apt-get install vagrant

Una vez que tenemos instalado Vagrant, instalamos el plugin

vagrant plugin install vagrant-reload

Crear la máquina virtual de Metasploitable 3

Una instalados todos los programas, ya podemos ejecutar el script. Con Ubuntu.

./build_win2008.sh

Lo primero que hace el script, es verificar que disponemos de los programas, y en la versión adecuado. Si todo esta bien, descargara la imagen desde el servidor de Microsoft del Windows Server 20008 r2. Una vez descargada la imagen instalara y configurara el sistema. Por último creara la maquina virtual.

Una vez que termine correctamente el script, se habrá creado un fichero con el siguiente nombre «windows_2008_r2_virtualbox.box». Este fichero es el que contiene la máquina virtual.

Para agregar la maquina a nuestra copia de VirtualBox ejecutaremos el comando «vagrant up», este comando creará y configurará la maquina virtual para que este accesible en nuestro VirtualBox.

Y con estos paso ya tenemos nuestra nueva maquina vulnerable para divertirnos un rato.

Si tienes alguna duda o sugerencia puedes dejarnos un comentario.