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

Cómo configurar un firewall con FirewallD en CentOS 7

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

FirewallDis es una completa solución de firewall que administra las reglas de iptables del sistema y proporciona una interfaz D-Bus para operar sobre ellas. A partir de CentOS 7, FirewallD reemplaza a 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 7 y le explicamos los conceptos básicos de FirewallD.

Requisitos previos #

Antes de comenzar con este tutorial, asegúrese de haber iniciado sesión en su servidor con una cuenta de usuario con privilegios de sudo o con el usuario raíz. 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.

Conceptos básicos de cortafuegos #

FirewallD utiliza 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 se permite o no se permite hacia y desde el sistema.

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

Zonas de cortafuegos #

Las zonas son conjuntos predefinidos de reglas que especifican qué tráfico debe permitirse en función del nivel de confianza en 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.

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 es persistente en los reinicios. Cuando se inicia el servicio 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, debe usar --permanent opción.

Instalar y habilitar FirewallD #

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

    sudo yum install firewalld
  2. El servicio Firewalld está deshabilitado de forma predeterminada. Puede comprobar el estado del cortafuegos con:

    sudo firewall-cmd --state

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

  3. Para iniciar el servicio FirewallD y habilitarlo en el arranque, escriba:

    sudo systemctl start firewalldsudo systemctl enable firewalld

Trabajando con Firewalld Zones #

Después de habilitar el servicio FirewallD por primera vez, public La zona se establece como una 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(s) interfaz(es) de red, escriba:

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

El resultado anterior nos dice que ambas interfaces eth0 y eth1 están asignados a la zona pública.

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 configurada como predeterminada, utilizada tanto por eth0 y eth1 interfaces Además, se permiten las conexiones relacionadas con el 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 la Zona de una Interfaz #

Puede cambiar fácilmente la Zona de interfaz usando --zone opción en combinación con --change-interface opción. El siguiente comando asignará el eth1 interfaz a la zona 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

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

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

Verifique los cambios con:

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

Apertura de un puerto o número de servicio

Con FirewallD puede permitir el tráfico de puertos específicos 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

Si desea mantener el puerto 80 abierto después de reiniciar, deberá escribir el mismo comando una vez más, pero esta vez con --permanent opción:

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

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 cuando se agrega un servicio. Simplemente use --remove-service en lugar de --add-service opción:

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 está ejecutando una aplicación como Plex Media Server para la cual no existe un servicio apropiado disponible?

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

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

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 --list-ports opción:

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

Para mantener el puerto 32400 abierto después de un reinicio, agregue la regla a la configuración permanente ejecutando el mismo comando usando --permanent opción.

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=32400/tcp

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, podemos 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..

Puerto de reenvío 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 --add-masquerade cambiar. Por ejemplo, para habilitar el enmascaramiento para external tipo de zona:

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

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

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 el 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

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

Creación de un conjunto de reglas con FirewallD #

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

  1. Cambia la zona por defecto a dmz

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

    sudo firewall-cmd --set-default-zone=dmzsudo firewall-cmd --zone=dmz --add-interface=eth0
  2. Abrir puertos HTTP y HTTPS:

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

    sudo firewall-cmd --permanent --zone=dmz --add-service=httpsudo firewall-cmd --permanent --zone=dmz --add-service=https

    Haga que los cambios sean efectivos inmediatamente recargando el firewall:

    sudo firewall-cmd --reload
  3. Verifica los cambios

    Para comprobar los ajustes de configuración de la zona dmz, escriba:

    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:

    El resultado anterior nos dice que dmz es la zona predeterminada, se aplica a eth0 Los puertos de interfaz y ssh (22) http (80) y https (443) están abiertos.


Cent OS
  1. Configurar Firewall con FirewallD en CentOS 7

  2. Cómo configurar el cortafuegos en CentOS 7

  3. Configurar FirewallD en CentOS 7

  4. Cómo configurar un cortafuegos con UFW en Ubuntu 16.04

  5. Cómo configurar un firewall con Firewalld en CentOS 8

Cómo configurar y administrar el firewall en CentOS 8

Cómo configurar un cortafuegos con UFW en Debian 10

Cómo configurar un cortafuegos con UFW en Debian 9

Cómo detener y deshabilitar el firewall en CentOS 8

Cómo configurar un cortafuegos con GUFW en Linux

Cómo configurar una VPN basada en IPsec con Strongswan en CentOS/RHEL 8