Esta pagina se ve mejor con JavaScript habilitado

Template de Bastille a medida

 ·  🎃 kr0m

Los templates de Bastille resultan muy útiles para automatizar configuraciones de equipos ya sean jails, equipos físicos o máquinas virtuales , en este artículo veremos como realizar una configuración base mediante este sistema.

El primer paso es crear el repositorio de git, en mi caso se trata de un repositorio en un GitLab alojado localmente.

Clonamos el repositorio en nuestro pc local:

git clone git@gitlab.alfaexploit.com :gitlab-instance-0a98b435/bastille-basicconfiguration.git

Creamos los directorios y ficheros que Bastillefile necesita para realizar la configuración:

cd bastille-basicconfiguration

mkdir -p home/kr0m/.ssh/
vi home/kr0m/.ssh/authorized_keys
vi home/kr0m/.bashrc
vi home/kr0m/.bash_profile
vi home/kr0m/.vimrc

mkdir -p root/.scripts
vi root/.bashrc
vi root/.bash_profile
vi root/.vimrc
vi root/.scripts/securityCheck.sh
vi root/.scripts/sshKeys.py
vi root/.scripts/sshAccess.py

mkdir -p usr/local/etc/rc.d
vi usr/local/etc/rc.d/sshAccess

mkdir -p var/cron/tabs/
vi var/cron/tabs/root

La estructura final de directorios/ficheros será la siguiente:

├── Bastillefile
├── home
│   └── kr0m
│       ├── .bash_profile
│       ├── .bashrc
│       ├── .ssh
│       │   └── authorized_keys
│       └── .vimrc
├── root
│   ├── .bash_profile
│   ├── .bashrc
│   ├── .scripts
│   │   ├── securityCheck.sh
│   │   ├── sshAccess.py
│   │   └── sshKeys.py
│   └── .vimrc
├── usr
│   └── local
│       └── etc
│           └── rc.d
│               └── sshAccess
└── var
    └── cron
        └── tabs
            └── root

Definimos en el Bastillefile las acciones a realizar sobre la jail, instalación de software, modificación de ficheros, adición de usuarios, copia de ficheros y arranque de servicios:

vi Bastillefile

CMD ASSUME_ALWAYS_YES=yes pkg upgrade
PKG vim bash bash-completion curl bat py39-pip rsync python
CMD pip install --upgrade pip
CMD pip install requests
CMD bash -c 'sed -i "" "s/127.0.0.1\t\tlocalhost localhost.my.domain/127.0.0.1\t\t$HOSTNAME $HOSTNAME.alfaexploit.com localhost localhost.my.domain/g" /etc/hosts'
CMD bash -c 'id kr0m 1>2&>/dev/null;if [ $? -eq 0 ];then echo "KR0M-PASSWORD" | pw usermod -n kr0m -s /usr/local/bin/bash -h 0;else echo "KR0M-PASSWORD" | pw useradd -n kr0m -m -G wheel -s /usr/local/bin/bash -h 0;fi'
CMD echo "ROOT-PASSWORD" | pw usermod -n root -s /usr/local/bin/bash -h 0

CP home usr
CMD chmod 700 /usr/home/kr0m/.ssh
CMD chown -R kr0m:kr0m /usr/home/kr0m

CP root /
CMD chmod 700 /root/.scripts/sshKeys.py
CMD chmod 700 /root/.scripts/securityCheck.sh
CMD chmod 700 /root/.scripts/sshAccess.py

CP usr /
CMD chmod 555 /usr/local/etc/rc.d/sshAccess
CMD chown root:wheel /usr/local/etc/rc.d/sshAccess

CP var /
CMD chmod 600 /var/cron/tabs/root

SYSRC sshAccess_enable=YES
SERVICE sshAccess start

SYSRC sshd_enable=YES
SERVICE sshd start

NOTA: El comando CP solo añade contenido, por lo que se preservan los ficheros existentes añadiendo los nuevos.

Creamos una deploykey con role: Reporter en el repositorio de GitLab para que el servidor Bastille pueda clonar el repositorio.

Bastille incorpora un comando de bootstraping de templates pero parsea el nombre del repositorio de forma incorrecta:

    _template=${bastille_templatesdir}/${_user}/${_repo}

En mi caso el repositorio tiene la URL:

https:///gitlab.alfaexploit.com/gitlab-instance-0a98b435/bastille-basicconfiguration.git

Por lo tanto parsea gitlab-instance-0a98b435 como nombre del repositorio y el template quedaría clonado del siguiente modo:

bastille list template

/usr/local/bastille/templates
/usr/local/bastille/templates/bastillebsd-templates
/usr/local/bastille/templates/bastillebsd-templates/nginx
/usr/local/bastille/templates/gitlab.alfaexploit.com
/usr/local/bastille/templates/gitlab.alfaexploit.com/gitlab-instance-0a98b435

Para evitar dicho problema lo haremos nosotros mismos a mano:

mkdir /usr/local/bastille/templates/gitlab.alfaexploit.com
cd /usr/local/bastille/templates/gitlab.alfaexploit.com
git clone https:///MightyMax:DEPLOYTOKEN@gitlab.alfaexploit.com/gitlab-instance-0a98b435/bastille-basicconfiguration.git

bastille list template
/usr/local/bastille/templates
/usr/local/bastille/templates/bastillebsd-templates
/usr/local/bastille/templates/bastillebsd-templates/nginx
/usr/local/bastille/templates/gitlab.alfaexploit.com
/usr/local/bastille/templates/gitlab.alfaexploit.com/bastille-basicconfiguration

Creamos una jail de pruebas:

bastille create -T test 13.1-RELEASE 192.168.69.17/24 nfe0

Aplicamos el template:

bastille template test gitlab.alfaexploit.com/bastille-basicconfiguration

Si te ha gustado el artículo puedes invitarme a un RedBull aquí