Tengo una caja de Linux que ejecuta iptables. El tráfico lo atraviesa entrando en wlan0 y saliendo en wlan1. Quiero permitir que solo pasen máquinas específicas. Lo intenté por MAC, falló, luego lo intenté por IP y para mi sorpresa, también falló.
Para ambos casos puse la política FORWARD como DROP
$ iptables -P FORWARD DROP
Entonces lo hice
$ iptables -A FORWARD -i wlan0 -m mac --mac-source 76:AB:BF:80:4E:B3 -j ACCEPT
Cuando no funcionó, activé el registro con:
$ iptables -I FORWARD -i wlan0 -j LOG
kern.log mostró que mi dirección MAC de origen era la MAC del linux wlan0. Luego probé por dirección IP:
$ iptables -A FORWARD -s 192.168.1.10 -j ACCEPT
También falló. Luego intenté dejar la política como aceptar y poner lo siguiente, para dejar todo, después de mi regla anterior:
$ iptables -A FORWARD -j DROP
Pero aún así no funcionó ya que mi cliente perdió su paquete. Solo funciona cuando la política es ACEPTAR (pero luego no hay filtrado). Eso me hace creer que la regla no coincide con el tráfico. ¿Qué estoy haciendo mal?
EDITAR:
Mis cadenas completas de iptables:
$ iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere MAC 76:AB:BF:80:4E:B3
ACCEPT all -- 192.168.1.10 anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
fuente