Aprendiendo a usar firewalld
Anuncio:
En esta ocasión te quiero mostrar cómo usar firewalld. Firewalld es un firewall dinámico avanzado que se introdujo desde CentOS 7 y debes tener en cuenta que es recomendable deshabilitar iptables cuando se esté usando para que las reglas de uno y otro no entren en conflicto. En CentOS por defecto ya está deshabilitado.
Firewall Dinámico
Firewalld es un servicio más del sistema así que lo podemos arracar, parar o ver su estatus con systemctl, por ejemplo:
systemctl status firewalld
Esta herramienta nos va a facilitar la gestión del firewall en comparación con iptables, es un poco más fácil o intuitivo de usar. Hay una utilidad gráfica que se llama firewall-config pero en esta ocasión nosotros vamos a ver la firewall-cmd que es la utilidad de terminal. Veamos entonces cómo usar firewalld.
Zonas del Firewall
Cuando estamos trabajando con firewalld tenemos lo que se denominan zonas:
- trusted. En la que todo se acepta
- home. Solo permite ssh, samba, dns y dhcp
- internal. Igual que home
- work. Permite solo ssh y dhcp
- public. Es la zona por defecto. Se rechaza todo excepto ssh.
- external. Solo acepta ssh
- dmz. Solo se acepta ssh
- block. Rechaza todo.
- drop. Rechaza todo pero no lo notifica.
Podemos obtener información sobre las zonas con:
firewall-cmd --get-zones
Si las opciones que tenemos predeterminadas con encajan con lo que necesitas puedes agregar una zona personalizada a tu firewall con:
firewall-cmd --new-zone=nombre_zona --permanet
Con esto crearemos una zona y le diremos que sea permanente. Ahora debemos reiniciar el servicio para que cargue la nueva zona con:
systemctl restart firewalld
Si haces de nuevo un:
firewall-cmd --get-zones
Puedes ver que ya tenemos nuestra nueva zona. Si quieres ver cual es la zona por defecto lo puedes consultar con:
firewall-cmd --get-default-zone
Esto lo podemos cambiar editando el firecho de configuración de firealld:
sudo nano /etc/firealld/firewalld.conf
Debes buscar una directiva que se llama DefaultZone y setearla con la zona que deseas, en mi caso la dejare por defecto:
DefaultZone=public
No todas las zonas están activas, solo lo estarán aquellas que estén asociadas a algun dispositivo. Podemos ver las zonas activar con:
firewall-cmd --get-active-zones
Es importante conocer los servicio que podemos utilizar dentro de las zonas, servicio como dhcp, http, https y demás. Esto lo veremos con:
firewall-cmd --get-services
Estos servicios están definidos en archivos de configuración xml en el directorio:
ls -lF /urs/lib/firewalld/services
Puedes ver uno, por ejemplo el de ssh con:
cat /urs/lib/firewalld/services/ssh.xml
Las reglas de Firewalld
Vamos ahora a ver cómo obtener información de las reglas. Podemos ver las reglas de la zona por defecto con:
firewall-cmd --list-all
Esto nos mostrará la reglas de la zona por defecto. Si queremos ver las reglas de una zona en concreto solo debemos especificarla de la siguiente forma:
firewall-cmd --list-all --zone=work
Si quieres ver todas las reglas de todas las zonas lo puedes hacer con:
firewall-cmd --list-all-zones
Vamos a comenzar ahora a gregar reglas. En primer lugar podemos agregar o permitir una red interna a la dmz, un rango de IP’s al que se le permitan las reglas de la zona dmz. Esto lo podemos hacer con:
firewall-cmd --add-source=192.168.0.0/24 --zone=dmz
Con esto le decimos que todo lo que venga de ese rango de IP’s lo trate con las reglas de la zona dmz. Si no indicas la zona le asignará la zona por defecto, en este caso public.
Esta regla se va a aplicar inmediatamente, pero en caso de reiniciar el servicio se perderá. Para que no suceda esto debemos agregar la opción permanent de la siguiente forma:
firewall-cmd --add-source=192.168.0.0/24 --zone=dmz --permanent
En esta caso la regla no se aplica inmediatamente, sino que debemos reiniciar el servicio para que se aplique, pero con la salvedad de que será permanente, no se eliminará al reiniciar el servicio.
Podemos eliminar ese rango de IP’s con la opción remove de la siguiente forma:
firewall-cmd --remove-source=192.168.0.0/24 --zone=dmz --permanent
De nuevo debemos reinicar el servicio:
systemctl restart firewalld
Vamos ahora a gregar una interfaz a una zona, esto es para que todas las conexiones que entre por dicha interfaz se traten con la política de la zona que queramos. Esto lo podemos hacer con:
firewall-cmd --add-interface=enp0s1 --zone=dmz
Igual que en el caso anterior, si no usas –permanent al reiniciar el servicio desaparecerá esta configuración.
Del mismo modo podemos eliminarla con remove:
firewall-cmd --remove-interface=enp0s1 --zone=dmz
Tal vez lo más común es agregar y eliminar servicios y puertos. Para permitir un servicio lo haremos de la siguiente forma:
firewall-cmd --add-service=smtp --zone=dmz --permanent
Recuerda si no indicas que sea permanente se eliminar en el próximo reinicio del sistema.
Esta misma accióin podemos hacerla en lugar de agrengando el servicio, agregando el puerto. Para permitir un puerto en firewalld lo haremos de la siguiente forma:
firewall-cmd --add-port=25/tcp --zone=dmz -- permanent
Ten cuenta que tienes que añadir el puerto y el tipo tcp o udp.
Para que cargue esta nueva configuración podemos reiniciar el servicio o utilizar la opción reload del servicio de modo que no tenemos que reiniciarlo:
firewall-cmd --reload
Vamos ahora a eliminar el servicio con:
firewall-cmd --remove-service=smtp --zone=dmz --permanent
Y eliminar el puerto lo haríamos con:
firewall-cmd --remove-port=25/tcp --zone=dmz -- permanent
Reglas ricas o avanzadas
Con firewalld podemos utilizar reglas avanzadas con la opción add-rich-rule. La estructura básica sería:
firewall-cmd --add-rich-rule='regla'
Ahora veremos un par de ejemplo para ver la estructura o formato que debe tener la regla. Como siempre puedes obtener más ayuda con man:
man firewalld.richlanguage
Al final de la ayuda de man tienes varios ejemplos que te pueden servir de ayuda.
Vamos a ver un ejemplo donde vamos a aceptar todo el tráfico de una ip:
firewall-cmd --add-rich-rule='rule family="ipv4' source address="192.168.1.150" accept'
De este modo le decimos que todo lo que venga por IPv4 a la IP 192.168.1.150 sea aceptado.
Veamos ahora un ejemplo de redirección:
firewall-cmd --add-rich-rule='rule family IPv4 source address="192.168.1.120" forward-port to-addr="192.168.1.150" to-port="25" protocol="tcp" port="25"'
Con esto lo que estamos haciendo es redirigir todo lo que llegue por la IP 192.168.1.120 al puerto 25 al mismo puerto de la ip 192.168.1.150.
Por último, vamos a ignorar todo el tráfico que llegue por una determinada IP:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.4" drop'
Ya sabes cómo usar firewalld. Puedes aprender más en nuestra sección de servidores.
Espero que te haya sido de utilidad!