Cómo instalar CSF (Config Server Firewall) en Debian 12

CSF o Config Server Firewall es un cortafuegos de inspección de paquetes con seguimiento de estado (SPI) basado en IPtables y Perl. Proporciona un proceso demonio que supervisará tus servicios para detectar fallos de autenticación y también proporciona integración con la interfaz de usuario web para la gestión de servidores basada en web, como Webmin, cPanel y DirectAdmin.

En este tutorial, te guiaremos a través del proceso de instalación de CSF (Config Server Firewall) en el servidor Debian 12. También aprenderás la configuración básica de CSF, el bloqueo de direcciones IP mediante dos métodos diferentes y la configuración de la interfaz web de CSF para facilitar la gestión y la supervisión.

Requisitos previos

Para empezar con este tutorial, asegúrate de que tienes lo siguiente:

  • Un servidor Debian 12.
  • Un usuario no root con privilegios de administrador.

Preparación del sistema

Antes de instalar CSF, debes asegurarte de que las dependencias están instaladas. Esto incluye paquetes como Perl e iptables. Además, si tienes otro cortafuegos en ejecución, como UFW (Uncomplicated Firewall), debes desactivarlo.

Para empezar, ejecuta el siguiente comando para actualizar tu repositorio Debian.

sudo apt update

actualizando repo

Una vez actualizado el repositorio, instala las siguientes dependencias para CSF utilizando el siguiente comando.

sudo apt install libio-socket-inet6-perl libsocket6-perl sendmail dnsutils unzip libio-socket-ssl-perl libcrypt-ssleay-perl git perl iptables libnet-libidn-perl libwww-perl liblwp-protocol-https-perl libgd-graph-perl

Escribe Y y pulsa ENTER para continuar.

instalar dependencias

Por último, debes desactivar UFW si lo tienes en tu servidor Debian. CSF utiliza por defecto iptables como cortafuegos y filtro de paquetes.

sudo ufw disable

Descarga e instalación de CSF

En la siguiente sección, descargarás e instalarás CSF (Config Server Firewall) manualmente desde la fuente. Empecemos.

Descarga el código fuente de CSF utilizando el siguiente comando wget. Verás el archivo csf.tgz.

wget http://download.configserver.com/csf.tgz

Ahora extrae el archivo csf.tgz utilizando el comando tar que aparece a continuación. El código fuente del LCR estará disponible en el directorio csf.

sudo tar -xvzf csf.tgz

A continuación, dirígete al directorio csf y ejecuta el script install.sh para iniciar la instalación.

cd csf; sh install.sh

Cuando se inicie la instalación, deberías obtener lo siguiente:

Proceso de construcción del MCA

Cuando finalice el proceso, deberías obtener la salida «Instalación completada».

instalación finalizada

Ahora que CSF está instalado, verifícalo utilizando el siguiente comando.

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

Asegúrate de que la salida es correcta en cada prueba de función.

prueba de características OK

Por último, ejecuta el siguiente comando para verificar la ubicación y la versión del binario de CSF.

which csf
csf -v

En la siguiente salida, puedes ver que CSF v14. 20 está instalado en /usr/sbin/csf.

comprobar versión csf

Configurar CSF

Después de haber instalado CSF, aprenderás algunas configuraciones básicas de CSF (Config Server Firewall). El directorio principal de configuración de CSF es el directorio /etc/csf, donde encontrarás el archivo principal de configuración de CSF csf.conf.

Utiliza el siguiente comando del editor nano para abrir el archivo de configuración del CSF /etc/csf/csf.conf.

sudo nano /etc/csf/csf.conf

Permitir el tráfico a través de CSF

Busca las opciones TCP_* y UDP_* y añade tus 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»

permitir la entrada y salida de tráfico

Opciones detalladas:

  • TCP_IN: permitir el tráfico entrante a los puertos TCP.
  • TCP_OUT: permitir el tráfico saliente a puertos TCP específicos.
  • UDP_IN: permite el tráfico entrante a puertos UDP.
  • UDP_OUT: permite el tráfico saliente a puertos UDP específicos.

Permitir/Denegar solicitudes Ping o ICMP

Si realmente necesitas desactivar Ping o ICMP ‘IN y OUT’, utiliza las siguientes opciones. El ‘ICMP_IN = 1’ significa que se permitirá el ping, y el ‘ICMP_OUT = 1’ significa que el servidor puede hacer ping a otra red.

# Allow incoming PING. Disabling PING will likely break external uptime
# monitoring
ICMP_IN = "1"
...
# Allow outgoing PING
#
# Unless there is a specific reason, this option should NOT be disabled as it
# could break OS functionality
ICMP_OUT = "1"

permitir ping

Protección Synflood

HABILITA esta opciónSÓLO cuando sea necesario, por ejemplo contra ataques DOS a tu servidor.

###############################################################################
# SECTION:Port Flood Settings
###############################################################################
# Enable SYN Flood Protection. This option configures iptables to offer some
# protection from tcp SYN packet DOS attempts. 
...
SYNFLOOD = "0"
SYNFLOOD_RATE = "100/s"
SYNFLOOD_BURST = "150"

protección contra inundaciones

Limitar las conexiones simultáneas

A continuación, utiliza la opción ‘CONNLIMIT’ para limitar las conexiones concurrentes para puertos específicos. El formato es«PUERTO;LÍMITE«, así que, por ejemplo, la configuración«22;5» limitará el puerto SSH a sólo 5 conexiones concurrentes.

# Connection Limit Protection. This option configures iptables to offer more
# protection from DOS attacks against specific ports. It can also be used as a
# way to simply limit resource usage by IP address to specific server services.
# Note: Run /etc/csf/csftest.pl to check whether this option will function on
# this server
CONNLIMIT = "22;5,21;10"

límite de conexión

Desactiva el Modo PRUEBA y Restringe el Acceso Syslog

Ahora que ya lo has configurado todo y has añadido tus puertos, cambia el modoPRUEBA’ a‘1‘ y restringe el acceso a los sockets rsyslog con‘RESTRICT_SYSLOG= «3»‘.

# lfd will not start while this is enabled
TESTING = "0"
...
# 0 = Allow those options listed above to be used and configured
# 1 = Disable all the options listed above and prevent them from being used
# 2 = Disable only alerts about this feature and do nothing else
# 3 = Restrict syslog/rsyslog access to RESTRICT_SYSLOG_GROUP ** RECOMMENDED **
RESTRICT_SYSLOG = "3"

Cuando todo esté terminado, guarda el archivo y sal del editor.

desactivar el modo de prueba

Probar e iniciar el servicio CSF

Ahora ejecuta el siguiente comando csf para verificar tu configuración. Si la configuración de CSF es correcta, verás la salida de CSF. Por el contrario, verás el error detallado cuando tu configuración sea incorrecta.

csf -v

A continuación, ejecuta el siguiente comando systemctl para iniciar el servicio csf y lfd.

sudo systemctl start csf lfd

verificar la configuración

Una vez que se ejecute el servicio csf, te desconectarás automáticamente del servidor. Puedes volver a conectarte al servidor y, a continuación, verificar tanto el servicio csf como el servicio lfd utilizando el comando que aparece a continuación.

sudo systemctl status csf lfd

Puedes ver que el servicio csf se está ejecutando.

csf en marcha

También puedes ver que el servicio lfd se está ejecutando.

lfd en marcha

Bloqueo mediante CSF

Llegados a este punto, ya has aprendido la configuración básica del CSF (Config Server Firewall). Ahora echemos un vistazo al bloqueo de direcciones IP mediante CSF.

Bloquear direcciones IP mediante listas de BLOQUEO IP

Abre la configuración por defecto de las listas de BLOQUEO IP /etc/csf/csf.blocklists utilizando el comando editor nano que aparece a continuación.

sudo nano /etc/csf/csf.blocklists

Descomenta las siguientes líneas para bloquear direcciones IP de la base de datos 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

Guarda el archivo y sal del editor cuando hayas terminado.

listas de bloques csf

A continuación se detallan algunas opciones:

  • SPAMDROP: nombre del bloque que se utilizará como nombre del chan de iptables. Utiliza sólo MAYÚSCULAS con un máximo de 25 caracteres.
  • 86400: intervalo de actualización para descargar y renovar las listas de direcciones IP del bloque.
  • MAX: direcciones IP máximas que se utilizarán de la lista. Un valor de 0, significa que se incluirán todas las IPs.
  • URL: la URL de descarga de las direcciones IP de las listas de bloqueo.

Bloquear direcciones IP mediante GeoIP

Otro método para bloquear una dirección IP es mediante GeoIP, que te permite bloquear el tráfico entrante de un país concreto.

Utiliza el siguiente comando del editor nano para abrir la configuración del LCR‘/etc/csf/csf.conf‘.

sudo nano /etc/csf/csf.conf

Busca los parámetros CC_DENY y CC_ALLOW para configurar el bloqueo por país mediante GeoIP.

# Each option is a comma-separated list of CC's, e.g. "US,GB,DE"
CC_DENY = "RU,CN"
CC_ALLOW = "US,GB,DE,NL,SG"

Por defecto, CSF utiliza la GeoIP de la base de datos db-ip, ipdeny e iptoasn. Pero también puedes cambiarlo mediante la base de datos GeoIP de MaxMind. Para utilizar la base de datos MaxMind, cambia el‘CC_SRC‘ a‘1‘, e introduce tu clave de licencia MaxMind en la opción‘MM_LICENSE_KEY‘.

# MaxMind License Key:
MM_LICENSE_KEY = ""
...

# Set the following to your preferred source:
#
# "1" - MaxMind
# "2" - db-ip, ipdeny, iptoasn
#
# The default is "2" on new installations of csf, or set to "1" to use the
# MaxMind databases after obtaining a license key
CC_SRC = "1"

Guarda el archivo y sal del editor cuando hayas terminado.

Ahora, ejecuta el siguiente comando para verificar la configuración del LCR. Si no se produce ningún error, deberías obtener la versión del LCR.

sudo csf -v

A continuación, reinicia los servicios csf y lfd con el siguiente comando.

sudo csf -ra

Deberías ver una salida como la siguiente:

verificar csf y reiniciar

Para asegurarte de que tanto csf como lfs se están ejecutando, utiliza el siguiente comando para verificar ambos servicios.

sudo systemctl status csf lfd

Habilitar la interfaz web de CSF

En la siguiente sección, aprenderás a habilitar la interfaz web de CSF para la supervisión a través de un navegador web.

Abre la configuración de CSF utilizando el siguiente editor nano.

sudo nano /etc/csf/csf.conf

Cambia la opción«UI» a«1» y habilita CSF Web UI. A continuación, ajusta UI_PORT, UI_IP, UI_USER y UI_PASS con tus datos.

#
# 1 to enable, 0 to disable
UI = "1"
...

# Do NOT enable access to this port in TCP_IN, instead only allow trusted IPs
# to the port using Advanced Allow Filters (see readme.txt)
UI_PORT = "1048"

...

# If the server is configured for IPv6 but the IP to bind to is IPv4, then the
# IP address MUST use the IPv6 representation. For example, 1.2.3.4 must use
# ::ffff:1.2.3.4
#
# Leave blank to bind to all IP addresses on the server
UI_IP = "127.0.0.1"

...

# This should be a secure, hard to guess username
#
# This must be changed from the default
UI_USER = "alice"
...
# numbers and non-alphanumeric characters
#
# This must be changed from the default
UI_PASS = "passw0rd"

Guarda el archivo y sal del editor cuando hayas terminado.

Ahora busca tu dirección IP pública utilizando el comando siguiente.

curl https://ipinfo.io/

Añade tu dirección IP a las configuraciones‘/etc/csf/csf.allow‘ y ‘/etc/csf/ui/ui.allow‘. Esto pondrá en la lista blanca tu dirección IP pública y te permitirá acceder a la interfaz web de CSF y al servidor.

# single ip
192.168.5.1

# subnet
192.168.5.0/24

Después, ejecuta el siguiente comando para verificar la configuración de CSF y reinicia los servicios csf y lfd.

sudo csf -v
sudo csf -ra

A continuación, verifica la lista de direcciones IP incluidas en la lista blanca de CSF mediante el siguiente comando. Busca la cadena iptables ALLOWIN y ALLOWOUT, y deberías ver las direcciones IP de tu lista blanca.

sudo csf -l

verificar cadena permitir en lista blanca

Ahora abre tu navegador web y visita la dirección IP del servidor seguida del puerto de la interfaz web de CSF (es decir: https://192.168.5.15:1048). Si la configuración es correcta, deberías ver la página de inicio de sesión de CSF.

Introduce tu usuario y contraseña de administrador y pulsa INTRO.

acceso csf

Deberías ver el panel de control de CSF como el siguiente:

cuadro de mandos csf

Conclusión

¡Enhorabuena! Ya has instalado correctamente CSF (Config Server Firewall) en el servidor Debian 12. También has aprendido el uso básico de CSF para permitir el tráfico a un puerto específico, deshabilitar ping o ICMP, y configurar el límite de conexión para los puertos.

Además, también has aprendido a bloquear direcciones IP con CSF utilizando Listas de BLOQUEO IP y GeoIP. Además, has habilitado la Interfaz Web de CSF para facilitar la gestión y supervisión de tu servidor CSF.

También te podría gustar...