Serie RHCSA: Firewall Essentials y control de tráfico de red mediante FirewallD e Iptables - Parte 11


En palabras simples, un firewall es un sistema de seguridad que controla el tráfico entrante y saliente en una red en función de un conjunto de reglas predefinidas (como el destino/origen del paquete o el tipo de tráfico, por ejemplo).

En este artículo revisaremos los conceptos básicos de firewalld, el demonio de firewall dinámico predeterminado en Red Hat Enterprise Linux 7, y el servicio iptables, el servicio de firewall heredado para Linux, con el que la mayoría de administradores de sistemas y redes están bien familiarizados y que también está disponible. en RHEL 7.

Una comparación entre FirewallD e Iptables

Bajo el capó, tanto firewalld como el servicio iptables se comunican con el marco netfilter en el kernel a través de la misma interfaz, como era de esperar, el comando iptables. Sin embargo, a diferencia del servicio iptables, firewalld puede cambiar la configuración durante el funcionamiento normal del sistema sin que se pierdan las conexiones existentes.

Firewalld debe instalarse de forma predeterminada en su sistema RHEL, aunque es posible que no se esté ejecutando. Puede verificar con los siguientes comandos (firewall-config es la herramienta de configuración de la interfaz de usuario):

# yum info firewalld firewall-config

y,

# systemctl status -l firewalld.service

Por otro lado, el servicio iptables no está incluido por defecto, pero se puede instalar a través de.

# yum update && yum install iptables-services

Ambos demonios se pueden iniciar y habilitar para que se inicien en el arranque con los comandos habituales de systemd:

# systemctl start firewalld.service | iptables-service.service
# systemctl enable firewalld.service | iptables-service.service

Lea también: Comandos útiles para administrar servicios de Systemd

En cuanto a los archivos de configuración, el servicio iptables usa /etc/sysconfig/iptables (que no existirá si el paquete no está instalado en su sistema). En un cuadro RHEL 7 utilizado como nodo de clúster, este archivo tiene el siguiente aspecto:

Mientras que firewalld almacena su configuración en dos directorios, /usr/lib/firewalld y /etc/firewalld :

# ls /usr/lib/firewalld /etc/firewalld

Examinaremos estos archivos de configuración más adelante en este artículo, después de agregar algunas reglas aquí y allá. A estas alturas bastará con recordarte que siempre puedes encontrar más información sobre ambas herramientas con.

# man firewalld.conf
# man firewall-cmd
# man iptables

Aparte de eso, recuerde echar un vistazo a Revisión de comandos esenciales y documentación del sistema - Parte 1 de la serie actual, donde describí varias fuentes donde puede obtener información sobre los paquetes instalados en su sistema RHEL 7.

Uso de Iptables para controlar el tráfico de la red

Es posible que desee consultar Configurar Iptables Firewall - Parte 8 de la serie Linux Foundation Certified Engineer (LFCE) para actualizar su memoria sobre los componentes internos de iptables antes de continuar. Por lo tanto, podremos saltar directamente a los ejemplos.

Los puertos TCP 80 y 443 son los puertos predeterminados que utiliza el servidor web Apache para manejar el tráfico web normal (HTTP) y seguro (HTTPS). Puede permitir el tráfico web entrante y saliente a través de ambos puertos en la interfaz enp0s3 de la siguiente manera:

# iptables -A INPUT -i enp0s3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o enp0s3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
# iptables -A INPUT -i enp0s3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o enp0s3 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

Puede haber ocasiones en las que necesite bloquear todo (o parte) el tipo de tráfico que se origina en una red específica, digamos 192.168.1.0/24, por ejemplo:

# iptables -I INPUT -s 192.168.1.0/24 -j DROP

eliminará todos los paquetes que provengan de la red 192.168.1.0/24, mientras que,

# iptables -A INPUT -s 192.168.1.0/24 --dport 22 -j ACCEPT

solo permitirá el tráfico entrante a través del puerto 22.

Si usa su caja RHEL 7 no solo como un firewall de software, sino también como uno basado en hardware real, de modo que se encuentre entre dos redes distintas, el reenvío de IP ya debe estar habilitado en su sistema. De lo contrario, debe editar /etc/sysctl.conf y establecer el valor de net.ipv4.ip_forward en 1, de la siguiente manera:

net.ipv4.ip_forward = 1

luego guarde el cambio, cierre su editor de texto y finalmente ejecute el siguiente comando para aplicar el cambio:

# sysctl -p /etc/sysctl.conf

Por ejemplo, puede tener una impresora instalada en una caja interna con IP 192.168.0.10, con el servicio CUPS escuchando en el puerto 631 (tanto en el servidor de impresión como en su firewall). Para reenviar solicitudes de impresión de clientes en el otro lado del firewall, debe agregar la siguiente regla de iptables:

# iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 631 -j DNAT --to 192.168.0.10:631

Tenga en cuenta que iptables lee sus reglas secuencialmente, así que asegúrese de que las políticas predeterminadas o las reglas posteriores no anulen las descritas en los ejemplos anteriores.

Introducción a FirewallD

Uno de los cambios introducidos con firewalld son las zonas. Este concepto permite separar las redes en diferentes zonas del nivel de confianza que el usuario ha decidido depositar en los dispositivos y el tráfico dentro de esa red.

Para listar las zonas activas:

# firewall-cmd --get-active-zones

En el siguiente ejemplo, la zona pública está activa y la interfaz enp0s3 se le ha asignado automáticamente. Para ver toda la información sobre una zona en particular:

# firewall-cmd --zone=public --list-all

Dado que puede leer más sobre las zonas en la guía de seguridad de RHEL 7, aquí solo enumeraremos algunos ejemplos específicos.

Para obtener una lista de los servicios admitidos, utilice.

# firewall-cmd --get-services

Para permitir el tráfico web http y https a través del firewall, con efecto inmediato y en los siguientes arranques:

# firewall-cmd --zone=MyZone --add-service=http
# firewall-cmd --zone=MyZone --permanent --add-service=http
# firewall-cmd --zone=MyZone --add-service=https
# firewall-cmd --zone=MyZone --permanent --add-service=https
# firewall-cmd --reload

Si se omite el código> –zone , se usa la zona predeterminada (puede verificar con firewall-cmd –get-default-zone).

Para eliminar la regla, reemplace la palabra agregar con eliminar en los comandos anteriores.

En primer lugar, debe averiguar si el enmascaramiento está habilitado para la zona deseada:

# firewall-cmd --zone=MyZone --query-masquerade

En la imagen a continuación, podemos ver que el enmascaramiento está habilitado para la zona externa, pero no para el público:

Puede habilitar el enmascaramiento para público:

# firewall-cmd --zone=public --add-masquerade

o usar enmascaramiento en externo. Esto es lo que haríamos para replicar el Ejemplo 3 con firewalld:

# firewall-cmd --zone=external --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10

Y no olvide volver a cargar el cortafuegos.

Puede encontrar más ejemplos en la Parte 9 de la serie RHCSA, donde explicamos cómo permitir o deshabilitar los puertos que generalmente usan un servidor web y un servidor ftp, y cómo cambiar la regla correspondiente cuando el puerto predeterminado para esos servicios están cambiados. Además, es posible que desee consultar la wiki de firewalld para obtener más ejemplos.

Lea también: Ejemplos útiles de FirewallD para configurar el firewall en RHEL 7

Conclusión

En este artículo, explicamos qué es un firewall, cuáles son los servicios disponibles para implementar uno en RHEL 7 y proporcionamos algunos ejemplos que pueden ayudarlo a comenzar con esta tarea. Si tiene algún comentario, sugerencia o pregunta, no dude en hacérnoslo saber mediante el formulario a continuación. ¡Gracias de antemano!