[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

iptables y filtrado de muuuuchas MAC



Antes de nada, un saludito a la lista: estuve apuntado hace
ya un puñado de años... y ahora procuro volver.

A lo que vamos. Tengo un problema que sé que creo resolver, pero no sé
si habrá otra mejor solución o si simplemente estoy reinventando la
rueda (quizás haya software que lo haga ya, pero no lo he encontrado).

Mi problema son los smartphones: hay demasiados y no quiero dejar que se
conecten a la red wifi o, mejor dicho, que se conecten a internet a
través de la red wifi.

He estado indagando sobre esto y he logrado identificarlos más o menos
fielmente con el servidor dhcp siguiendo ciertos criterios que ahora no
vienen a cuento.

Muy bien, ya los tengo identificados y se me ocurre, bien darles un
subrango de direcciones ip que luego filtro con iptables, bien
denegarles directamente la ip. Hasta aquí todo bien. El problema es que
este es un criterio demasiado endeble, porque siempre queda la
posibilidad de que un avispado se de cuenta de que poniendo él una ip
fija, consigue salir a internet; y luego se propague la voz.

Para atajarlo se me ha ocurrido lo siguiente:

1. Al identificarlo con el servidor dhcp como un smartphone, además de
   darle ip en el subrango filtrado, apunto su dirección MAC en el fichero
   de log (pongamos que es /var/log/dhcpd.log).

2. Me creo un demonio que cada medio minuto, por ejemplo, recopile esas
   MAC y cree reglas de filtrado de iptables. Para no acumular y
   acomular direcciones MAC, el veto dura cierto tiempo, después del
   cual elimino la regla.

3. Esto que pretendo hacer es algo parecido a lo que hace denyhosts o,
   más aún, fail2ban. No he usado este segundo, pero me imagino que ni
   tiene esto que quiero ni habrá posibilidad de escribirle "un módulo",
   porque supongo que su filtrado se basa en ip de origen y el mío tiene
   que ser mac de origen.

Mi duda viene de cuál es la mejor forma de crear las reglas iptables
para que las comprobaciones de las reglas de filtrado de MAC sean las
mínimas, ya que quizás puede que se junten muchas MAC vetadas y eso
imagino que relentizará el flujo de paquetes.

A mí se me ha ocurrido lo siguiente (supongamos que las comunicaciones
con los equipos de la red wifi se reciben por la interfaz eth1):

iptables -t nat -N SMARTPHONES
iptables -t nat -A PREROUTING -i eth1 -p tcp -j SMARTPHONES
iptables -I FORWARD -m connmark --mark 0xfe -j DROP
iptables -I INPUT -m connmark --mark 0xfe -j DROP

# Todas estas reglas serían las que tendría
# dinámicamente que ir creando y borrando
iptables -I SMARTPHONES -m mac --mac-source AA -j CONNMARK --set-mark 0xfe
.
.
.
iptables -I SMARTPHONES -m mac --mac-source ZZ -j CONNMARK --set-mark 0xfe

O sea, la idea que tengo es solamente hacer las comprobaciones de la MAC
con el primer paquete de la conexión y ponerle una marca. Eso evita que
los siguientes paquetes de las máquinas que pueden conectar tengan que
atravesar de nuevo toda la lista de direcciones MAC. ¿Es buena idea
esto? ¿Creéis que funcionará? Lo que no sé si hacer es justamente
después de marcar el paquete, salir de la cadena SMARTPHONES:

iptables -A SMARTPHONES -m mac --mac-source AA -j CONNMARK --set-mark 0xfe
iptables -A SMARTPHONES -m connmark --mark 0xfe -j RETURN

Esto duplica las reglas de la cadena SMARTPHONES a cambio de no tener
que comprobar todas las reglas, si el paquete resulta marcado. No sé qué
será lo menos costoso: supongo que dependerá de la proporción de
máquinas filtradas respecto a las totales. Tampoco sé muy bien si todas
las comprobaciones son igual de costosas: imagino que no.

De antemano, muchas gracias y perdón por el tochazo.

-- 
   Femmina è cosa mobil per natura.
                  --- Francisco Petrarca ---


Reply to: