Firewalld ha reemplazado a iptables como firewall para las distribuciones basadas en RHEL. La sintaxis que usa firewalld es más fácil de usar. Esta publicación le muestra cómo asegurarse de que firewalld se esté ejecutando y se inicie cuando se inicia el servidor. También le muestra cómo crear reglas de cortafuegos persistentes y flexibles.
Nota :Red Hat®, CentOS®, Alma Linux®, Rocky Linux® también usan firewalld, por lo que todos los comandos de este artículo también funcionan en las imágenes basadas en RHEL que Rackspace tiene disponibles.
Conceptos básicos de firewalld
Firewalld utiliza zonas para administrar grupos de reglas. Las zonas se adjuntan a las interfaces de red y determinan qué tráfico se permite en una red específica y qué tráfico se deniega.
Esta funcionalidad puede ser útil si desea establecer un firewall muy estricto en su interfaz pública y un firewall más relajado en su interfaz de CloudNetwork. Es útil familiarizarse con las zonas predefinidas con cortafuegos. Firewalld tiene las siguientes zonas predefinidas, en orden de menos confianza a más confianza:
drop
:Esta zona solo permite conexiones salientes. Elimina las conexiones entrantes sin una respuesta.block
:Si bien es similar adrop
, esta zona rechaza las solicitudes entrantes con unicmp-host-prohibited
oicmp6-adm-prohibited
mensaje.public
:use esta zona para redes públicas o cuando no confíe en ninguna de las otras computadoras en la red. Esta zona acepta conexiones entrantes caso por caso.external
:utilice esta zona en redes externas donde el cortafuegos actúa como puerta de enlace. Esta zona está configurada para enmascarar la traducción de direcciones de red (NAT), de modo que su red interna sea privada pero accesible.internal
:use esta zona para la parte interna de una puerta de enlace, donde las otras computadoras son razonablemente confiables.dmz
:utilice esta zona para equipos aislados que se encuentran en una zona desmilitarizada (DMZ). Esta zona solo permite Secure Shell (SSH) y el Protocolo de mensajes de control de Internet (ICMP).work
:use esta zona para las computadoras del trabajo.home
:utilice esta zona para entornos domésticos.trusted
:utilice esta zona cuando confíe en todos los equipos de la red.
Para usar el firewall, crea reglas y modifica las propiedades de sus zonas, y luego asigna sus interfaces de red a las zonas que son más apropiadas para su red.
Inicie el firewall y habilítelo en el arranque
De forma predeterminada, firewalld debe estar habilitado, reinicie el servidor y luego comience atboot.
Puede verificar fácilmente si el firewall se está ejecutando utilizando el --state
bandera, como se muestra en el siguiente ejemplo:
[user@server ~]$ sudo firewall-cmd --state
Finding out about your zones
Si firewalld no se está ejecutando, puede habilitarlo e iniciarlo ejecutando los siguientes comandos:
[user@server ~]$ sudo systemctl enable firewalld
[user@server ~]$ sudo systemctl start firewalld
Puede ver qué zona es actualmente la zona predeterminada ejecutando el siguiente comando:
[user@server ~]$ sudo firewall-cmd --get-default-zone
Puede ver qué interfaces de red están asignadas a qué zonas ejecutando el siguiente comando:
[user@server ~]$ sudo firewall-cmd --get-active-zones
Nota :El valor predeterminado asigna todas las interfaces de red a la zona pública.
También puede encontrar las reglas asociadas con la zona pública ejecutando el siguiente comando:
[user@server ~]$ sudo firewall-cmd --list-all --zone=public
La salida debería parecerse al siguiente ejemplo:
public (default, active)
interfaces: eth0 eth1
sources:
services: dhcpv6-client http https ssh
ports: 1025/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
El resultado muestra que la zona pública es la predeterminada y tiene interfaces de red eth0 y eth1. Protocolo de configuración dinámica de host (DHCP) (dhcpv6-client
), SSH, se permite el tráfico del Protocolo de transferencia de hipertexto (HTTP) y HTTP seguro (HTTPS), así como el tráfico del Protocolo de control de transmisión (TCP) en el puerto 1025
.
Para obtener una lista de las zonas disponibles, ejecute el siguiente comando:
[user@server ~]$ sudo firewall-cmd --get-zones
Configura tus zonas
Puede mover interfaces entre zonas durante su sesión usando --change-interface=
argumento y el --zone
argumento. Si el cortafuegos se reinicia, la interfaz vuelve a la zona predeterminada.
[user@server ~]$ sudo firewall-cmd --zone=internal --change-interface=eth1
Para definir una zona permanente para una interfaz, abra el archivo de configuración de la interfaz y agregue las siguientes líneas:
...
ONBOOT=yes
ZOME=internal
Guarde y cierre el archivo, luego ejecute los siguientes comandos para reiniciar la red y el firewall y hacer que los cambios surtan efecto:
[user@server ~]$ sudo systemctl restart network
[user@server ~]$ sudo systemctl restart firewalld
Configurar las reglas
Firewalld viene con servicios predefinidos que le permiten agregar solo el servicio, en lugar del número de puerto y el tipo de protocolo. Por ejemplo, le permiten permitir http
en lugar de tcp port 80
.
Puede obtener una lista de estos servicios utilizando el siguiente comando:
[user@server ~]$ sudo firewall-cmd --get-services
Luego, use el siguiente comando de ejemplo para agregar un servicio:
[user@server ~]$ sudo firewall-cmd --add-service=http
La configuración tiene efecto inmediato, pero no sobrevive a los reinicios. Para permitir que estos tipos de configuraciones de servicio se reinicien cuando el servidor se reinicia, debe agregar el --permanent
argumento. Recomendamos que ejecute estos dos comandos en secuencia para que la configuración tenga efecto inmediato y los servicios también se reinicien, como se muestra en el siguiente ejemplo:
[user@server ~]$ sudo firewall-cmd --add-service=http
firewall-cmd --permanent --add-service=http
Puede obtener detalles adicionales sobre las reglas predefinidas de firewalld navegando a /usr/lib/firewalld/services/ directorio y leyendo los archivos.
Configurar reglas enriquecidas
Reglas enriquecidas son cómo se definen los condicionales en firewalld. El caso de uso más común para las reglas enriquecidas es permitir el acceso desde una dirección IP o rango de direcciones IP en particular. Los siguientes comandos permiten el acceso al puerto TCP 80 desde cualquier IP en la red 192.168.0.0 y hacen que la regla sea permanente:
[user@server ~]$ sudo firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" accept'
[user@server ~]$ sudo firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" accept' --permanent
Para ver ejemplos de reglas enriquecidas, consulte Fedora®Wiki.
Definir servicios
Puede crear su propio servicio y consultarlo cuando cree reglas colocando un archivo en /usr/lib/firewalld/services/ directorio. La forma más sencilla de realizar esta tarea copiando un .xml existente archivo en este directorio, luego cambiando los detalles.
El siguiente comando de ejemplo copia un archivo existente en un archivo nuevo:
[user@server ~]$ sudo cp /usr/lib/firewalld/services/http.xml /usr/lib/firewalld/services/myservice.xml
El siguiente comando abre el nuevo archivo para editarlo:
[user@server ~]$ sudo vim /usr/lib/firewalld/services/myserver.xml
El archivo debería parecerse al siguiente ejemplo:
<!--?xml version="1.0" encoding="utf-8"?-->
<service>
<short>My Custom Service</short>
<description>A brief description of the service. This rule allows port 1134 on TCP for my application.</description>
<port protocol="tcp" port="1134"></port>
</service>
Para aplicar sus cambios, use los siguientes comandos con el nombre del archivo, menos el .xml extensión de archivo:
[user@server ~]$ sudo firewall-cmd --add-service=myservice
[user@server ~]$ sudo firewall-cmd --permanent --add-service=myservice
Use la pestaña Comentarios para hacer cualquier comentario o hacer preguntas. También puede iniciar una conversación con nosotros.