Imagen de portada del articulo sobre seguridad básica
The BytePath Chronicles

UFW y Fail2Ban: El escudo Invisible

'El acceso físico está comprometido,' murmuró Amin,'Cualquiera podría encontrarlo.Y aunque la autenticación por clave es robusta, una vez que encuentren la IP, los ataques de fuerza bruta serán cuestión de tiempo.'

Lara asintió. 'Lo sé. Es un riesgo calculado, pero podemos mitigarlo. Necesitamos fortificar ese acceso lógico. Crear un escudo, una barrera invisible que repela los intentos de intrusión. No hay tiempo para sutilezas, pero sí para lo esencial.'

Amin entendió. '¿Un firewall y algo que los bloquee?'

'Exacto,' respondió Lara, sacando su portátil. 'UFW para el firewall, y Fail2ban para los ataques persistentes.

Instalación de UFW y Fail2ban

Leyenda
┌──(lara㉿kali)-[~] └─$ ssh amin@192.168.8.101 amin@1-bytepath:~$ sudo apt update Hit:1 http://deb.debian.org/debian bookworm InRelease Hit:2 http://deb.debian.org/debian bookworm-updates InRelease Hit:3 http://deb.debian.org/debian-security bookworm-security InRelease Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are up to date. amin@1-bytepath:~$ sudo apt install ufw fail2ban -y Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: libiptc0 libnfnetlink0 libxtables12 python3-systemd python3-pyinotify rsyslog Suggested packages: tcpd libclamav-client-perl The following NEW packages will be installed: fail2ban libiptc0 libnfnetlink0 libxtables12 python3-systemd python3-pyinotify rsyslog ufw 0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded. Need to get 1,985 kB of archives. After this operation, 9,332 kB of additional disk space will be used. ........ Processing triggers for man-db (2.11.2-1) ... Processing triggers for libc-bin (2.36-9+deb12u3) ...

Configuración de UFW: La Barrera Exterior

"Con UFW ya instalado, Lara procedió a fortificar el servidor. La prioridad era establecer una política de denegación por defecto para el tráfico entrante, asegurando que solo lo explícitamente permitido pudiera pasar. El puerto SSH, la puerta de entrada remota que los conectaba con el servidor, era la excepción crucial. Sin él, estarían ciegos y aislados.

Primero, lo básico,' comentó Lara, tecleando rápidamente. 'Denegar todo lo que no conozcamos, y permitir nuestra conexión. No podemos permitirnos un error que nos deje fuera del sistema.'"


Leyenda
┌──(lara㉿kali)-[~] └─$ ssh amin@192.168.8.101 amin@1-bytepath:~$ sudo ufw default deny incoming Default incoming policy changed to 'deny' (active) amin@1-bytepath:~$ sudo ufw default allow outgoing Default outgoing policy changed to 'allow' (active) amin@1-bytepath:~$ sudo ufw allow ssh Rule added Rule added (v6) amin@1-bytepath:~$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall enabled and active on system startup amin@1-bytepath:~$ sudo ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) amin@1-bytepath:

Configuración de Fail2ban: El Centinela Agresivo

Con la barrera exterior de UFW levantada, Lara se enfocó en el segundo componente de su defensa: Fail2ban. Si UFW era el muro, Fail2ban era el centinela vigilante, capaz de detectar a los asaltantes persistentes y castigarlos bloqueándolos temporalmente. Su misión principal era proteger el puerto SSH de los ataques de fuerza bruta, pero su flexibilidad le permitiría proteger otros servicios en el futuro.

Ahora, el ojo que todo lo ve,' explicó Lara a Amin. 'Fail2ban monitoreará los intentos fallidos de acceso. Demasiados errores y el atacante será bloqueado automáticamente. Es una defensa proactiva contra los intentos sistemáticos de adivinar nuestra clave.'"


Leyenda
┌──(lara㉿kali)-[~] └─$ ssh amin@192.168.8.101 amin@1-bytepath:~$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local amin@1-bytepath:

Lara creó una copia del archivo de configuración principal de Fail2ban (jail.conf) a jail.local. Este es un paso estándar y recomendado; permite modificar las configuraciones de Fail2ban sin riesgo de que los cambios sean borrados por una actualización del sistema. El archivo jail.local sobrescribe las configuraciones de jail.conf.

Ahora, Lara editará el archivo jail.local para ajustar las configuraciones globales y habilitar la protección SSH.


Leyenda
amin@1-bytepath:~$ sudo nano /etc/fail2ban/jail.local

Dentro de jail.local, Lara buscaría o añadiría las siguientes líneas para configurar el comportamiento básico:


Leyenda
# CONTENIDO DEL ARCHIVO /etc/fail2ban/jail.local (solo las partes relevantes) # Configuración global [DEFAULT] # Duración del baneo (en segundos) bantime = 1h # Número de intentos fallidos antes del baneo maxretry = 5 # Intervalo de tiempo para los reintentos findtime = 10m # Acciones a tomar (email, firewall, etc.). '%(action_mwl)s' por defecto. # Puedes añadir 'action = %(action_mwl)s %(mta)s[name=sshd,dest=tu_email@example.com]' si quieres emails action = %(action_mwl)s # Ignorar IPs # ignoreip = 127.0.0.1/8 ::1 192.168.8.0/24 # <-- IMPORTANTE: Si conoces IPs seguras (ej. tu propia IP estática, la red de tu portátil), añádelas aquí. # Habilitar la jaula SSH [sshd] enabled = true # Puedes ajustar el puerto si no es el 22 por defecto # port = ssh # logpath = %(sshd_log)s # backend = %(sshd_backend)s # [OTRAS JAULAS COMO NGINX, APACHE, ETC. ESTARÍAN DESHABILITADAS POR DEFECTO O CONFIGURADAS MÁS TARDE]

Explicación de las configuraciones clave en jail.local:

Leyenda
amin@1-bytepath:~$ sudo systemctl restart fail2ban amin@1-bytepath:

El servidor de Amin tenía ahora dos capas de protección digital. UFW, el muro que decidía quién entraba y quién no. Y Fail2ban, el centinela silencioso, siempre atento a los lobos que rondaran la puerta.

Un respiro.

No era Arcadia, pero era un comienzo.

Con las herramientas en su lugar y las defensas activas, Lara y Amin sabían que su pequeño nodo en el desierto estaba tan seguro como podía estarlo.

El sol casi había desaparecido, y el crepúsculo envolvía el antiguo peaje. La carretera, antes una arteria de comercio, ahora se extendía vacía y silenciosa hacia el horizonte incierto.

Un nuevo tramo del viaje les esperaba, y con cada kilómetro, la esperanza de Arcadia brillaba un poco más.

PREV.. NEXT..