Base Setup · Hardening RHEL
El punto de partida del lab. Un playbook de Ansible que toma una VM Rocky Linux 9 recién instalada y la deja hardenida, con SELinux enforcing, firewalld activo, SSH sin password y actualizaciones automáticas de seguridad.
¿Qué hace esta fase?
Un playbook de Ansible que toma una VM Rocky Linux 9 recién instalada y la deja hardenida. Idempotente: si algo ya está configurado, no lo toca. Si falla a la mitad, se vuelve a correr sin romper nada. Mismo código para el lab local y para Oracle Cloud. Solo cambia el inventario.
system-base: lo primero que corre
Actualiza el sistema, instala los paquetes base y configura timezone/locale. Nada de magia: cuatro tasks explícitas.
Paquetes instalados
nano curl wget git net-tools htop bash-completion glibc-langpack-es Defaults
system_base_packages:
- nano
- curl
- wget
- git
- net-tools
- htop
- bash-completion
- glibc-langpack-es
system_timezone: America/Argentina/Buenos_Aires
system_locale: es_AR.utf8 defaults/main.yml o pasarlas como extra vars:
ansible-playbook ... -e "system_timezone=Europe/Madrid".
No hace falta tocar las tasks.
Tasks
- name: Actualizar todos los paquetes del sistema
ansible.builtin.dnf:
name: "*"
state: latest
update_cache: true
- name: Instalar paquetes base
ansible.builtin.dnf:
name: "{{ system_base_packages }}"
state: present
- name: Configurar timezone
ansible.builtin.command:
cmd: timedatectl set-timezone {{ system_timezone }}
changed_when: false
- name: Configurar locale
ansible.builtin.command:
cmd: localectl set-locale LANG={{ system_locale }}
changed_when: false
Cuatro tareas simples. La primera hace un dnf update completo
(equivalente a apt update && apt upgrade en Debian).
Las siguientes instalan los paquetes de la lista, configuran
la zona horaria y el locale del sistema.
Los 6 roles en orden
site.yml ejecuta los roles en secuencia. Cada uno
depende del anterior. No se puede saltar.
---
# Playbook principal — Rocky Linux AIOps Lab
- name: Hardening base del sistema Rocky Linux 9
hosts: rocky-aiops
become: true
roles:
- system-base
- firewalld
- selinux
- ssh-hardening
- fail2ban
- dnf-automatic
El orden importa por dependencias. system-base
instala paquetes que firewalld necesita.
selinux corre después porque algunos booleanos
requieren puertos ya abiertos. Y ssh-hardening va
último para no lockearte fuera mientras el firewall se
configura.
Ejecutar el Playbook
Dos modos de ejecución: dentro de la VM (lab local) o desde la terminal apuntando a la VM por SSH. El resultado es el mismo.
Correr dentro de la VM
Clonar el repo y ejecutar ansible-playbook adentro
de la VM. Con ansible_connection: local no hace
falta SSH.
Correr desde la Mac (SSH)
Descomentar las líneas de SSH en el inventario y apuntar a la VM.
rocky-aiops:
# ansible_host: localhost
# ansible_connection: local
ansible_host: 192.168.64.10
ansible_port: 2222
ansible_user: agustinm
ansible_ssh_private_key_file: ~/.ssh/id_ed25519
ansible_python_interpreter: /usr/bin/python3 ssh-hardening.
Ese rol deshabilita password auth. Sin key configurada, el
acceso SSH se pierde.
Estructura de Ansible
Cada pieza tiene un propósito claro.
ansible.cfg inventory/hosts.yml inventory/oracle.yml playbooks/site.yml roles/system-base/ Chequear que todo quedó bien
Después del playbook, un par de comandos confirman que cada capa de hardening está activa.
Siguiente: SELinux
Con el hardening base aplicado, se profundiza en SELinux: la diferencia más grande entre RHEL y Ubuntu. Por qué está enforcing, qué son los booleanos y cómo convive con k3s.