Cómo configurar y administrar el firewall en CentOS 8

27 feb 2021 10 min di lettura
Cómo configurar y administrar el firewall en CentOS 8
Indice dei contenuti

Introducción

Un firewall es un método para monitorear y filtrar el tráfico de red entrante y saliente. Funciona mediante la definición de un conjunto de reglas de seguridad que determinan si permitir o bloquear tráfico específico. Un firewall configurado correctamente es uno de los aspectos más importantes de la seguridad general del sistema.

CentOS 8 viene con un demonio de firewall llamado firewalld. Es una solución completa con una interfaz D-Bus que le permite administrar dinámicamente el firewall del sistema.

En este tutorial, hablaremos sobre cómo configurar y administrar el firewall en CentOS 8. También explicaremos los conceptos básicos de FirewallD.

Si su intención es configurar y administrar el firewall en un servidor remoto, continúe leyendo; de lo contrario, si desea configurar y administrar el firewall en su computadora local, omita el primer párrafo "Conectarse al servidor" y lea el siguiente.

Conexión al servidor

Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:

ssh root@IP_DEL_SERVER

A continuación, deberá ingresar la contraseña del usuario root.

Si no está utilizando el usuario root, puede iniciar sesión con otro nombre de usuario utilizando el mismo comando, luego cambie root a su nombre de usuario:

ssh nome_utente@IP_DEL_SERVER

Luego se le pedirá que ingrese su contraseña de usuario.

El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:

ssh nome_utente@IP_DEL_SERVER -p PORTA

Prerrequisitos

Para configurar el servicio de firewall, debe iniciar sesión como root o usuario con privilegios de sudo y tener el Firewall instalado en CentOS 8.

Conceptos básicos de Firewalld

firewalld utiliza los conceptos de zonas y servicios. Según las zonas y los servicios que configurará, puede controlar qué tráfico está permitido o bloqueado hacia y desde el sistema.

Firewalld se puede configurar y administrar mediante la utilidad de línea de comandos firewall-cmd

En CentOS 8, iptables se reemplaza por nftables como el servidor de seguridad predeterminado para el demonio firewalld.

Zonas de Firewalld

Las zonas son conjuntos de reglas predefinidos que especifican el nivel de fiabilidad de las redes a las que está conectada la computadora. Las interfaces de red y las fuentes se pueden asignar a una zona.

Las siguientes son las zonas proporcionadas por FirewallD ordenadas por el nivel de confianza de la zona de no confiable a confiable:

  • descartar: todas las conexiones entrantes se descartan sin ninguna notificación. Solo se permiten conexiones salientes.
  • block: Todas las conexiones entrantes se rechazan con un mensaje icmp-host-prohibited IPv4 e icmp6-adm-prohibited para IPv6n. Solo se permiten conexiones salientes.
  • público: para uso en áreas públicas poco confiables. No confía en otros equipos de la red, pero puede permitir determinadas conexiones entrantes.
  • Externo: para uso en redes externas con enmascaramiento NAT habilitado cuando el sistema actúa como puerta de enlace o enrutador. Solo se permiten las conexiones entrantes seleccionadas.
  • interno: para uso en redes internas cuando el sistema actúa como puerta de enlace o enrutador. Otros sistemas en la red son generalmente confiables. Solo se permiten las conexiones entrantes seleccionadas.
  • dmz: utilizado para equipos ubicados en la zona desmilitarizada que tienen acceso limitado al resto de la red. Solo se permiten las conexiones entrantes seleccionadas.
  • trabajo: utilizado para máquinas de trabajo. Otras computadoras en la red son generalmente confiables. Solo se permiten las conexiones entrantes seleccionadas.
  • hogar: utilizado para máquinas domésticas. Otras computadoras en la red son generalmente confiables. Solo se permiten las conexiones entrantes seleccionadas.
  • confiable: se aceptan todas las conexiones de red. Confíe en todas las computadoras de la red.

Servicios de cortafuegos

Los servicios de firewall son reglas predefinidas que se aplican dentro de una zona y definen la configuración requerida para permitir el tráfico entrante para un servicio específico. Los servicios le permiten realizar fácilmente varias tareas en un solo paso.

Por ejemplo, el servicio puede contener definiciones sobre la apertura de puertos, el reenvío de tráfico y más.

Tiempo de ejecución de Firewalld y configuración permanente

Firewalld usa dos conjuntos de configuración separados, tiempo de ejecución y configuración persistente.

La configuración en tiempo de ejecución es la configuración en ejecución real y no persiste al reiniciar. Cuando se inicia el demonio firewalld, carga la configuración permanente, que se convierte en la configuración en tiempo de ejecución.

De forma predeterminada, cuando realiza cambios en la configuración de Firewalld mediante la firewall-cmd, los cambios se aplican a la configuración del tiempo de ejecución. Para que los cambios sean permanentes, agregue la --permanent al comando.

Para aplicar los cambios en ambos conjuntos de configuración, puede utilizar uno de los dos métodos siguientes:

Cambie la configuración del tiempo de ejecución y hágala permanente:

sudo firewall-cmd <options>
sudo firewall-cmd --runtime-to-permanent

Cambie la configuración permanente y vuelva a cargar el demonio firewalld:

sudo firewall-cmd --permanent <options>
sudo firewall-cmd --reload

Habilitación de FirewallD

En CentOS 8, firewalld está instalado y habilitado de forma predeterminada. Si por alguna razón no está instalado en su sistema, puede instalar e iniciar el demonio escribiendo:

sudo dnf install firewalld
sudo systemctl enable firewalld --now

Puede verificar el estado del servicio de firewall con:

sudo firewall-cmd --state

Si el firewall está habilitado, el comando debería imprimirse running. De lo contrario, verá que not running.

Zonas de Firewalld

Si no se cambia, la zona predeterminada se establece en public y todas las interfaces de red se asignan a esta zona.

La zona predeterminada es la que se usa para cualquier cosa que no esté asignada explícitamente a otra zona.

Puede ver la zona predeterminada escribiendo:

sudo firewall-cmd --get-default-zone
public

Para obtener una lista de todas las zonas disponibles, escriba:

sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Para ver las zonas activas y las interfaces de red asignadas a ellas:

sudo firewall-cmd --get-active-zones

El siguiente resultado muestra que las eth0 y eth1 están asignadas a la zona public

public
 interfaces: eth0 eth1

Puede imprimir los ajustes de configuración de la zona con:

sudo firewall-cmd --zone=public --list-all
public (active)
 target: default
 icmp-block-inversion: no
 interfaces: eth0 eth1
 sources:
 services: ssh dhcpv6-client
 ports:
 protocols:
 masquerade: no
 forward-ports:
 source-ports:
 icmp-blocks:
 rich rules:

De la salida anterior, podemos ver que la zona pública está activa y usa el destino predeterminado, que es REJECT. El resultado también muestra que la zona es utilizada por las eth0 y eth1 y permite el tráfico de clientes DHCP y SSH.

Si desea verificar las configuraciones de todas las zonas disponibles, escriba:

sudo firewall-cmd --list-all-zones

El comando imprime una lista enorme con la configuración de todas las zonas disponibles.

Cambiar el objetivo de la zona

El destino define el comportamiento predeterminado de la zona para el tráfico entrante no especificado. Se puede configurar en una de las siguientes opciones: default, ACCEPT, REJECT y DROP.

Para establecer el objetivo de la zona, especifique la zona con la --zone y el objetivo con la opción --set-target

Por ejemplo, para cambiar el public DROP:

sudo firewall-cmd --zone=public --permanent --set-target=DROP

Asignar una interfaz a una zona diferente

Puede crear conjuntos de reglas específicos para diferentes zonas y asignarles diferentes interfaces. Esto es especialmente útil cuando tiene varias interfaces en su computadora.

Para asignar una interfaz a una zona diferente, especifique la zona con la --zone y la interfaz con la opción --change-interface

Por ejemplo, el siguiente comando asigna la eth1 a la zona de work

sudo firewall-cmd --zone=work --change-interface=eth1

Verifique los cambios escribiendo:

sudo firewall-cmd --get-active-zones
work
 interfaces: eth1
 public
 interfaces: eth0

Cambiar la zona predeterminada

Para cambiar la zona predeterminada, use la --set-default-zone seguida del nombre de la zona que desea establecer como predeterminada.

Por ejemplo, para cambiar la zona predeterminada a home, debe ejecutar el siguiente comando:

sudo firewall-cmd --set-default-zone=home

Verifique los cambios con:

sudo firewall-cmd --get-default-zone
home

Creación de nuevas zonas

Firewalld también te permite crear tus propias zonas. Esto es útil cuando desea crear reglas por aplicación.

En el siguiente ejemplo crearemos una nueva zona llamada memcached, 11211 puerto 11211 y permitiremos el acceso solo desde la dirección IP 192.168.100.30:

Crea la zona:

sudo firewall-cmd --new-zone=memcached --permanent

Agregue las reglas a la zona:

sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanent
sudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanent
sudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent

Vuelva a cargar el demonio firewalld para activar los cambios:

sudo firewall-cmd --reload

Servicios de Firewalld

Con firewalld puede permitir el tráfico para puertos y /o fuentes específicos según reglas predefinidas llamadas servicios.

Para obtener una lista de todos los servicios predefinidos disponibles, escriba:

sudo firewall-cmd --get-services

Puede encontrar más información sobre cada servicio abriendo el archivo.xml asociado dentro del /usr/lib/firewalld/services. Por ejemplo, el servicio HTTP se define así:

sudo vi /usr/lib/firewalld/services/http.xml
<?xml version="1.0" encoding="utf-8"?>
 <service>
 <short>WWW (HTTP)</short>
 <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
 <port protocol="tcp" port="80"/>
 </service>

Para permitir el tráfico HTTP entrante (puerto 80) para interfaces en el área pública, solo para la sesión actual (configuración de tiempo de ejecución) escriba:

sudo firewall-cmd --zone=public --add-service=http

Si está editando la zona predeterminada, puede --zone la opción --zone.

Para verificar que el servicio se agregó correctamente, use la opción --list-services

sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http

Para mantener el puerto 80 abierto después de un reinicio, vuelva a emitir el mismo comando con la --permanent o ejecute:

sudo firewall-cmd --runtime-to-permanent

Use --list-services junto con la --permanent para verificar los cambios:

sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http

La sintaxis para eliminar el servicio es la misma que para agregar uno. Simplemente use --remove-service lugar de la --add-service:

sudo firewall-cmd --zone=public --remove-service=http --permanent

El comando anterior elimina el http de la configuración permanente de la zona pública.

Crear un nuevo servicio de firewall D.

Como ya hemos mencionado, los servicios predeterminados se almacenan en el /usr/lib/firewalld/services. La forma más fácil de crear un nuevo servicio es copiar un archivo de servicio existente al directorio /etc/firewalld/services, que es la ubicación de los servicios creados por el usuario, y cambiar la configuración del archivo.

Por ejemplo, para crear una definición de servicio para Plex Media Server, puede usar el archivo de servicio SSH:

sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml

Abra el plexmediaserver.xml y cambie el nombre corto y la descripción del servicio dentro de las etiquetas <short> y <description> La etiqueta más importante que debe cambiar es la port, que define el número de puerto y el protocolo que desea abrir.

En el siguiente ejemplo, estamos abriendo puertos 1900 y TCP 32400

sudo vi /etc/firewalld/services/plexmediaserver.xml
<?xml version="1.0" encoding="utf-8"?>
 <service version="1.0">
 <short>plexmediaserver</short>
 <description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description>
 <port protocol="udp" port="1900"/>
 <port protocol="tcp" port="32400"/>
 </service>

Guarde el archivo y vuelva a cargar el servicio FirewallD:

sudo firewall-cmd --reload

Ahora puede utilizar el plexmediaserver en sus áreas como cualquier otro servicio.

Abrir puertos e IP de origen

Firewalld también le permite habilitar rápidamente todo el tráfico desde una dirección IP confiable o en un puerto específico sin crear una definición de servicio.

Abrir una IP de origen

Para permitir todo el tráfico entrante desde una dirección IP (o rango) específico, especifique la zona con la --zone y la IP de origen con la opción --add-source

Por ejemplo, para permitir todo el tráfico entrante de 192.168.1.10 en la public, ejecute:

sudo firewall-cmd --zone=public --add-source=192.168.1.10

Haga que la nueva regla sea persistente:

sudo firewall-cmd --runtime-to-permanent

Verifique los cambios usando el siguiente comando:

sudo firewall-cmd --zone=public --list-sources
192.168.1.10

La sintaxis para eliminar una IP de origen es la misma que para agregar una. Simplemente use --remove-source lugar de la opción --add-source

sudo firewall-cmd --zone=public --remove-source=192.168.1.10

Abriendo una puerta de origen

Para permitir todo el tráfico entrante en un puerto determinado, especifique la zona con la --zone y el puerto y el protocolo con la opción --add-port

Por ejemplo, para abrir el puerto 8080 en el área pública para la sesión actual que ejecutó:

sudo firewall-cmd --zone=public --add-port=8080/tcp

El protocolo puede ser tcp, udp, sctp o dccp.

Verifique los cambios:

sudo firewall-cmd --zone=public --list-ports
8080

Para mantener el puerto abierto después del reinicio, agregue la regla a la configuración persistente ejecutando el mismo comando usando el --permanent o ejecutando:

sudo firewall-cmd --runtime-to-permanent

La sintaxis para eliminar un puerto es la misma que para agregar un puerto. Simplemente use --remove-port lugar de la opción --add-port

sudo firewall-cmd --zone=public --remove-port=8080/tcp

Reenvío de puertos

Para reenviar el tráfico de un puerto a otro puerto, primero habilite el enmascaramiento para la zona deseada usando la opción --add-masquerade Por ejemplo, para habilitar el enmascaramiento de la external, escriba:

sudo firewall-cmd --zone=external --add-masquerade

Reenviar el tráfico de un puerto a otro en la dirección IP

En el siguiente ejemplo, estamos reenviando el tráfico del puerto 80 al puerto 8080 en el mismo servidor:

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080

Reenviar el tráfico a otra dirección IP

En el siguiente ejemplo, estamos reenviando el tráfico del puerto 80 al puerto 80 en un servidor con IP 10.10.10.2:

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2

Reenviar el tráfico a otro servidor en un puerto diferente

En el siguiente ejemplo, estamos reenviando tráfico desde el puerto 80 al puerto 8080 en un servidor con IP 10.10.10.2:

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2

Para mantener la regla de reenvío, use:

sudo firewall-cmd --runtime-to-permanent

Conclusión

Ha aprendido a configurar y administrar el servicio firewalld en su sistema CentOS 8.

Asegúrese de permitir todas las conexiones entrantes necesarias para que el sistema funcione correctamente, mientras limita todas las conexiones innecesarias.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.