Diego Orozco by Diego Orozco on July 11, 2022

Descripción del proyecto

Con este tutorial podrás crear tu propia imagen, configurada a tu gusto, para echar a andar un contenedor de Kali Linnux con Docker, usando Docker-Compose. El repositorio con todo el código lo puedes encontrar aquí. Inicialmente, la imagen oficial de Kali Linux en Docker consiste en una versión mínima del sistema operativo; por lo tanto, no tendrás las típicas herramientas más utilizadas para hacer pentesting, e.g. Metasploit, NMap, PowerSploit, etc. Para poder contar con una versión más completa de Kali Linux (sin considerar aquellas aplicaciones que usen interfaz gráfica o GUI), necesitas crear una imagen, partiendo de la versión oficial de Kali en Docker, a través de un “dockerfile”, en el cual se indica todos los paquetes o software adicional que desees instalar.

En el código de este tutorial incluyo la instalación los siguientes paquetes:

  • metasploit-framework
  • nmap
  • powersploit
  • python- pip
  • python3
  • vim
  • sudo
  • openssh-server

Con estos paquetes tendrás un contenedor listo para usarse y acceder a él a través de SSH con las credenciales de usuario que tú le indiques en el archivo “.env”, el cual proporcionará las variables de ambiente durante su creación.

Requerimientos

  1. Tener instalado Docker
  2. Tener instalado GIT (en caso de querer clonar el código que está en el repositorio)

Estructura del proyecto

El proyecto consta de los siguientes directorios y archivos .

  • [database] // En esta carpeta se guardará y persistirá toda la información de la base de datos. Se monta como un volumen en el contenedor y se hace referencia a través de un vínculo simbólico (symlink) para que el motor de base de datos de PostgreSQL trabaje con ella
  • [user] // Este directorio almacenará los archivos de la carpeta de los usuarios.
  • .env // En este archivo se indicarán las credenciales del usuario con privilegios de administrador, mismas que utilizaremos para acceder por SSH al contenedor
  • create_user.sh // Con este bash script generaremos el usuario del sistema operativo
  • docker-compose.yml // Este archivo contiene las instrucciones para ejecutar de manera sencilla (sin necesidad de pasar tantos parámetros en la línea de comandos) el contenedor
  • dockerfile // Con este script se generará la imagen. Es aquí donde podremos agregar o quitar paquetes según las necesidades que tengamos.
  • entrypoint.sh // Con este script arrancaremos y mantendremos en ejecución el contenedor.
  • persist_db.sh // Este script genera el symlink y copia los archivos necesarios para que la base de datos persista. Se deberá ejecutar después de haber creado la imagen e iniciado el contenedor
  • ssh_config // Este archivo contiene la configuración del cliente SSH del contenedor
  • sshd_config // Este archivo contiene la configuración del servidor SSH. En él podremos indicar, entre otras cosas, políticas de acceso remoto.

Pasos para crear el contenedor

  1. Clonar el repositorio descrito al inicio y entrar al directorio con el proyecto
git clone https://github.com/mdorozcog/kali_docker.git kali_docker
cd kali_docker
  1. Personalizar paquetes que se instalarán en la imagen del contenedor dentro del “dockerfile”, y editar el nombre de usuario y contraseña que se desee usar para ingresar por SSH.

  2. Crear la imagen e iniciar el contenedor con la herramienta Docker-Compose.

docker-compose up -d
  1. Ingresar al contenedor y ejecutar el script “persist_db.sh” solo una vez para que copie la carpeta con la base de datos PostgreSQL dentro de la carpeta persistente “/database”
ssh mdorozcog@127.0.0.1 -p 2222
su
# Introducir password. mdorozcog es el password por omisión
. /usr/local/bin/persist_db.sh

Ya con esto tenemos un contenedor activo en el background de nuestro equipo, para detenerlo, simplemente ejecuta el siguiente comando:

docker-compose stop

Para iniciar de nuevo el contenedor ya no es necesario ejecutar docker-compose up, ahora deberemos iniciarlo con el comando docker-compose start

Referencias

  • https://docs.docker.com/compose/
  • https://docs.docker.com/engine/examples/running_ssh_service/
<< Configurar y desplegar un contenedor de MongoDB con Docker | JS - Variables en Javascript >>