Convertir una máquina GNU/Linux en un “appliance”

Un cliente me pidió que le crease unas máquinas GNU/Linux con varios programas para la monitorización y el análisis del tráfico de red. La idea era repartir varias máquinas por distintos puntos de su extensa red y vigilar durante un tiempo ese segmento.

El cliente tan solo quería varias máquinas con GNU/Linux y algunos programas instalados, que se administrasen remotamente por SSH y enviaran a un servidor splunk central las alertas de Snort. Pero a mí me pareció una ocasión ideal para explotar la flexibilidad de GNU/Linux y las cosas chulas que se pueden hacer de una forma sencilla, así que me planteé los siguientes puntos que debería cubrir la solución:

  • Los usuarios no deben conocer la contraseña de administrador
  • Debe ser factible la gestión de los programas que se instalen (esto requiere privilegios de administrador)
  • Permitir su uso por usuarios con conocimiento cero de GNU/Linux (esto quiere decir que hay que evitar la SHELL)
  • Si llega a manos de un usuario con conocimientos, no quiero que desmonte el chiringuito. Hay que limitar el acceso
  • Los datos deben estar cifrados en el disco, ya que pueden contener datos sensibles y se van a mover por la geografía estatal
  • Se deben poder configurar las tarjetas de red

Para cubrir estos requisitos hay que:

  • Proteger la BIOS y el gestor de aranque (Grub) por contraseña
  • Cifrar la mayor parte del disco duro
  • Modificar el inicio para que init no lance el proceso login
  • Crear una interfaz de uso sencillo y que no permita el acceso a la SHELL

Esto en la práctica implica transformar un GNU/Linux en una caja “tonta” que muestre un menú con las distintas acciones que se le permite realizar al usuario al arrancar la máquina, es decir en el TTy1. Además decidí mostrar el log de Snort en el TTy2.

A continuación muestro la documentación entregada al cliente en la que se explica con detalle la arquitectura. La documentación incluye, en el Anexo, un script que automatiza el proceso de configuración una vez instalado GNU/Linux.

1         Descripción de la arquitectura

1.1       Hardware

Las sondas son PCs, sobremesa o portátil, con don tarjetas de red, una se utilizará para asignar una IP de gestión que deberá ser accesible remotamente y la utilizará el equipo de Segtec para administrar cada sonda. La otra se utilizará para redirigir el tráfico deseado desde los equipos de red y realizar los análisis pertinentes.

1.2       Software

Las sondas se instalan con la siguiente configuración software:

  • Sistema operativo: Ubunut Server
  • SSH: openssh-server
  • Firewall: iptables
  • IDS: Snort con las reglas por defecto y las de Emerging Threads
  • Estadísticas de tráfico: Ntop
  • Packet sniffer: tcpdump
  • Envío de logs remoto: splunkforwarder
  • Creación de interfaz de usuario: dialog

Para evitar la modificación de la configuración de las sondas se ha implantado las siguientes medidas:

  1. Establecimiento de usuario y contraseña para modificar las opciones de inicio mediante el gestor de arranque Grub
  2. Deshabilitar todas las consolas o TTY, de forma que no se puedan introducir credenciales de usuario para el inicio de sesión

Para permitir una gestión simple se ha creado una interfaz de usuario mediante la utilidad dialog, esta interfaz se inicia automáticamente al arrancar la sonda y permite realizar las siguientes acciones:

  • Configurar la IP de gestión
  • Parar la sonda
  • Iniciar la sonda
  • Reiniciar la sonda
  • Iniciar la captura de red
  • Parar la captura de red
  • Eliminar las capturas de red
  • Iniciar Ntop
  • Parar Ntop
  • Reiniciar Ntop

2         Instalación de una sonda

La instalación se divide en dos pasos: instalación del sistema operativo e instalación y configuración de los programas utilizados por la sonda

2.1       Instalación del sistema operativo

Antes de instalar el sistema operativo hay que tener una dirección IP que esté habilitada para salir a Internet a través del proxy

Las sondas utilizan Ubuntu server 12.10 o superior como sistema operativo. Debido a que van a capturar y analizar tráfico interno y a que irán desplazando por distintos puntos, se ha instalado de base con cifrado de disco, cifrando todas las particiones excepto la partición /boot que por su naturaleza no puede ser cifrada.

Para instalar Ubuntu Server tan solo hay que seguir los pasos del asistente, sin seleccionar ningún grupo de paquetes y con los siguientes parámetros:

  • Idioma Español (España)
  • Particiones
    • /boot : 250MB
    • Crear una partición cifrada con el resto del disco, con la contraseña “Pon la contraseña que quieras”
      • Crear un disco físico y un grupo de volúmenes con todo el tamaño del contenedor cifrado y los siguientes volúmenes lógicos
        • root_1: 20G, ext4, montado en /root
        • temp_1: 1G, ext4, montado en /tmp
        • audit_1: 3G, ext4, montado en /var/log/audit
        • home_1: 10G, ext4, montado en /home
        • var_1: 20G, ext4, montado en /var
        • swap_1: El doble que la RAM, swap, no se monta
  • Usuario administrador: XXX, contraseña: LaQueTeApetezca
  • Proxy: http://xxxxx:xxxx
  • DNS primario: xxxxxxx

2.2       Instalación y configuración de los programas

Una vez instalado el sistema operativo hay que ejecutar el script de post instalación que se encarga de realizar los pasos restantes, el script se encuentra en el archivo Sondas_snort.zip del Anexo. Seguir estos pasos:

  1. Copiar el archivo Sondas_snort.zip a la sonda
  2. Descomprimir el archivo: unzip Sondas_snort.zip
  3. Situarse en el directorio “Sondas snort”: cd Sondas snort
  4. Ejecutar el script post-install.sh: bash post-install.sh

El script realiza las siguientes acciones

  1. Instala los paquetes: openssh-server, snort, dialog, ntop
  2. Configura Grub para que pida usuario y contraseña a la hora de modificar las opciones de inicio
    1. Usuario: xxxx
    2. Contraseña: xxxx
    3. Crea el directorio /opt/scripts
    4. Copia el script onBoot.sh al directorio /opt/scripts
    5. Configura Snort para utilizar las reglas de Emerging Threads
    6. Copia las regrlas de Emerging Thread al directorio /etc/snort/rules
    7. Deshabilita las consolas (TTYs): 3,4,5 y 6
    8. Configura la consola (TTY) 1 para que ejecute el script /opt/scripts/onBoot.sh al iniciar el sistema
    9. Configura la consola (TTY) 2 para que muestre el log de alertas de Snort
    10. Instala Splunkforwarder
    11. Configura Splunkforwader para:
      1. Enviar logs al servidor xxxx:xxx
      2. Monitorizar cambios en el archivo de alertas de Snort
      3. Reinicia la sonda

3         Contenido del archivo Sondas_snort.zip

El archivo Sondas_snort.zip adjuntado en el Anexo, contiene todos los archivos necesarios para realizar las tareas posteriores a la instalación del sistema operativo, concretamente contiene los siguientes archivos:

Archivo

Función

Destino

01_users_logins Configura el usuario y contraseña de Grub /etc/grub.d
10_linux Configura las entradas de Grub que requieren contraseña /etc/grub.d
emerging.conf Configura las reglas de Snort de Emerging Threads /etc/snort
emerging.rules.tar.gz Contiene las reglas de Snort de Emerging Threads /etc/snort/rules/
gurb Configura parámetros de Grub para Debian/ubuntu /etc/default
onBoot.sh Se ejecuta en cada inicio de la sonda y configura la interfaz de usuario para gestionar la sonda /opt/scripts
post-install.sh Realiza las tareas posteriores a la instalación del sistema operativo de las sondas N/A
splunkforwarder-5.0.1-143156-linux-2.6-intel.deb Paquete de splunkforwarder Varias rutas
tty1.conf Configura la primera consola (TTY), la principal, para que ejecute indefinidamente el script onBoot.sh. De esta forma el usuario verá la interfaz de gestión nada más arrancar y no podrá salir de ella /etc/init/
Tty2.conf Configura la primera consola (TTY) para que muestre constantemente las alertas de Snort /etc/init/

 

Anexo

  • Script Sondas snort para automatizar la configuración de las sondas. En el original se incluía el SplunkForwarder pero lo he quitado para evitar problemas con las licencias. Además hay que editar los archivos
    • 01_users_logins: Para insertar la contraseña de GRUB que necesites
    • post-install.sh: Para indicar la IP y puerto del servidor de splunk y definir el archivo y versión de Splunkforwarder que hayas descargado del sitio oficial

Deja un comentario

Tu dirección de correo electrónico no será publicada.