Cómo instalar y configurar el servidor cortafuegos (CSF) en Rocky Linux 9

Config Server Security and Firewall (CSF) es un cortafuegos basado en iptables que proporciona seguridad de alto nivel al sistema Linux. Lo hace mediante una inspección de paquetes con estado (SPI).

Incluye muchas funciones, como bloqueo de IP, bloqueo de puertos y protección DDoS. También admite la limitación de velocidad, el seguimiento de conexiones y la detección de inicios de sesión SSH. También incluye herramientas para comprobar la integridad del sistema y de los archivos. Viene con un panel de control GUI, que se puede utilizar para gestionar su configuración. También puedes integrar CSF con paneles de control como DirectAdmin, cPanel, Cyberpanel, Vesta y Webmin.

Este tutorial te enseña a instalar y gestionar CSF en un servidor Rocky Linux 9.

Requisitos previos

  • Un servidor que ejecute Rocky Linux 9 con un mínimo de 1 GB de RAM.
  • Un usuario no root con privilegios sudo.
  • Un Nombre de Dominio Completamente Cualificado (FQDN) como csf.example.com apuntando a tu servidor.
  • Todo actualizado.
    $ sudo dnf update
    
  • Se necesitan algunos paquetes esenciales para que el tutorial y Craft CMS funcionen. Algunos de ellos ya estarán en tu servidor.
    $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
    

Paso 1 – Desactivar el cortafuegos Firewalld

Rocky Linux utiliza por defecto el cortafuegos Firewalld. Primero tenemos que desactivarlo para que no interfiera con el LCR.

Comprueba primero el estado del cortafuegos Firewalld.

$ sudo systemctl status firewalld
? firewalld.service - firewalld - dynamic firewall daemon
     Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; preset: enabled)
     Active: active (running) since Tue 2023-12-05 07:00:53 UTC; 40s ago
       Docs: man:firewalld(1)
   Main PID: 58756 (firewalld)
      Tasks: 2 (limit: 4424)
     Memory: 25.9M
        CPU: 496ms
     CGroup: /system.slice/firewalld.service
             ??58756 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid

Dec 05 07:00:52 csf.example.com systemd[1]: Starting firewalld - dynamic firewall daemon...
Dec 05 07:00:53 csf.example.com systemd[1]: Started firewalld - dynamic firewall daemon.

Detén y desactiva el servicio Firewalld.

$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld

Paso 2 – Instalar los módulos Perl necesarios

El CSF necesita ciertos módulos Perl para funcionar. Pero antes, necesitamos el repositorio EPEL. Instálalos.

$ sudo dnf install epel-release

Instálalos utilizando el siguiente comando.

$ sudo dnf install perl-core perl-libwww-perl.noarch perl-LWP-Protocol-https.noarch perl-GDGraph -y

Paso 3 – Descargar e instalar CSF

CSF no está disponible en el repositorio Rocky Linux. Por lo tanto, tenemos que instalarlo manualmente.

Descarga la última versión del archivo CSF de su página web.

$ wget https://download.configserver.com/csf.tgz

Extrae el archivo.

$ tar xzf csf.tgz

Cambia al directorio extraído.

$ cd csf

Instala CSF llamando al script instalador.

$ sudo ./install.sh

Deberías obtener la siguiente salida.

...............
Don't forget to:
1. Configure the following options in the csf configuration to suite your server: TCP_*, UDP_*
2. Restart csf and lfd
3. Set TESTING to 0 once you're happy with the firewall, lfd will not run until you do so
'lfd.service' -> '/usr/lib/systemd/system/lfd.service'
'csf.service' -> '/usr/lib/systemd/system/csf.service'
Created symlink /etc/systemd/system/multi-user.target.wants/csf.service → /usr/lib/systemd/system/csf.service.
Created symlink /etc/systemd/system/multi-user.target.wants/lfd.service → /usr/lib/systemd/system/lfd.service.
Unit /etc/systemd/system/firewalld.service is masked, ignoring.
The unit files have no installation config (WantedBy=, RequiredBy=, Also=,
Alias= settings in the [Install] section, and DefaultInstance= for template
units). This means they are not meant to be enabled or disabled using systemctl.

Possible reasons for having this kind of units are:
• A unit may be statically enabled by being symlinked from another unit's
  .wants/ or .requires/ directory.
• A unit's purpose may be to act as a helper for some other unit which has
  a requirement dependency on it.
• A unit may be started when needed via activation (socket, path, timer,
  D-Bus, udev, scripted systemctl call, ...).
• In case of template units, the unit is meant to be enabled with some
  instance name specified.
'/etc/csf/csfwebmin.tgz' -> '/usr/local/csf/csfwebmin.tgz'

Installation Completed

Comprueba si están disponibles los módulos iptables necesarios.

$ sudo perl /usr/local/csf/bin/csftest.pl

Deberías ver la siguiente salida.

Testing ip_tables/iptable_filter...OK
Testing ipt_LOG...OK
Testing ipt_multiport/xt_multiport...OK
Testing ipt_REJECT...OK
Testing ipt_state/xt_state...OK
Testing ipt_limit/xt_limit...OK
Testing ipt_recent...OK
Testing xt_connlimit...OK
Testing ipt_owner/xt_owner...OK
Testing iptable_nat/ipt_REDIRECT...OK
Testing iptable_nat/ipt_DNAT...OK

RESULT: csf should function on this server

Comprueba la versión de CSF.

$ sudo csf -v
csf: v14.20 (generic)
*WARNING* TESTING mode is enabled - do not forget to disable it in the configuration

Paso 4 – Configurar CSF

CSF almacena su configuración en el archivo /etc/csf/csf.conf. Abre el archivo para editarlo.

$ sudo nano /etc/csf/csf.conf

El primer paso es desactivar el modo de prueba. Cambia el valor de la variable TESTING de 1 a 0.

TESTING = "0"

Busca la línea RESTRICT_SYSLOG = "0" y cambia su valor a 3. Esto significa que sólo los miembros del grupo RESTRICT_SYSLOG_GROUP pueden acceder a los archivos syslog/rsyslog. El RESTRICT_SYSLOG_GROUP contiene por defecto los usuarios root, mysql, rpc, daemon, dbus, y varios usuarios de cPanel y DirectAdmin. Puedes añadir más usuarios editando el archivo /etc/csf/csf.syslogusers.

Paso 5 – Configurar puertos

Por defecto, CSF mantiene abiertos los siguientes puertos.

# Allow incoming TCP ports
TCP_IN = "20,21,22,25,53,853,80,110,143,443,465,587,993,995"

# Allow outgoing TCP ports
TCP_OUT = "20,21,22,25,53,853,80,110,113,443,587,993,995"

# Allow incoming UDP ports
UDP_IN = "20,21,53,853,80,443"

# Allow outgoing UDP ports
# To allow outgoing traceroute add 33434:33523 to this list
UDP_OUT = "20,21,53,853,113,123"

Los servicios que utilizan estos puertos son

  • Puerto 20: Transferencia de datos FTP
  • Puerto 21: Control FTP
  • Puerto 22: Shell seguro (SSH)
  • Puerto 25: Protocolo simple de transferencia de correo (SMTP)
  • Puerto 53: Sistema de nombres de dominio (DNS)
  • Puerto 80: Protocolo de transferencia de hipertexto (HTTP)
  • Puerto 110: Protocolo de oficina de correos v3 (POP3)
  • Puerto 113: Servicio de autenticación/protocolo de identificación
  • Puerto 123: Protocolo de tiempo de red (NTP)
  • Puerto 143: Protocolo de acceso a mensajes de Internet (IMAP)
  • Puerto 443: Protocolo de transferencia de hipertexto sobre SSL/TLS (HTTPS)
  • Puerto 465: Directorio URL Rendezvous para SSM (Cisco)
  • Puerto 587: Envío de mensajes de correo electrónico (SMTP)
  • Puerto 993: Protocolo de acceso a mensajes de Internet sobre SSL (IMAPS)
  • Puerto 995: Protocolo de oficina de correos 3 sobre TLS/SSL (POP3S)

Si no necesitas todos estos puertos abiertos, puedes eliminar algunos de ellos para mejorar la seguridad. Si utilizas IPv6 para tus servicios, tendrás que configurar los puertos TCP6_IN, TCP6_OUT, UDP6_IN, y UDP6_OUT como se muestra.

# Allow incoming IPv6 TCP ports
TCP6_IN = "20,21,22,25,53,853,80,110,143,443,465,587,993,995"

# Allow outgoing IPv6 TCP ports
TCP6_OUT = "20,21,22,25,53,853,80,110,113,443,587,993,995"

# Allow incoming IPv6 UDP ports
UDP6_IN = "20,21,53,853,80,443"

# Allow outgoing IPv6 UDP ports
# To allow outgoing traceroute add 33434:33523 to this list
UDP6_OUT = "20,21,53,853,113,123"

Cambia los puertos según tus necesidades.

Paso 6 – Ajustes adicionales del LCR

Hay muchos ajustes que configurar. Veamos algunos de los más utilizados.

ICMP_IN – configurando esta variable a 1 permites pings a tu servidor y a 0 rechazas tales peticiones. Se recomienda permitir las peticiones ICMP si alojas servicios públicos para que se pueda determinar si tu servicio está disponible.

ICMP_IN_LIMIT – establece el número de peticiones permitidas desde una única dirección IP en un tiempo determinado. Se recomienda mantener el valor sin cambios.

DENY_IP_LIMIT – restringe el número de direcciones IP bloqueadas por el LCR. Si el número de IPs bloqueadas supera este número, el CSF desbloqueará la IP más antigua, que será la primera entrada en el archivo /etc/csf/csf.deny . Establecer este número demasiado alto puede ralentizar el servidor. Elige el número en función de los recursos de tu servidor.

DENY_TEMP_IP_LIMIT – lo mismo que arriba pero para bloqueos temporales de direcciones IP.

PACKET_FILTER – filtra los paquetes de tráfico no válido, no deseado e ilegal.

CONNLIMIT – limita el número de conexiones activas simultáneas permitidas en un mismo puerto. Puedes configurarlo como sigue.

CONNLIMIT = "22;5;443;20"

El valor anterior significa que sólo se permitirán 5 conexiones concurrentes en el puerto 22 por dirección IP y sólo se permitirán 20 conexiones concurrentes en el puerto 443 por dirección IP.

PORTFLOOD – limita el número de conexiones por intervalo de tiempo que se pueden realizar nuevas conexiones a puertos específicos. Puedes configurarlo de la siguiente manera.

PORTFLOOD = "22;tcp;5;250"

El valor anterior bloqueará la dirección IP si se establecen más de 5 conexiones en el puerto 22 utilizando el protocolo TCP en 250 segundos. El bloqueo se restablecerá transcurridos 250 segundos. Puedes añadir más puertos añadiendo comas.

PORTFLOOD = "22;tcp;5;250,80;tcp;10;300"

Una vez terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Inicia y activa los servicios CSF y LFD.

$ sudo systemctl start csf lfd
$ sudo systemctl enable csf lfd

Comprueba el estado del servicio CSF.

$ sudo systemctl status csf
? csf.service - ConfigServer Firewall & Security - csf
     Loaded: loaded (/usr/lib/systemd/system/csf.service; enabled; preset: disabled)
     Active: active (exited) since Tue 2023-12-05 13:57:59 UTC; 2min 7s ago
   Main PID: 11050 (code=exited, status=0/SUCCESS)
        CPU: 1.192s

Dec 05 13:57:59 csf.example.com csf[11050]: ACCEPT  all opt    in * out lo  ::/0  -> ::/0
Dec 05 13:57:59 csf.example.com csf[11050]: LOGDROPOUT  all opt    in * out !lo  ::/0  -> ::/0
Dec 05 13:57:59 csf.example.com csf[11050]: LOGDROPIN  all opt    in !lo out *  ::/0  -> ::/0
Dec 05 13:57:59 csf.example.com csf[11050]: csf: FASTSTART loading DNS (IPv4)
Dec 05 13:57:59 csf.example.com csf[11050]: csf: FASTSTART loading DNS (IPv6)
Dec 05 13:57:59 csf.example.com csf[11050]: LOCALOUTPUT  all opt -- in * out !lo  0.0.0.0/0  -> 0.0.0.0/0
Dec 05 13:57:59 csf.example.com csf[11050]: LOCALINPUT  all opt -- in !lo out *  0.0.0.0/0  -> 0.0.0.0/0
Dec 05 13:57:59 csf.example.com csf[11050]: LOCALOUTPUT  all opt    in * out !lo  ::/0  -> ::/0
Dec 05 13:57:59 csf.example.com csf[11050]: LOCALINPUT  all opt    in !lo out *  ::/0  -> ::/0
Dec 05 13:57:59 csf.example.com systemd[1]: Finished ConfigServer Firewall & Security - csf.

Comprueba los puertos abiertos cuando se esté ejecutando CSF.

$ sudo csf -p
Ports listening for external connections and the executables running behind them:
Port/Proto Open Conn  PID/User             Command Line                            Executable
22/tcp     4/6  2     (863/root)           sshd: /usr/sbin/sshd -D [listener] 0... /usr/sbin/sshd
111/tcp    -/-  -     (1/root)             /usr/lib/systemd/systemd --switched-... /usr/lib/systemd/systemd
111/tcp    -/-  -     (642/rpc)            /usr/bin/rpcbind -w -f                  /usr/bin/rpcbind
111/udp    -/-  -     (1/root)             /usr/lib/systemd/systemd --switched-... /usr/lib/systemd/systemd
111/udp    -/-  -     (642/rpc)            /usr/bin/rpcbind -w -f                  /usr/bin/rpcbind
323/udp    -/-  -     (679/chrony)         /usr/sbin/chronyd -F 2                  /usr/sbin/chronyd

AUTO_UPDATES – El valor 0 desactiva las actualizaciones automáticas. Cámbialo a 1 si quieres actualizaciones automáticas. Esto creará una tarea cron que se ejecutará una vez al día para realizar actualizaciones automáticas y reiniciará los servicios csf y lfd.

ETH_DEVICE – Por defecto, CSF filtra el tráfico en todas las tarjetas de red, excepto en la tarjeta loopback. Si quieres que las reglas se apliquen sólo a la tarjeta eth0, establece su valor en eth0.

LF_DAEMON – establece su valor en 1 para activar la función de detección de fallo de inicio de sesión de CSF.

LF_CSF – pon su valor a 1 para activar la función de reinicio automático de CSF. Esperará cada 300 segundos para realizar la comprobación.

LF_SELECT – establecer su valor a 1 significa que cuando la dirección IP infrinja las reglas de LFD, sólo bloqueará el tráfico al servicio en el que falle el inicio de sesión de esta IP en lugar de bloquear todo el tráfico.

LF_SSHD – establece el número de veces tras las cuales se bloquea la conexión SSH errónea.

CT_LIMIT – limita el número de conexiones desde una única dirección IP al servidor. Si el número de conexiones supera el valor establecido, la IP se bloquea temporalmente.

Paso 7 – Permitir y Bloquear direcciones IP

Bloquear y permitir direcciones IP es una de las capacidades más básicas de un cortafuegos. CSF te permite denegar (lista negra), permitir (lista blanca) o ignorar direcciones IP mediante los archivos de configuración csf.deny, csf.allow y csf.ignore.

Abre el archivo csf.deny para editarlo.

$ sudo nano /etc/csf/csf.deny

Las direcciones o rangos IP bloqueados deben añadirse en una línea. Por ejemplo, si quieres bloquear la dirección IP 1.2.3.4 así como el rango 2.3.*.*, añádelos de la siguiente manera.

1.2.3.4 2.3.0.0/16

Una vez hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Las direcciones IP permitidas deben configurarse utilizando el archivo csf.allow. Las direcciones IP permitidas se permiten aunque estén bloqueadas en el archivo csf.deny, por lo que debes tener cuidado con eso.

Abre el archivo csf.allow para editarlo.

$ sudo nano /etc/csf/csf.allow

Las direcciones IP deben añadirse del mismo modo que se añadieron en el archivo de bloqueo.

Las direcciones IP ignoradas se excluyen de los filtros del cortafuegos. Sólo se pueden bloquear si aparecen en el archivo csf.deny. Abre el archivo csf.ignore para editarlo.

$ sudo nano /etc/csf/csf.ignore

Una vez que hayas hecho todos los cambios necesarios, tienes que reiniciar el cortafuegos. Utiliza el siguiente comando para hacerlo.

$ sudo csf -r

Paso 8 – Protección contra ataques DDoS

Veamos cómo el CSF puede ayudar a proteger contra ataques de Denegación de Servicio Distribuidos (DDoS) implementando las siguientes configuraciones.

Protección contra inundaciones SYN

Se trata de un tipo de ataque DDoS en el que un atacante envía un gran número de paquetes SYN a un servidor. Para activar la protección contra este tipo de ataques, activa las siguientes configuraciones en el archivo /etc/csf/csf.conf.

SYNFLOOD = "1"
SYNFLOOD_RATE = "100/s"
SYNFLOOD_BURST = "150"

Esto activará la protección contra inundaciones SYN y configurará los límites de velocidad y ráfaga para los ataques entrantes. Estas opciones sólo deben activarse si estás sufriendo un ataque SYN, ya que ralentizará todas las nuevas conexiones procedentes de cualquier dirección IP.

Listas de bloqueo

CSF se integra con varias listas de bloqueo basadas en IP para impedir que direcciones IP maliciosas se conecten al servidor. CSF ya almacena la configuración de listas de bloqueo populares como Spamhaus, Project Honey Pot, BruteForceBlocker, Blocklist.de, Stop Forum Spam, etc. en el archivo /etc/csf/csf.blocklists. Abre el archivo para editarlo.

$ sudo nano /etc/csf/csf.blocklists

Descomenta las siguientes secciones para activar las Listas de Bloqueo de Spamhaus.

# Spamhaus Don't Route Or Peer List (DROP)
# Details: http://www.spamhaus.org/drop/
SPAMDROP|86400|0|http://www.spamhaus.org/drop/drop.txt

# Spamhaus IPv6 Don't Route Or Peer List (DROPv6)
# Details: http://www.spamhaus.org/drop/
SPAMDROPV6|86400|0|https://www.spamhaus.org/drop/dropv6.txt

# Spamhaus Extended DROP List (EDROP)
# Details: http://www.spamhaus.org/drop/
SPAMEDROP|86400|0|http://www.spamhaus.org/drop/edrop.txt

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida. También puedes añadir tu lista de bloqueo. El formato para incluir una nueva lista es el siguiente.

NAME|INTERVAL|MAX|URL

NOMBRE – es el nombre de la lista, con todos los caracteres en mayúsculas, sin espacios y con un máximo de 25 caracteres.

INTERVALO – intervalo de actualización para descargar la lista. Debe ser como mínimo de 3600 segundos.

MAX – número máximo de direcciones IP a utilizar de la lista. Un valor de 0 significa todas las direcciones IP.

URL – la URL desde la que descargar la lista.

Bloqueo a nivel de país

El LCR te permite bloquear el acceso desde determinados países. Puede ser útil cuando quieras restringir el acceso desde países conocidos por lanzar Ataques DDoS. Existen dos métodos para que CSF relacione las direcciones IP con los países. El método por defecto utiliza DB-IP, ipdeny.com e iptoasn.com como fuentes. Son gratuitos y no requieren una clave de licencia, pero pueden ser poco fiables. Si quieres un bloqueo preciso, necesitas una clave de licencia MaxMind. MaxMind también proporciona una licencia gratuita. Puedes utilizarlas. Una vez que tengas la clave de licencia, configura las dos opciones siguientes en el archivo /etc/csf/csf.conf.

MM_LICENSE_KEY = "XXXXXXXXXXX"
CC_SRC = "1"

Una vez configurado esto, utiliza la siguiente configuración para bloquear direcciones IP de Rusia.

CC_DENY = "RU"

Puedes utilizar la siguiente configuración para permitir conexiones sólo desde determinados países.

CC_ALLOW_FILTER = "IN,GB"

Esta configuración sólo permite conexiones desde India y el Reino Unido (RU). Guarda y cierra el archivo cuando hayas terminado.

Reinicia el cortafuegos cuando hayas terminado de configurarlo.

$ sudo csf -r

Hay otras formas de evitar los Ataques DDoS, como la Inundación de Puertos y el Límite de Conexión, que ya hemos comentado en el paso 6.

Paso 9 – Comandos CSF de uso común

Activa e inicia CSF.

$ sudo csf -e

Desactiva el CSF.

$ sudo csf -x

Inicia las reglas del cortafuegos.

$ sudo csf -s

Borrar/detener las reglas del cortafuegos.

$ sudo csf -f

Reinicia el cortafuegos.

$ sudo csf -r

Añade la dirección IP a la lista de prohibición temporal. (/var/lib/csf/csf.tempban)

$ sudo csf -td 1.2.3.4

Elimina la dirección IP de la lista de prohibiciones temporales.

$ sudo csf -tr 1.2.3.4

Elimina todas las direcciones IP de las entradas temporales.

$ sudo csf -tf

Añade la dirección IP a la lista de denegaciones.

$ sudo csf -d 1.2.3.4

Elimina la dirección IP de la lista de denegaciones.

$ sudo csf -dr 1.2.3.4

Elimina todas las direcciones IP de la lista de denegaciones.

$ sudo csf -dr

Permite una dirección IP.

$ sudo csf -a 1.2.3.4

Elimina una dirección IP de la lista de permitidas.

$ sudo csf -ar 1.2.3.4

Busca en las reglas iptables e ip6tables una dirección IP, un CIDR y un número de puerto.

$ sudo csf -g 1.2.3.4
$ sudo csf -g 80

Paso 10 – Habilitar la GUI de CSF

CSF viene con una interfaz basada en web para gestionar el cortafuegos. Está desactivada por defecto. Antes de habilitar la GUI, necesitamos instalar algunos módulos Perl más.

$ sudo dnf install perl-IO-Socket-SSL.noarch perl-Net-SSLeay perl-IO-Socket-INET6 perl-Socket6 -y

Abre el archivo de configuración de CSF.

$ sudo nano /etc/csf/csf.conf

Busca la línea UI = "0" y cambia su valor como se indica a continuación.

UI = "1"

Cambia el puerto en el que se puede acceder al panel web. CSF utiliza el puerto 6666 por defecto, pero el navegador Chrome lo bloquea porque lo considera un puerto no seguro. Por lo tanto, tenemos que cambiar su valor por otro. Elige cualquier puerto superior a 1024. Para nuestro tutorial, utilizaremos el puerto 1037.

UI_PORT = "1037"

Utiliza la siguiente variable para permitir que sólo determinadas direcciones IP se enlacen al panel web. Déjala en blanco para enlazar con todas las direcciones IP del servidor.

UI_IP = "1.2.3.4"

Configura las credenciales para el panel web.

UI_USER = "username"
UI_PASS = "password"

Por defecto, CSF sólo permite el acceso al panel web desde las direcciones IP que figuran en el archivo /etc/csf/ui/ui.allow. Si quieres que sea accesible desde todas las direcciones IP, establece la variable UI_ALLOW en 0.

UI_ALLOW = "0"

Una vez hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Del mismo modo, las direcciones IP prohibidas deben añadirse al archivo /etc/csf/ui/ui.ban.

El panel web CSF utiliza certificados autofirmados. También puedes utilizar para ello certificados SSL de Let’s Encrypt.

Paso 11 – Instalar y configurar Let’s Encrypt SSL

Necesitamos instalar Certbot para generar el certificado SSL. Para ello utilizaremos el instalador de paquetes Snapd. Como Rocky Linux no lo incluye, instala el instalador de Snapd. Necesita el repositorio EPEL (Extra Packages for Enterprise Linux) para funcionar. Pero como ya lo hemos instalado en el paso 2, podemos avanzar directamente.

Instala Snapd.

$ sudo dnf install -y snapd

Habilita e Inicia el servicio Snap.

$ sudo systemctl enable snapd --now

Instala el paquete principal de Snap, y asegúrate de que tu versión de Snapd está actualizada.

$ sudo snap install core && sudo snap refresh core

Crea los enlaces necesarios para que Snapd funcione.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Instala Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Comprueba si Certbot funciona correctamente.

$ certbot --version
certbot 2.7.4

Ejecuta el siguiente comando para generar un certificado SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d csf.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/csf.example.com de tu servidor.

Cambia el nombre de los antiguos certificados autofirmados.

$ sudo mv /etc/csf/ui/server.crt /etc/csf/ui/server.crt.old
$ sudo mv /etc/csf/ui/server.key /etc/csf/ui/server.key.old

Copia los certificados SSL generados en el directorio /etc/csf/ui.

$ sudo cp /etc/letsencrypt/live/csf.example.com/fullchain.pem /etc/csf/ui/server.crt
$ sudo cp /etc/letsencrypt/live/csf.example.com/privkey.pem /etc/csf/ui/server.key

Reinicia los servicios CSF y LFD.

$ sudo systemctl restart csf lfd

Hay una cosa más que tenemos que configurar. El certificado SSL se renovará automáticamente cada 90 días, lo que significa que tendrás que copiar los certificados manualmente. Sin embargo, podemos automatizarlo.

Crea el archivo /etc/csf/certcopy.sh para copiar los certificados después de cada renovación y ábrelo para editarlo.

$ sudo nano /etc/csf/certcopy.sh

Pega en él el siguiente código.

#!/bin/sh
cp -f /etc/letsencrypt/live/csf.example.com/fullchain.pem /etc/csf/ui/server.crt
cp -f /etc/letsencrypt/live/csf.example.com/privkey.pem /etc/csf/ui/server.key

Una vez terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida. Haz que el archivo sea ejecutable.

$ sudo chmod +x /etc/csf/certcopy.sh

Abre el archivo /etc/letsencrypt/renewal/csf.example.com.conf para editarlo.

$ sudo nano /etc/letsencrypt/renewal/csf.example.com.conf

Añade la siguiente línea al final.

post_hook = /etc/csf/certcopy.sh

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite. La opción post_hook ejecuta el script certcopy.sh después de cada renovación, eliminando la necesidad de copiar los certificados manualmente.

Comprueba el servicio programador de renovaciones de Certbot.

$ sudo systemctl list-timers

Encontrarás snap.certbot.renew.service como uno de los servicios programados para ejecutarse.

NEXT                        LEFT         LAST                        PASSED     UNIT                      ACTIVATES     
---------------------------------------------------------------------------------------------------------------------------               
Wed 2023-12-06 07:23:57 UTC 18min left Wed 2023-12-06 06:04:46 UTC 1h 0min ago dnf-makecache.timer          dnf-makecache.service
Wed 2023-12-06 07:24:15 UTC 40min left Wed 2023-12-06 00:00:01 UTC 6h ago      logrotate.timer              logrotate.service
Wed 2023-12-06 18:39:00 UTC 10h left   Wed 2023-12-06 03:25:07 UTC 2h 4min ago snap.certbot.renew.timer     snap.certbot.renew.service

Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente. Los certificados se copiarán y podrás comprobarlos verificando el listado del directorio /etc/csf/ui.

$ sudo ls /etc/csf/ui -al
drw-------. 3 root root  130 Dec  6 05:57 .
drw-------. 4 root root 4096 Dec  6 06:09 ..
drw-------. 3 root root 4096 Dec  6 00:06 images
-rw-r--r--. 1 root root 5242 Dec  6 06:09 server.crt
-rw-------. 1 root root 1220 Jun 17  2020 server.crt.old
-rw-------. 1 root root  241 Dec  6 06:09 server.key
-rw-------. 1 root root 1704 Jun 17  2020 server.key.old
-rw-------. 1 root root   15 Dec  5 23:34 ui.allow
-rw-------. 1 root root    0 Feb  1  2013 ui.ban

Paso 12 – Accede al Panel Web de CSF

Visita la URL https://csf.example.com:1037 y te aparecerá la siguiente página de acceso.

Página de acceso al LCR

Introduce tus credenciales y pulsa la tecla Intro para iniciar sesión y obtendrás la siguiente página.

Página de inicio del Panel Web de la CSF

Viene incluso con una vista móvil a la que puedes cambiar utilizando el botón Vista móvil.

Vista móvil del LCR

El panel web te permite configurar todos los ajustes del cortafuegos. Este panel web se integra bien con otros paneles de control.

Paso 13 – Desinstalar CSF

Si por alguna razón quieres eliminar CSF, puedes ejecutar el siguiente comando para ejecutar el script de desinstalación.

$ sudo sh /etc/csf/uninstall.sh

Habilita e inicia el cortafuegos Firewalld.

$ sudo systemctl enable firewalld --now

Conclusión

Con esto concluye el tutorial sobre la instalación y configuración del Config Server Firewall (CSF) en un servidor Rocky Linux 9. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...