MySQL + Docker + phpMyAdmin para practicar ciberseguridad

Muchos estudiantes aprenden SQL haciendo consultas sin contexto.

El problema es que memorizar SELECT * FROM tabla no enseña realmente cómo se usa SQL en seguridad.

Una forma mucho más práctica es montar un pequeño laboratorio donde los datos representen eventos reales:

  • intentos fallidos de acceso
  • conexiones sospechosas
  • actividad fuera de horario
  • posibles fugas de información

1️⃣ Levantar el entorno con Docker

docker run --platform linux/amd64 --name myXampp \
-p 41061:22 \
-p 41062:80 \
-d \
-v ~/my_web_pages:/www \
tomsik68/xampp:8

Abrimos phpMyAdmin:


2️⃣ Crear la base de datos

CREATE DATABASE IF NOT EXISTS ciberseguridad_sql;
USE ciberseguridad_sql;

3️⃣ Crear una tabla de intentos fallidos

CREATE TABLE intentos_fallidos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario VARCHAR(50),
    ip_origen VARCHAR(45),
    fecha_hora DATETIME,
    intentos_fallidos INT,
    servicio VARCHAR(30)
);

4️⃣ Insertar datos de ejemplo

Aquí es donde realmente empieza la práctica.

INSERT INTO intentos_fallidos
(usuario, ip_origen, fecha_hora, intentos_fallidos, servicio)
VALUES
('admin','192.168.1.10','2026-03-12 08:15:00',2,'SSH'),
('admin','192.168.1.10','2026-03-12 08:20:00',3,'SSH'),
('maria','10.0.0.5','2026-03-12 09:00:00',1,'VPN'),
('root','203.0.113.45','2026-03-12 02:18:00',6,'SSH');

Ahora ya tenemos eventos que analizar.


5️⃣ Ver todos los registros

SELECT * FROM intentos_fallidos;

Resultado esperado:

usuario ip_origen intentos_fallidos servicio
admin 192.168.1.10 2 SSH
admin 192.168.1.10 3 SSH
maria 10.0.0.5 1 VPN
root 203.0.113.45 6 SSH

6️⃣ Detectar posibles ataques de fuerza bruta

Ahora sí tiene sentido hacer consultas de análisis.

SELECT 
    ip_origen,
    SUM(intentos_fallidos) AS total_intentos
FROM intentos_fallidos
GROUP BY ip_origen
HAVING SUM(intentos_fallidos) >= 5;

Esto permite localizar IPs con muchos intentos acumulados.

Resultado:

ip_origen total_intentos
192.168.1.10 5
203.0.113.45 6