Una base endurecida y reproducible reduce incidentes, acelera el time-to-deploy y evita deuda operativa temprana.
Objetivos de la Guía
- Establecer una línea base mínima segura.
- Dejar el sistema listo para gestión declarativa (Ansible / IaC).
- Activar observabilidad esencial (logs estructurados + métricas básicas).
- Reducir superficie de ataque sin comprometer capacidad de despliegue.
1. Resumen Técnico Inicial
| Área | Nota | Relevancia |
|---|---|---|
| Kernel | Versión estable 6.x (ver uname -r) | Soporte hardware y parches de seguridad recientes |
| Crypto (OpenSSL) | Mantener paquetes al día | Evita vulnerabilidades conocidas en handshake TLS |
| Systemd | Aislamiento por service disponible (ProtectSystem, PrivateTmp, etc.) | Facilita hardening de unidades críticas |
| Toolchain | gcc / glibc actualizados | Compilaciones reproducibles y mitigaciones modernas (PIE, RELRO) |
Nota: Verifica versiones exactas en tu entorno antes de aplicar cambios en producción y registra el snapshot inicial.
2. Paso a Paso Inicial
- Actualizar repos y paquetes.
- Configurar zona horaria, locale y sincronización de hora.
- Crear usuario administrativo sin usar root directo.
- Configurar sudo mínimo y registro.
- Aplicar hardening de SSH.
- Configurar firewall (nf_tables / ufw) y políticas base.
- Instalar tooling esencial (paquetes utilitarios + monitoreo ligero).
# Actualización base
apt update && apt full-upgrade -y
# Paquetes útiles (ajusta)
apt install -y curl git gnupg2 ca-certificates unzip htop jq fail2ban sudo nftables
# Crear usuario (reemplaza <user>)
adduser <user>
usermod -aG sudo <user>
# Sudo: require TTY y log
printf "Defaults use_pty\nDefaults logfile=/var/log/sudo.log\n" > /etc/sudoers.d/10-secure
chmod 440 /etc/sudoers.d/10-secure
3. Hardening SSH Básico
# /etc/ssh/sshd_config.d/01-hardening.conf
Protocol 2
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
X11Forwarding no
AllowTcpForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
LogLevel VERBOSE
Recargar servicio: systemctl reload sshd.
Checklist:
- Claves rotadas.
- Acceso root deshabilitado.
- Autenticación por contraseña desactivada.
4. Firewall con nftables (Ejemplo mínimo)
cat > /etc/nftables.conf <<'EOF'
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0;
policy drop;
ct state established,related accept
iif lo accept
# SSH
tcp dport 22 accept
# ICMP limitado
ip protocol icmp limit rate 5/second accept
ip6 nexthdr icmpv6 limit rate 5/second accept
# Log y drop
log prefix "nft-drop: " flags all counter drop
}
chain forward { type filter hook forward priority 0; policy drop; }
chain output { type filter hook output priority 0; policy accept; }
}
EOF
systemctl enable --now nftables
5. Fail2ban Config Básica
# /etc/fail2ban/jail.d/sshd.local
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
findtime = 600
bantime = 3600
6. Logs y Métricas Esenciales
- Logs: rsyslog/journalctl (centralizar luego).
- Métricas: node_exporter (si ya trabajas con Prometheus) o solución ligera alternativa.
- Revisar rotación:
journalctl --vacuum-size=500Mcomo guardarraíl inicial.
7. Preparar para Ansible
Estructura mínima de inventario y role base:
inventory/
hosts.ini
roles/
base/
tasks/main.yml
playbooks/
site.yml
playbooks/site.yml ejemplo:
---
- hosts: all
become: true
vars:
base_packages:
- curl
- git
- jq
roles:
- base
roles/base/tasks/main.yml ejemplo:
---
- name: Paquetes base
apt:
name: "{{ base_packages }}"
state: present
update_cache: yes
- name: Asegurar timezone
timezone:
name: Etc/UTC
- name: Crear usuario desplegues
user:
name: deploy
groups: sudo
state: present
create_home: true
8. Validación Rápida
| Área | Comando | Esperado |
|---|---|---|
| Kernel | uname -r | Versión soportada / actualizada |
| Parches | apt list --upgradable | Vacío tras actualización |
| SSH | `sshd -T | grep -i permitrootlogin` |
| Firewall | nft list ruleset | Reglas cargadas |
| Usuarios | grep -E '/bin/bash' /etc/passwd | Solo cuentas necesarias |
9. Extensiones Recomendadas
- Integrar escaneo de vulnerabilidades (ej: trivy para imágenes base si aplican contenedores).
- Añadir monitoreo de integridad (aide / osquery) según criticidad.
- Centralizar logs y métricas.
- Plantilla Ansible extendida (hardening adicional, backups, alertas).
10. Conclusión
Con una línea base consistente cada nuevo host Debian 13 es predecible, auditable y listo para escalar mediante Ansible o CI. El siguiente paso lógico es profundizar en controles adicionales (Kernel hardening, sysctl reforzado, monitoreo de integridad y segmentación de servicios) antes de abordar optimizaciones avanzadas o despliegues de aplicaciones.
Referencia interna: continúa la serie en el artículo de riesgos críticos y hardening avanzado (publicación próxima).