En pocas palabras, un firewall es un sistema de seguridad que controla el tráfico entrante y saliente en una red basado en un conjunto de reglas predefinidas (como el destino / origen del paquete o 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 los administradores de sistemas y redes están familiarizados, y que también está disponible en RHEL 7.
A Comparison Between FirewallD and Iptables
Bajo el capó, tanto firewalld como el servicio iptables hablan con el marco netfilter en el kernel a través de la misma interfaz, no sorprendentemente, el comando iptables. Sin embargo, a diferencia del servicio iptables, firewalld puede cambiar la configuración durante la operación normal del sistema sin que se pierdan las conexiones existentes.
Firewalld debería estar instalado de forma predeterminada en su sistema RHEL, aunque puede que no esté en ejecución. Puede verificarlo con los siguientes comandos (firewall-config es la herramienta de configuración de interfaz de usuario):
# yum info firewalld firewall-config

y,
# systemctl status -l firewalld.service

Por otro lado, el servicio iptables no está incluido de forma predeterminada, 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
Leer también: Comandos Útiles para Gestionar Servicios de Systemd
En cuanto a los archivos de configuración, el servicio iptables utiliza /etc/sysconfig/iptables
(que no existirá si el paquete no está instalado en su sistema). En un equipo RHEL 7 utilizado como nodo de clúster, este archivo se ve de la siguiente manera:

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á. Por ahora, basta con recordar que siempre puede 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.
Usando Iptables para Controlar el Tráfico de Red
Puede que desees consultar Configurar el Firewall Iptables – Parte 8 de la serie Linux Foundation Certified Engineer (LFCE) para refrescar tu memoria sobre los detalles internos de iptables antes de continuar. Así, podremos pasar directamente a los ejemplos.
Ejemplo 1: Permitir tanto el tráfico web entrante como saliente
Los puertos TCP 80 y 443 son los puertos predeterminados utilizados por el servidor web Apache para manejar el tráfico web normal (HTTP) y seguro (HTTPS). Puedes 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
Ejemplo 2: Bloquear todas (o algunas) conexiones entrantes desde una red específica
Puede haber momentos en los que necesites bloquear todo (o algún tipo) de tráfico que provenga de una red específica, por ejemplo, 192.168.1.0/24:
# iptables -I INPUT -s 192.168.1.0/24 -j DROP
descartará todos los paquetes provenientes 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.
Ejemplo 3: Redirigir el tráfico entrante a otro destino
Si utiliza su caja RHEL 7 no solo como un cortafuegos 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. Si no es así, 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 la IP 192.168.0.10, con el servicio CUPS escuchando en el puerto 631 (tanto en el servidor de impresión como en su cortafuegos). Para reenviar solicitudes de impresión desde clientes al otro lado del cortafuegos, 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 indicadas en los ejemplos anteriores.
Comenzando con FirewallD
Uno de los cambios introducidos con firewalld son las zonas. Este concepto permite separar las redes en diferentes zonas según el nivel de confianza que el usuario haya decidido colocar en los dispositivos y el tráfico dentro de esa red.
Para listar las zonas activas:
# firewall-cmd --get-active-zones
En el ejemplo a continuación, la zona pública está activa, y la interfaz enp0s3 se ha asignado automáticamente a ella. Para ver toda la información sobre una zona en particular:
# firewall-cmd --zone=public --list-all

Dado que puedes leer más sobre las zonas en la guía de seguridad de RHEL 7, solo enumeraremos algunos ejemplos específicos aquí.
Ejemplo 4: Permitir servicios a través del cortafuegos
Para obtener una lista de los servicios admitidos, usa.
# firewall-cmd --get-services

Para permitir el tráfico web http y https a través del cortafuegos, de inmediato y en los reinicios posteriores:
# 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 code>–zona, se utiliza la zona predeterminada (puedes verificar con firewall-cmd –get-default-zone).
Para eliminar la regla, reemplaza la palabra add por remove en los comandos anteriores.
Ejemplo 5: Reenvío de IP / Puerto
En primer lugar, debes 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 pública:

Puedes habilitar el enmascaramiento para pública:
# firewall-cmd --zone=public --add-masquerade
o usar el enmascaramiento en externa. Esto es lo que haríamos para replicar Ejemplo 3 con firewalld:
# firewall-cmd --zone=external --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10
Y no te olvides de recargar el cortafuegos.
Puedes encontrar más ejemplos en la Parte 9 de la serie RHCSA, donde explicamos cómo permitir o deshabilitar los puertos que suelen ser utilizados por un servidor web y un servidor ftp, y cómo cambiar la regla correspondiente cuando se cambian los puertos predeterminados para esos servicios. Además, puedes consultar la wiki de firewalld para más ejemplos.
Leer también: Ejemplos útiles de FirewallD para configurar el firewall en RHEL 7
Conclusión
En este artículo hemos explicado qué es un firewall, cuáles son los servicios disponibles para implementar uno en RHEL 7, y proporcionamos algunos ejemplos que pueden ayudarte a comenzar con esta tarea. Si tienes algún comentario, sugerencia o pregunta, no dudes en hacérnoslo saber utilizando el formulario a continuación. ¡Gracias de antemano!
Source:
https://www.tecmint.com/firewalld-vs-iptables-and-control-network-traffic-in-firewall/