OpenWrt: Control Parental II, matando conexiones

En este artículo vimos como controlar los dispositivos conectados a nuestro router, administrar en que horario se podían conectar a Internet, que tipo de contenido ver, etc, utilizando dnsmasq. Pero este método tenia un problema, y es que no desconectaba los dispositivos que ya tenían una conexión activa en el router.

Esto lo podemos solucionar creando un sencillo script y utilizando cron para programar su ejecución cada 20 minutos, o el tiempo que tu quieras establecer, para volver a ordenar las reglas del cortafuegos.

Script

Creamos el fichero /etc/cronfw.sh e insertamos el siguiente script:

#!/bin/sh

# Insert rule for forwarding established connection traffic, just before the final rule (reject)
new_rule_num=$(iptables -v -L FORWARD --line-numbers | grep reject | cut -d ' ' -f 1)
iptables -I FORWARD $new_rule_num -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Delete first rule for forwarding established connection traffic
old_rule_num=$(iptables -v -L FORWARD --line-numbers | grep ESTABLISHED | cut -d ' ' -f 1 | sed -n 1p)
iptables -D FORWARD $old_rule_num

# Get rid of any duplicate ESTABLISHED rules (these seem to be caused when restarting the firewall)
est_count=$(iptables -v -L FORWARD --line-numbers | grep ESTABLISHED | wc -l)
while [ $est_count -gt 1 ]; do
      old_rule_num=$(iptables -v -L FORWARD --line-numbers | grep ESTABLISHED | cut -d ' ' -f 1 | sed -n 1p)
      iptables -D FORWARD $old_rule_num
      est_count=$(iptables -v -L FORWARD --line-numbers | grep ESTABLISHED | wc -l)
done

y le damos permisos de ejecución

chmod +x /etc/cronfw.sh

Cron

Ahora vamos a SistemaTareas programadas

e insertamos la siguiente línea:

*/20 * * * * /etc/cronfw.sh

Esto hará que se ejecute cada 20 minutos

Nos aseguráramos de que el cron esté habilitado, en SistemaInicioRearrancar

Si no funciona asegúrate de que tienes instalado el paquete ipset

Espero que te haya gustado, pasa un buen día… 🐧

Fuente: