Cómo instalar y configurar el firewall FirewallD en Centos 8 Linux

27 feb 2021 9 min di lettura
Cómo instalar y configurar el firewall FirewallD en Centos 8 Linux
Indice dei contenuti

Introducción

Un firewall configurado correctamente es uno de los aspectos más importantes de la seguridad general del sistema.

FirewallD es una solución de firewall completa que administra las reglas de iptables del sistema y proporciona una interfaz D-Bus para operar en ellas. A partir de CentOS 7, FirewallD reemplaza iptables como la herramienta de administración de firewall predeterminada.

En este tutorial, le mostramos cómo configurar un firewall con FirewallD en su sistema CentOS 8 y explicamos los conceptos básicos de FirewallD.

Prerrequisitos

Antes de comenzar este tutorial, asegúrese de haber iniciado sesión en el servidor con una cuenta de usuario con privilegios de sudo o con el usuario root. La mejor práctica es ejecutar comandos administrativos como usuario sudo en lugar de root. Si no tiene un usuario sudo en su sistema CentOS, puede crear uno siguiendo estas instrucciones.

Si desea instalar y configurar FirewallD en un servidor remoto, continúe leyendo, de lo contrario, omita el primer párrafo "Conexión 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

Conceptos básicos de Firewalld

FirewallD usa los conceptos de zonas y servicios, en lugar de cadenas y reglas de iptables. Según las zonas y los servicios que configurará, puede controlar qué tráfico está permitido o no hacia y desde el sistema.

FirewallD se puede configurar y administrar mediante la utilidad de firewall-cmd

Zonas de Firewalld

Las zonas son conjuntos de reglas predefinidos que especifican qué tráfico debe permitirse en función del nivel de confianza en 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 niegan 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 no confiables. No confía en otros equipos de la red, pero puede permitir determinadas conexiones entrantes.
  • externo: para usar en redes externas con el 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.

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 es persistente al reiniciar. Cuando se inicia el servicio Firewalld, carga la configuración permanente, que se convierte en la configuración del 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, debe usar la opción --permanent

Instalar y habilitar FirewallD

Firewalld está instalado de forma predeterminada en CentOS 8, pero si no está instalado en su sistema, puede instalar el paquete escribiendo:

sudo dnf install firewalld

El servicio Firewalld está deshabilitado de forma predeterminada. Puede verificar el estado del firewall con:

sudo firewall-cmd --state

Si acaba de instalar o nunca lo ha activado antes, el comando imprimirá not running. De lo contrario, verá running.

Para iniciar el servicio FirewallD y habilitarlo al inicio, escriba:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Trabajar con zonas de Firewalld

Después de habilitar el servicio FirewallD por primera vez, la public se establece como la zona predeterminada. 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

De forma predeterminada, a todas las interfaces de red se les asigna la zona predeterminada. Para comprobar qué zonas utiliza su tipo de interfaz de red:

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

El resultado anterior nos dice que las eth0 y eth1 están asignadas a la zona pública.

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:

En el resultado anterior, podemos ver que la zona pública está activa y configurada como predeterminada, utilizada por las interfaces eth0 y eth1 Además, se permiten conexiones relacionadas con el cliente 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 la zona de una interfaz

Usted puede cambiar fácilmente la zona de interfaz mediante la --zone opción en combinación con el --change-interface opción. El siguiente comando asignará la eth1 al espacio de trabajo:

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 casa, debe ejecutar el siguiente comando:

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

Verifique los cambios con:

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

Abrir un puerto o servicio

Con FirewallD puede permitir el tráfico para puertos específicos según reglas predefinidas llamadas servicios.

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

sudo firewall-cmd --get-services
....
 ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex plexmediaserver pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client....

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í:

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

Si desea mantener el puerto 80 abierto después de reiniciar, debe escribir el mismo comando nuevamente, pero esta vez con la opción --permanent

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

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 un servicio. Simplemente use --remove-service lugar de la opción --add-service

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

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

¿Qué sucede si ejecuto una aplicación como Plex Media Server para la que no hay disponible un servicio adecuado?

En situaciones como estas, tiene dos opciones. Puede abrir los puertos apropiados o definir un nuevo servicio de FirewallD.

Por ejemplo, el servidor Plex está escuchando en el puerto 32400 y usa TCP, para abrir el puerto en el área pública para la sesión actual use la --add-port=:

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

Los protocolos pueden ser tcp o udp.

Para verificar que el puerto se agregó correctamente, use la opción --list-ports

sudo firewall-cmd --zone=public --list-ports
32400/tcp

Para mantener el puerto 32400 abierto después del reinicio, agregue la regla a la configuración persistente ejecutando el mismo comando con la opción --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=32400/tcp

Cree un nuevo servicio de FirewallD

Como ya hemos mencionado, los servicios predeterminados se almacenan en el /usr/lib/firewalld/services. La forma más sencilla de crear un nuevo servicio es copiar un archivo de servicio existente en el /etc/firewalld/services, que es la ruta a 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, podemos 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 los puertos 1900 UDP y 32400 TCP.

sudo vi /etc/firewalld/services/plexmediaserver.xml

Edite el archivo de esta manera:

<?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 cierre el archivo.

Vuelva a cargar el servicio FirewallD:

sudo firewall-cmd --reload

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

Reenvío de puertos con Firewalld

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

sudo firewall-cmd --zone=external --add-masquerade
  • Reenviar el tráfico de un puerto a otro en el mismo servidor

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 otro servidor

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

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.12.12.22
  • 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.12.12.22:

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

Si desea que el reenvío sea permanente, agregue la opción --permanent

Cree un conjunto de reglas con FirewallD

En el siguiente ejemplo, le mostraremos cómo configurar el firewall si está ejecutando un servidor web. Supongamos que su servidor tiene solo una eth0 y desea permitir el tráfico entrante solo en los puertos SSH, HTTP y HTTPS.

  • Cambie la zona predeterminada a dmz.

Usaremos la zona DMZ (desmilitarizada) porque por defecto solo permite tráfico SSH. Para cambiar la zona predeterminada en dmz y asignarla a la eth0, ejecute los siguientes comandos:

sudo firewall-cmd --set-default-zone=dmz
  • Abra los puertos HTTP y HTTPS:

Para abrir los puertos HTTP y HTTPS, agregue reglas de servicio persistentes a la zona dmz:

sudo firewall-cmd --permanent --zone=dmz --add-service=http

Haga que los cambios surtan efecto inmediatamente volviendo a cargar el firewall:

sudo firewall-cmd --reload
  • Revisa los cambios

Para verificar el tipo de configuración de la zona dmz:

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

La salida anterior nos dice que dmz es la zona predeterminada, se aplica a la eth0 y los puertos ssh (22) http (80) y https (443) están abiertos.

Conclusión

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

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.