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.
Introduce tus credenciales y pulsa la tecla Intro para iniciar sesión y obtendrás la siguiente página.
Viene incluso con una vista móvil a la que puedes cambiar utilizando el botón Vista móvil.
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.