GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo configurar y administrar el firewall en CentOS 8

Un firewall es un método para monitorear y filtrar el tráfico de red entrante y saliente. Funciona definiendo un conjunto de reglas de seguridad que determinan si se permite o bloquea un tráfico específico. Un cortafuegos correctamente configurado 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 el firewall del sistema de forma dinámica.

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

Requisitos previos #

Para configurar el servicio de firewall, debe iniciar sesión como root o usuario con privilegios sudo.

Conceptos básicos de cortafuegos #

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

Firewalld se puede configurar y administrar usando el firewall-cmd utilidad de línea de comandos.

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

Zonas de cortafuegos #

Las zonas son conjuntos predefinidos de reglas que especifican el nivel de confianza de las redes a las que está conectada su computadora. Puede asignar interfaces de red y fuentes a una zona.

A continuación se muestran las zonas proporcionadas por FirewallD ordenadas según el nivel de confianza de la zona, de no confiable a confiable:

  • soltar :Todas las conexiones entrantes se interrumpen sin ninguna notificación. Solo se permiten conexiones salientes.
  • bloquear :Todas las conexiones entrantes se rechazan con un icmp-host-prohibited mensaje para IPv4 y icmp6-adm-prohibited para IPv6n. Solo se permiten conexiones salientes.
  • público :Para uso en áreas públicas no confiables. No confía en otras computadoras en la red, pero puede permitir conexiones entrantes seleccionadas.
  • externo :para uso en redes externas con enmascaramiento de NAT habilitado cuando su sistema actúa como puerta de enlace o enrutador. Solo se permiten conexiones entrantes seleccionadas.
  • interno :Para usar en redes internas cuando su sistema actúa como puerta de enlace o enrutador. Por lo general, se confía en otros sistemas de la red. Solo se permiten conexiones entrantes seleccionadas.
  • dmz :Se usa para computadoras ubicadas en su zona desmilitarizada que tienen acceso limitado al resto de su red. Solo se permiten conexiones entrantes seleccionadas.
  • trabajo :Utilizado para máquinas de trabajo. Por lo general, se confía en otras computadoras en la red. Solo se permiten conexiones entrantes seleccionadas.
  • casa :Utilizado para máquinas domésticas. Por lo general, se confía en otras computadoras en la red. Solo se permiten conexiones entrantes seleccionadas.
  • de confianza :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 necesaria 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.

Firewalld Runtime y configuración permanente #

Firewalld utiliza dos conjuntos de configuración separados, tiempo de ejecución y configuración permanente.

La configuración de 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 de tiempo de ejecución.

De forma predeterminada, al realizar cambios en la configuración de Firewalld mediante firewall-cmd utilidad, los cambios se aplican a la configuración de tiempo de ejecución. Para hacer que los cambios sean permanentes, agregue el --permanent opción al comando.

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

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

    sudo firewall-cmd <options>sudo firewall-cmd --runtime-to-permanent
  2. Cambie la configuración permanente y vuelva a cargar el demonio firewalld:

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

Habilitando FirewallD #

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

sudo dnf install firewalldsudo systemctl enable firewalld --now

Puede verificar el estado del servicio de firewall con:

sudo firewall-cmd --state

Si el firewall está habilitado, el comando debe imprimir running . De lo contrario, verá que not running .

Zonas de cortafuegos #

Si no la ha cambiado, la zona predeterminada se establece en public y todas las interfaces de red están asignadas a esta zona.

La zona por defecto es la que se usa para todo lo que no está asignado 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 interfaces eth0 y eth1 se asignan al public zona:

public
  interfaces: eth0 eth1

Puede imprimir los ajustes de configuración de 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:

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

Si desea comprobar las configuraciones de todas las zonas disponibles escriba:

sudo firewall-cmd --list-all-zones

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

Cambiando el objetivo de la zona #

El objetivo define el comportamiento predeterminado de la zona para el tráfico entrante que no se especifica. Se puede establecer en una de las siguientes opciones:default , ACCEPT , REJECT y DROP .

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

Por ejemplo, para cambiar el public objetivo de la zona para DROP ejecutarías:

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

Asignación de una interfaz a una zona diferente #

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

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

Por ejemplo, el siguiente comando asigna el eth1 interfaz para el work zona:

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

Verifique los cambios escribiendo:

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

Cambiando la Zona Predeterminada #

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

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

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

Verifique los cambios con:

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

Creando nuevas Zonas #

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

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

  1. Crea la zona:

    sudo firewall-cmd --new-zone=memcached --permanent
  2. Agregue las reglas a la zona:

    sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanentsudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanentsudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
  3. Vuelva a cargar el demonio firewalld para activar los cambios:

    sudo firewall-cmd --reload

Servicios de cortafuegos #

Con firewalld, puede permitir el tráfico de puertos y/o fuentes específicas en función de reglas predefinidas denominadas servicios.

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

sudo firewall-cmd --get-services

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

/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 la zona 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á modificando la zona predeterminada, puede omitir --zone opción.

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

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

Para mantener el puerto 80 abierto después de un reinicio, ejecute el mismo comando una vez más con --permanent opción, o ejecutar:

sudo firewall-cmd --runtime-to-permanent

Usa los --list-services junto con el --permanent opción para verificar sus cambios:

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

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

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

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

Creación de un nuevo FirewallD Service #

Como ya hemos mencionado, los servicios predeterminados se almacenan en el /usr/lib/firewalld/services directorio. La forma más sencilla de crear un nuevo servicio es copiar un archivo de servicio existente en /etc/firewalld/services directorio, que es la ubicación de los servicios creados por el usuario y modificar 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 recién creado y cambie el nombre abreviado y la descripción del servicio dentro del <short> y <description> etiquetas La etiqueta más importante que debe cambiar es el port etiqueta, que define el número de puerto y el protocolo que desea abrir.

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

/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 usar el plexmediaserver servicio en sus zonas igual que cualquier otro servicio.

Puertos de apertura 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 fuente IP #

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

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

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

Hacer 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. Solo usa --remove-source en lugar de --add-source opción:

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

Abrir un puerto de origen #

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

Por ejemplo, para abrir el puerto 8080 en la zona pública de la sesión actual, ejecute:

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 de un reinicio, agregue la regla a la configuración permanente ejecutando el mismo comando usando --permanent flag o ejecutando:

sudo firewall-cmd --runtime-to-permanent

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

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

Puertos de reenvío #

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

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

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

En el siguiente ejemplo, reenviamos el tráfico desde el puerto 80 al puerto 8080 en el mismo servidor:

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

Reenviar tráfico a otra dirección IP #

En el siguiente ejemplo, reenviamos el tráfico desde el 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 tráfico a otro servidor en un puerto diferente #

En el siguiente ejemplo, reenviamos el 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 que la regla de reenvío sea persistente, utilice:

sudo firewall-cmd --runtime-to-permanent

Cent OS
  1. Cómo instalar y configurar Nginx en CentOS 7

  2. Cómo habilitar y usar firewalld en CentOS 7

  3. Cómo configurar un firewall con FirewallD en CentOS 7

  4. Cómo configurar el cortafuegos en CentOS 7

  5. ¿Cómo instalar y configurar HAProxy en CentOS?

Cómo instalar y configurar CSF (Config Server Firewall) en CentOS 7

Cómo detener y deshabilitar el firewall en CentOS 8

Cómo instalar y configurar Nagios 4.0.7 en CentOS 7

Cómo instalar y configurar ISPConfig CP en CentOS 7

Cómo instalar y configurar ownCloud en CentOS 7

Cómo configurar FirewallD en RHEL, CentOS y Fedora