🐋
Apuntes Sistemas
  • ⚓Presentación
  • 📊Sistemas y Servidores
    • Personalizar el prompt de Windows
    • Utilidad de manejo de apps para Windows
    • PRACTICA: Arranque dual Windows y Ubuntu
    • 🚧SysLinuxOS: el SO para ASIX
    • Comandos Linux
      • PRACTICA - Ejercicio de práctica comandos
      • 🚧Instalación de paquetes
      • Apuntes Linux: blue/red team
      • Ejemplos de bash
      • Listado de comandos de Linux
    • Comandos Windows
      • 🚧Apuntes Powershell
      • Bucles FOR con batch
      • Scripts de práctica de Windows
    • Prácticas con Windows 10
    • Configuración de netplan
    • Terminal shell
      • SSH
      • 🚧Ghostty
      • 🚧Warp: la terminal inteligente
      • tmux: paneles de terminal
      • Tabby: Mejorar terminal
      • Conexión SSH en red NAT con VirtualBox
      • TheFuck!: Corrección de comandos
      • Wave: Mejorar terminal Linux
      • 🚧Registros de sesiones
    • Instalación manual de Wordpress en CDMON
    • 🏗️Proxmox
    • 🚧TrueNAS
    • Docker
      • Instalación de Docker
      • Dockerfiles
      • Volúmenes de docker
      • Deployment web con Docker con ejemplos
        • 🚧PRACTICA: Node.js con docker
      • Docker Compose
        • Ejemplo 1: Implantación de Wordpress
        • Ejemplo 2: Implementación de servidor con Nginx, Flask y mySQL
        • Ejemplo 3: Implantación de onlyoffice
        • 🚧Ejemplo 4: Passbolt
        • 🚧PRACTICA: Creando una web de emulación de juegos con docker-compose
      • Monitorización con Grafana en Docker
      • Pi-hole con docker
      • Actividad clase: Deployment app
      • Proyectos self-hosted de docker
    • 🚧Ansible
      • Configuración de laboratorio de ansible
    • 🚧Monitorización de servicios y redes
      • Servicios y cronjobs
      • 1Panel
      • 🚧WatchYourLAN
      • 🚧Uptime-kuma
      • 🚧Netdata
      • 🚧Prometheus + Grafana + Loki
    • LDAP
      • 🚧Gestión gráfica de LDAP
      • Carpetas compartidas NFS
      • PRACTICA: Infraestructura LDAP
  • 🗃️Servicios
    • 🚧Servidor hosting público
    • DHCP
      • DHCP con Ubuntu
      • 🦖DHCP & DNS script
      • DHCP con Alpine
        • Alpine - configuración de red
    • DNS
      • 😡Comprobación DNS
      • Script para enumeración DNS
      • DNS con ubuntu server
      • 🏗️DNSmasq
      • 🚧Securizar servidor DNS
    • Web
      • IIS con Windows server
      • Apache
        • Instalación de LAMP en Ubuntu
          • Prueba de servidor LAMP
          • 🚧Configuración de seguridad de Ubuntu
          • Creación de un VirtualHost en LAMP
          • Creación de varios VirtualHosts en LAMP
          • 🚧Instalación por script de LAMP
        • Aplicaciones con LAMP
          • Instalación de WP en entorno LAMP
          • 🚧Instalación de MantisBT en LAMP
            • 👷Guía de MantisBT
          • 🚧Instalación de QDPM con LAMP
      • Nginx
        • Virtualhosts
        • Instalando Wordpress en nginx
      • 👷MEAN stack
      • 👷‍♂️Caddy
      • 🚧Plesk
      • 🚧Ajenti -Web interface
    • 🏗️Proxy
      • Nginx como proxy inverso y balanceador
      • 🚧Zoraxy
    • Mailing
      • 🚧Servidor Mail con cloudfare
      • 🚧Reenvío de correos de root
      • 🚧Roundcube como MUA
      • Comprobación ESMTP
      • 🚧Seguridad en mailing
      • 🚧Mailhog
    • 🏗️File transfer
      • 🚧FTP
      • Git
    • Sistemas de comunicación instantánea
      • Comunicación mediante CLI
      • Ejabberd - XMPP
        • 🚧Ejabberd con docker
      • 🚧Openfire - XMPP
      • 🚧Comunicaciones servidor-móvil
    • 🏗️Multimedia services
      • Stremio
      • Ver anime por CLI
      • Jellyfin
      • 🚧HLS sobre Apache
      • 🚧Servicio autohospedado de videoconferencia
      • 🚧Morphos: Conversor docs
      • 🚧Reproductores de música en CLI
      • 🚧Icecast - música en streaming
      • 🚧RTMP-HLS server
      • 🚧Guacamole
  • 🖱️Hardware
    • 🚧Identificando conectores
    • Curso de electrónica analógica
    • Alcanzar los 3200MHz con la RAM
    • Calculadora de cuellos de botella
    • 🚧PXE: Bootear sistemas en red
    • 🚧PRÁCTICA - Clonación de disco con Clonezilla
    • Logitech iFixit
  • 🕸️Redes
    • Apuntes IPv4 Alina
    • ¿Cómo diferenciar tantos elementos de red?
    • 🚧IPv6
    • PRÁCTICA - Subneteo con IPcalc en Linux
    • PRÁCTICA - Comandos de red en Windows
    • 🚧PRÁCTICA - Comandos de red en Linux
    • Herramientas de red
      • 🚧TCPDump: analizado de paquetes en red
      • PRÁCTICA - Netsh
      • 🚧PRÁCTICA - mtr.ping.pe
      • 🚧Netcat
    • Wireshark
    • VPN y escritorio remoto
      • Comunicación punto a punto con ngrok
      • 🚧VPN
    • Escaneo de red
      • PRÁCTICA - Mapeado de red con Draw.io
      • 🚧PRÁCTICA - Nmap/Zenmap
    • Redes inalámbricas
      • Wi-fi
        • 🚧PRÁCTICA - Configuración de router
        • 🚧PRÁCTICA - Como hacer un Wifi Heatmap
        • 🚧Seguridad de redes inalámbricas
        • PRÁCTICA - Crackear la contraseña del Wifi con WPA/WPA2
    • PRÁCTICA - Usar SSH en Cisco packet tracer
  • 🛑Ciberseguridad
    • 🚧Securizando un servidor Linux
      • Protégete de ataques de fuerza bruta con Fail2ban
      • Firewall
        • UFW (uncomplicated firewall)
          • GUFW - Interfaz gráfica de ufw
        • 🚧IPTables
        • 🚧PFsense
          • 🚧DMZ con PFsense
      • 🚧Passbolt: gestor de contraseñas autohospedado
      • 🚧Hashes y encriptación
      • 🚧Certificados SSL/TLS
      • Copias de seguridad
    • 🚧Alerta de escaneo de puertos
    • 🚧Google dorks
    • 🚧Enumeración DNS
    • Comandos destructivos de linux
    • Webs enseñanza cyber
    • Wireless Pentesting CheatSheet Github
    • The password game!
    • Personal Security Checklist
  • 🔌Arduino
    • Termómetro e higrómetros digitales y online con Arduino
    • Construyendo un coche multipropósito
      • Multi
      • Montaje del auto
    • Arduino con Sigfox para IoT
    • 10 proyectos de Arduino
  • 📚Recursos y libros
    • Media library: libros varios
    • Herramientas básicas de sysadmin
  • 🌍Sostenibilidad y digitalización
    • Portfolio curso digitalización MOOC
    • 🚧Explotación de recursos por IA
    • 🚧Nuevas tecnologias y comunicaciones
    • 🚧Enlaces sobre Inteligencia artificial
Con tecnología de GitBook
En esta página
  • Requisitos Previos
  • Aprovisionando el Laboratorio
  • Instalación de Ansible en el Nodo Maestro
  • Configuración de Autenticación SSH con Llaves
  • Crear el Archivo de Configuración de Ansible
  • Crear el Archivo de Inventario
  • Resumen
  1. Sistemas y Servidores
  2. Ansible

Configuración de laboratorio de ansible

Como ya hemos visto, Ansible es una herramienta fantástica si te interesa DevOps o si estás comenzando en la automatización de infraestructuras.

Vamos a ver como configurar un laboratorio casero con Ansible utilizando Vagrant, una herramienta que simplifica mucho el proceso con el objetivo de poder desplegar máquinas virtuales fácilmente para practicar y aprender Ansible:

Requisitos Previos

Antes de comenzar, asegúrate de contar con las siguientes herramientas:

  • Computadora con Windows: La mayoría de nosotros usamos Windows, así que será nuestro sistema base. Si usas otro sistema operativo, el proceso es similar.

  • VirtualBox: Usaremos este software de virtualización para crear nuestras máquinas virtuales. Puedes descargarlo desde su sitio web oficial, es gratuito.

  • Vagrant: Vagrant nos permitirá gestionar entornos de máquinas virtuales, facilitando la creación y configuración de las mismas. Descárgalo desde su sitio oficial.

  • Editor de código: Necesitarás un editor para escribir los archivos de Vagrant y los playbooks de Ansible. Visual Studio Code es una buena opción, pero cualquier editor con soporte para sintaxis YAML servirá.

Aprovisionando el Laboratorio

Una vez instaladas las herramientas necesarias, vamos a crear nuestro laboratorio con Vagrant. Este es el diseño del entorno:

Ya he creado los archivos y scripts necesarios. Puedes clonarlos desde mi repositorio de GitHub con el siguiente comando:

git clone https://github.com/thatstraw/learn-ansible

El repositorio contiene un archivo Vagrantfile con la siguiente configuración:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.boot_timeout = 900

  # Servidor maestro
  config.vm.define "master-server" do |master|
    master.vm.box = "geerlingguy/rockylinux8"
    master.vm.hostname = "master-server"
    master.vm.network :private_network, ip: "192.168.56.4"
    master.vm.provider "virtualbox" do |v|
      v.memory = 2048
    end
  end

  # Servidor de aplicación 1
  config.vm.define "app01" do |app|
    app.vm.box = "ubuntu/jammy64"
    app.vm.hostname = "app-server-01"
    app.vm.network :private_network, ip: "192.168.56.5"
    app.vm.provider "virtualbox" do |v|
      v.memory = 512
    end
    app.vm.provision "shell", path: "enable_ssh_password_auth.sh"
  end

  # Servidor de aplicación 2
  config.vm.define "app02" do |app|
    app.vm.box = "ubuntu/jammy64"
    app.vm.hostname = "app-server-02"
    app.vm.network :private_network, ip: "192.168.56.6"
    app.vm.provider "virtualbox" do |v|
      v.memory = 512
    end
    app.vm.provision "shell", path: "enable_ssh_password_auth.sh"
  end

  # Servidor de base de datos
  config.vm.define "db" do |db|
    db.vm.box = "geerlingguy/rockylinux8"
    db.vm.hostname = "db-server-01"
    db.vm.network :private_network, ip: "192.168.56.7"
    db.vm.provider "virtualbox" do |v|
      v.memory = 512
    end
  end

end

Este archivo configura un entorno con cuatro máquinas virtuales:

  • Nodos base: Master y base de datos con "geerlingguy/rockylinux8", aplicaciones con "ubuntu/jammy64".

  • Memoria asignada: 2 GB para el nodo maestro, 512 MB para los demás.

  • IPs privadas y nombres de host definidos para cada nodo.

  • Script de provisión para habilitar autenticación por contraseña SSH en los nodos de aplicación.

Instalación de Ansible en el Nodo Maestro

Con el entorno en marcha, es hora de instalar Ansible en el nodo maestro. Puedes hacerlo de dos formas:

Método 1: Desde el repositorio EPEL

  1. Accede por SSH al nodo maestro:

vagrant ssh master
  1. Habilita el repositorio EPEL:

sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
  1. Actualiza los paquetes:

sudo dnf update
  1. Instala Ansible:

sudo dnf install ansible -y
  1. Verifica la instalación:

ansible --version

Método 2: Usando PIP

  1. Instala pip y Ansible:

sudo dnf update
sudo dnf install python3-pip -y
pip3 install ansible

Configuración de Autenticación SSH con Llaves

Genera un par de llaves SSH en el nodo maestro:

ssh-keygen

Copia la clave pública a cada nodo gestionado:

ssh-copy-id vagrant@192.168.56.5
ssh-copy-id vagrant@192.168.56.6
ssh-copy-id vagrant@192.168.56.7

Contraseña por defecto: vagrant.

Crear el Archivo de Configuración de Ansible

  1. Crea un directorio para tus archivos:

mkdir ~/ansible-lab
cd ~/ansible-lab
  1. Crea el archivo ansible.cfg:

[defaults]
inventory = hosts
host_key_checking = False
private_key_file = ~/.ssh/id_rsa

[privilege_escalation]
become=True

Este archivo configura Ansible para:

  • No verificar la clave del host (por simplicidad).

  • Usar la llave privada generada.

  • Ejecutar tareas con privilegios elevados por defecto.

Crear el Archivo de Inventario

  1. Crea el archivo hosts dentro de ~/ansible-lab:

192.168.56.4
192.168.56.5
192.168.56.6
  1. Puedes probar la conectividad con:

ansible all -m ping

Si los nombres de usuario difieren entre el nodo maestro y los gestionados, usa la opción -u:

ansible all -m ping -u james

Resumen

Ya tienes listo tu entorno para comenzar a escribir y ejecutar playbooks de Ansible. En el próximo artículo se explorarán los comandos ad-hoc, que permiten realizar tareas rápidas sin necesidad de crear un playbook completo.

AnteriorAnsibleSiguienteMonitorización de servicios y redes

Última actualización hace 8 días

📊
🚧