IPsets con UFW en Ubuntu
Introducción
Este es un ejemplo que te permite tener UFW e IPSet con una lista blanca de IP de forma dinamica para una implementacion comun de firewall en Ubuntu
Primero necesitas un script systemd
que crea un ipset
al arraque del sistema, y posterior un script que integra el ipset
con UFW para permitir el trafico especifico, se necesitará crear 2 conceptos principales.
- Un script de servicio
systemd
que crea y carga el ipset al inicio - Un perfil de aplicación en UFW o editar de forma directa las reglas para utilizar el
ipset
para permitir el trafico
Servicio Systemd para IPset
1. Crear el script de ipset
Primero, crear un script para cargar el ipset
. Llamaremos el script create_ipset.sh
/usr/local/bin/create_ipset.sh
#!/bin/bash
# Nombre de la ipset
IPSET_NAME="whilelist"
# Liberar si exite y crear
ipset ipset -exist flush $IPSET_NAME
ipset -exist create $IPSET_NAME hash:ip
# Opcional, agregar IP's aqui o por un mecanismo distinto
ipset add $IPSET_NAME 192.168.1.100
Asegurarse que hacer el script ejecutable
sudo chmod +x /usr/local/bin/create_ipset.sh
2. Crear el archivo de servicio systemd
Crear el nuevo archivo de servicio en systemd
y lo llamaremos ipset.service
/etc/systemd/system/ipset.service
[Unit]
Description=Crear IPSET para lista blanca
Before=ufw.service
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/create_ipset.sh
[Install]
WantedBy=multi-user.target
El script define la ejecucion antes de iniciar UFW (como se indica en Before=ufw.service
) pero despues de que la red este disponible (After=network.target
)
Integrar IPset en UFW
Para integrar ipset
con UFW, sera necesario editar las reglas iptables
de UFW ya que este no soporta ipset
de forma normal en sus archivos de configuración. Para esto será necesario modificar las reglas en el archivo user.rules
o after.rules
, dependiendo donde se quiera aplicar el filtrado
Agregar en las reglas de UFW
Editar el archivo deseado, para este ejemplo se utilizara el archivo after.rules
agregando la regla personalizada haciendo la referencia a ipset
/etc/ufw/after.rules
...
-A ufw-after-input -m set --match-set whilelist src -p tcp --dport 22 -j ACCEPT
...
COMMIT
La regla permite el acceso al puerto 22 para las direcciones IPs registradas en whitelist de ipset
Notas a considerar
- Pruebas: Siempre probar el firewall en ambientes controlados antes de poner en produccion, ya puedes tener bloqueos no deseados. Puedes probar con otro puerto distinto al 22 u otro puerto productivo.
- Orden de ejecucion: El script de systemd necesita ejecutarse antes que UFW inicie, por eso la directiva
Before=ufw.service
. Asegurarse que la red esta habilitada antes de que el script se ejecute.
Con esta configuracion, tu servidor creará e inicializará ipset
para ser utilizado en UFW para permitir trafico como se especifique en los scripts. Es provee un balance entre la simplicidad de UFW y el poder ipset
e iptables
. Siempre asegurarse de probar y verificar la configuracion en ambientes controlados antes de aplicarlos en producción.
Comentarios
Publicar un comentario
Son bienvenidos tus comentarios, solo se respetuoso. Saludos