Como montar un kali como un contenedor
En este pequeño articulo demostraremos como montar un simple contenedor de kali para poder tener una base rapida de herramientas para practicar actividades de pentest o redteam.
Nota: se recomienda usar podman, pero tambien incluyo instrucciones para docker.
Requisitos:
- Podman o Docker instalados.
- podman-compose o docker-compose instalados.
- imagen contenedor kali descargada.
Instalación Podman y/o Docker
Asumiendo que usaremos distribución de linux basada en debian usaremos el administrador de paquetes para instalar.
$ sudo apt update && sudo apt install podman podman-compose
$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Descarga de imagen de contenedor kali
Docker:
$ sudo docker pull kalilinux/kali-rolling
Podman:
$ podman pull docker.io/kalilinux/kali-rolling
Configuración del entorno
Es necesario crear la carpeta de nuestro entorno de trabajo, con el fin de almacenar el home de nuestro usuario de contenedor y las configuraciones que queramos tener en nuestro contenedor:
kali_home
|
|-- root/ #folder home
|
|-- Dockerfile # configuracion de construcción de nueva imagen local
|
|-- docker-compose.yml # configuracion de lanzamiento "orquestación" de nuestro contenedor
$ mkdir kali_home/root -p
$ cd kali_home
$ touch Dockerfile && touch docker-compose.yml
el siguiente es un ejemplo del contenido de los archivos (importante, reemplazar el hash por el que corresponda a la contraseña deseada y por favor personalizar según las necesidades que tengan). Dockerfile
FROM kali-rolling
RUN apt update && apt dist-upgrade -y --yes
RUN apt install sudo bash-completion ssh kali-linux-headless -qq -y --yes
RUN useradd -rm -d /home/kali -s /bin/bash -g root -G sudo kali -p '$6$n.B0T07TzRyTGZw6$raoeh9lX/Q.yYeZyd/dkn.ay699yLG47gcCLWU8qnjXTc8jhCXjd9VqvrX5XBpcCZnhEJvJ3OUTiqyUtqL4/M.'
RUN groupadd kali
RUN usermod -a -G kali kali
EXPOSE 22
docker-compose.yml
version: "3.9"
services:
kali:
build: .
restart: unless-stopped
command: bash -c "service ssh start && tail -f /var/log/alternatives.log"
cap_add:
- NET_RAW
sysctls:
- net.ipv6.conf.all.disable_ipv6=0
volumes:
- ./root:/home/kali
ports:
- "22:22"
networks:
- pentnet
networks:
pentnet:
driver: bridge
enable_ipv6: true
ipam:
config:
- subnet: 172.18.1.0/24
gateway: 172.18.1.1
Para arrancar el contenedor primero se necesita construir la imagen local:
$ sudo docker-compose build
$ podman-compose build
luego de construirlo podremos iniciar por primera vez con "up -d" o si ya están con el contenedor creado "start"
$ sudo docker-compose up -d
$ podman-compose up -d
para volver a levantar luego de apagar o reinciar despues de un "up -d"
$ sudo docker-compose start
$ podman-compose start
Resultado
Tendremos desplegado un contenedor con servicio ssh listo para conectarnos y empezar trabajar.
PODMAN:
$ podman-compose ps
['podman', '--version', '']
using podman version: 4.3.0-dev
podman ps -a --filter label=io.podman.compose.project=kali_home
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
085ea307cf92 localhost/kali_home_kali:latest bash -c service s... 39 seconds ago Up 3 seconds ago 0.0.0.0:22->22/tcp kali_home_kali_1
exit code: 0
DOCKER:
$ docker compose ps
NAME COMMAND SERVICE STATUS PORTS
kali_home-kali-1 "bash -c 'service ss…" kali running 0.0.0.0:22->22/tcp, :::22-22/tcp