Bienvenido(a) a Alcance Libre 06/10/2025, 10:57
Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2019 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.
La instalación mínima de CentOS 7 y Red Hat™ Enterprise Linux 7 carece de muro cortafuegos. Es importante configurar uno.
Firewalld es un servicio dinámico de muro cortafuegos que provee una administración dinámica con soporte para zonas y asignación de niveles de confianza a éstas últimas. Tiene soporte para IPv4 e IPv6 así como también dispositivos puente tipo Ethernet.
Es el muro cortafuegos predeterminado de CentOS 7 y Red Hat Enterprise Linux 7. Resulta una solución práctica y rápida para poner en marcha un muro cortafuegos y cumple con lo requerido para la mayoría de los fines. Si lo que se busca es una solución más robusta y extensible, probablemente prefiera utilizar Shorewall. Las únicas ventajas que tiene Firewalld sobre Shorewall son las herramientas de configuración y la comunicación con otras aplicaciones —como NetworkManager— a través de D-BUS.
Utiliza iptables y ebtables para comunicarse con Netfilter y dispone de una herramienta de configuración de fácil uso para la terminal denominada firewall-cmd.
URL: https://github.com/t-woerner/firewalld/
Una vez instalado, puede ejecutar lo siguiente para consultar la ayuda rápida de firewall-cmd:
|
Una vez instalado, puede ejecutar lo siguiente para consultar el manual detallado de firewall-cmd:
|
Pulse «q» para salir de la página de manual.
Si se instaló el escritorio gráfico, existe también una herramienta gráfica para la configuración de Firewalld denominada firewall-config.
Firewalld sólo viene instalado de modo predeterminado si realizó la instalación utilizando el DVD. Si realizó la instalación mínima, por favor ejecute lo siguiente:
|
Si instaló el escritorio gráfico, ejecute lo siguiente si quiere utilizar la herramienta gráfica de configuración:
|
Una vez instalado, habilite el servicio ejecutando lo siguiente:
|
Inicie el servicio por primera vez ejecutando lo siguiente:
|
Ejecute lo siguiente si requiere reiniciar el servicio
|
O bien ejecute lo siguiente si sólo requiere volver a leer la configuración:
|
Procedimientos.
De modo predeterminado Firewalld tiene diferentes tipos de zonas. Cada una tiene un distinto nivel de seguridad.
Ejecute lo siguiente para ver la lista de zonas de firewalld:
|
La salida seguramente será:
block dmz drop external home internal public trusted work |
Ejecute lo siguiente para verificar cuál es la zona utilizada por firewalld:
|
La salida seguramente será:
public |
Ejecute lo siguiente para ver la lista de servicios habilitados en la zona actual:
|
La salida seguramente será:
|
Firewalld permite aplicar cambios temporales y permanentes que facilitan el poder realizar pruebas y restaurar configuración en caso de ser necesario.
Los cambios realizados con firewall-cmd sin la opción --permanent aplicarán de inmediato sin guardarse en la configuración. Ésto es lo que lo convierte en un cortafuegos dinámico. Ejemplo:
|
Los cambios realizados con firewall-cmd con la opción --permanent se guardan de inmediato en la configuración pero sólo aplicarán hasta ejecutar firewall-cmd con la opción --reload. Ejemplo:
|
Ejecute lo siguiente para cambiar la zona predeterminada a home:
|
La salida seguramente será:
success |
El cambio aplica automáticamente y se abren los puertos predeterminados de la zona.
Ejecute lo siguiente para ver la lista de servicios habilitados en la zona actual:
|
La salida seguramente será:
dhcpv6-client ipp-client mdns samba-client ssh |
Vuelva a definir la zona public como la predeterminada:
|
Ejecute lo siguiente para asociar el primer dispositivo de red del sistema —enp0s3 si es una máquina virtual— a la zona public:
|
Ejecute lo siguiente para hacer permanente el cambio:
|
Ejecute lo siguiente para asociar el segundo dispositivo de red del sistema —enp0s8 si es una máquina virtual— a la zona internal:
|
Ejecute lo siguiente para hacer permanente el cambio:
|
Ejecute lo siguiente para asociar el tercer dispositivo de red del sistema —enp0s9 si es una máquina virtual— a la zona dmz:
|
Ejecute lo siguiente para hacer permanente el cambio:
|
Ejecute lo siguiente para determinar qué interfaces están asociadas a cada zona:
|
La salida seguramente será la siguiente:
dmz |
Ejecute lo siguiente para listar todo lo que está configurado en la zona public:
|
La salida debe ser similar a la siguiente:
public (active) |
Ejecute lo siguiente para listar todo lo que está configurado en la zona internal:
|
La salida debe ser similar a la siguiente:
internal (active) |
Ejecute lo siguiente para listar todo lo que está configurado en la zona dmz:
|
La salida debe ser similar a la siguiente:
dmz (active) |
Ejecute lo siguiente para habilitar el enmascaramiento de IP (NAT) y permitir a los anfitriones detrás de la zona internal salir hacia Internet.
|
Para aplicar el cambio es necesario volver a cargar la configuración:
|
Lo anterior automáticamente activa en el núcleo de Linux la función de reenvío de paquetes para IPv4. Ejecute lo siguiente para validar ésto:
|
La salida debe ser igual a la siguiente.
net.ipv4.ip_forward = 1 |
Ejecute lo siguiente para listar todo lo que está configurado en la zona internal:
|
La salida debe ser similar a la siguiente:
internal (active) |
Para hacer DNAT de un puerto en el exterior hacia el puerto de un anfitrión en la red local primero hay que activar el enmascaramiento de la zona pública. Ejecute lo siguiente:
|
Para aplicar el cambio es necesario volver a cargar la configuración:
|
Hecho lo anterior, puede utilizar la siguiente sintaxis para redireccionar puertos desde el exterior hacia la red de área local:
|
En el siguiente ejemplo se hace DNAT del puerto 22023 del cortafuegos hacia el puerto 22 de un anfitrión en la red local con dirección IP 172.16.1.2:
|
Para aplicar el cambio es necesario volver a cargar la configuración:
|
En el siguiente ejemplo se hace DNAT del puerto 3389 del cortafuegos hacia el puerto 3389 de un anfitrión en la red local con dirección IP 172.16.1.3:
|
Para aplicar el cambio es necesario volver a cargar la configuración:
|
Ejecute lo siguiente para listar todo lo que está configurado en la zona public:
|
La salida debe ser similar a la siguiente:
public (active) |
Ejecute lo siguiente para ver la lista de servicios disponibles en firewalld:
|
La salida debe ser similar a la siguiente.
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https |
Para abrir un servicio del muro cortafuegos hacia una zona utilice la siguiente sintaxis:
|
En el siguiente ejemplo se abre el servicio http (puerto 80/tcp) del servidor hacia el tráfico proveniente de la zona public:
|
Ejecute lo siguiente para hacer permanente el cambio:
|
En el siguiente ejemplo se abre el servicio http (puerto 80/tcp) del servidor hacia el tráfico proveniente de la zona internal:
|
Ejecute lo siguiente para hacer permanente el cambio:
|
Si algún servicio está ausente de la lista de servicios de firewalld, puede abrir puertos específicos utilizando la siguiente sintaxis:
|
En el siguiente ejemplo se abre el puerto 10000/tcp del servidor para el tráfico proveniente de la zona public:
|
Ejecute lo siguiente para hacer permanente el cambio:
|
En el siguiente ejemplo se abre el rango de puertos entre el 30300/tcp y el 30310/tcp del servidor para el tráfico proveniente de la zona public:
|
Ejecute lo siguiente para hacer permanente el cambio:
|
Ejecute lo siguiente para listar todo lo que está configurado en la zona public:
|
La salida debe ser similar a la siguiente:
public (active) |
El protocolo ICMP (Internet Control Message Protocol) es utilizado para solicitar la información de destination-unreachable, echo-reply, echo-request, parameter-problem, redirect, router-advertisement, router-solicitation, source-quench y time-exceeded. Entre otras cosas, este protocolo es responsable de las respuestas de echo hechas con ping. De modo predeterminado Firewalld permite el tráfico ICMP. Hay escenarios donde puede ser conveniente bloquear el tráfico ICMP para impedir ataques DDoS a través de este protocolo.
Ejecute lo siguiente para ver la lista de tipos ICMP que puede gestionar Firewalld:
|
La salida debe ser la siguiente:
destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded |
Ejecute lo siguiente para consultar si esa bloqueada la respuesta de echo en la zona public:
|
La respuesta seguramente será que no:
no |
Ejecute lo siguiente para activar el bloque de la respuesta de echo en la zona public.
|
Vuelva a consultar si esa bloqueada la respuesta de echo en la zona public:
|
La respuesta seguramente será que Sí:
yes |
Para hacer permanente el cambio ejecute lo siguiente:
|
A partir de este momento quedará bloqueada la respuesta de los pings hechas hacia el muro cortafuegos desde la zona pública.
El siguiente ejemplo considera que se cambiará la asociación de la interfaz enp0s3 de la zona public hacia la zona drop. Ésta última es mucho más segura. La zona public tiene como política predeterminada rechazar paquetes —REJECT—, es decir rechaza conexiones pero confirma que el anfitrión existe. La zona drop tiene como política externa tiene como política predeterminada descartar paquetes —DROP—, es decir hace parecer que ni siquiera existe el anfitrión.
De modo predeterminado la zona public tiene habilitados los servicios ssh y dhcpv6-client. La zona drop carece de servicios habilitados. Por tanto lo primero que habrá que hacer es determinar si se requerirá acceso por SSH y soporte para DHCP.
El procedimiento realizará los cambios permanentes sin aplicarlos de inmediato. Los cambios será aplicados hasta el final.
Primero defina de modo permanente los servicios y puertos que serán abiertos en la zona drop:
|
¿Va a requerir enmascaramiento de IP? ¿Va a redirigir puertos desde redes públicas hacia redes privadas? Ejecute lo siguiente:
|
¿Que puertos va a redirigir y hacia qué anfitriones en la red privada? Ejecute lo siguiente:
|
Elimine la tarjeta de la zona actual de modo permanente:
|
Elija una zona adecuada a sus necesidades para la interfaz de red.
Ejecute lo siguiente para asociar la interfaz de red a la zona seleccionada de modo permanente:
|
Hasta aquí sólo se han realizado cambios en la configuración sin aplicarlos. Para aplicar los cambios es necesario volver a cargar la configuración ejecutando lo siguiente:
|
Valide el cambio de interfaz ejecutando lo siguiente:
|
La salida seguramente será la siguiente:
drop |
Valide los puertos, servicios y enmascaramiento habilitados en la zona drop ejecutando lo siguiente.
|
La salida debe ser similar a la siguiente:
drop (active) |
La zona public proporciona una seguridad muy buena. Sin embargo, si se desea un muro cortafuegos más estricto, probablemente prefiera cambiar la política predeterminada de REJECT a DROP. Este procedimiento es una alternativa al cambio de zona de una interfaz, descrito anteriormente.
Consulte cual es la nueva política predeterminada:
|
La salida debe ser la siguiente.
default |
Ejecute lo siguiente para cambiar la política a drop:
|
Para aplicar el cambio es necesario volver a cargar la configuración:
|
Consulte cual es la nueva política predeterminada:
|
La salida debe ser la siguiente.
DROP |
Puede haber escenarios en los cuales surja una emergencia que requiera cerrar todas las conexiones. Ejecute lo siguiente para activar el modo pánico:
|
Puede ejecutar lo siguiente para desactivar el modo pánico y restablecer todas las conexiones:
|
Ejecute lo siguiente para verificar si está activo o desactivado el modo pánico:
|