Eu tenho uma caixa linux rodando o iptables. O tráfego passa por ele chegando em wlan0 e saindo pela wlan1. Eu quero permitir apenas máquinas específicas passarem. Eu tentei pelo MAC, ele falhou, então eu tentei por IP e para minha surpresa também falhou.
Para ambos os casos, coloco a política FORWARD como DROP
$ iptables -P FORWARD DROP
Então eu fiz
$ iptables -A FORWARD -i wlan0 -m mac --mac-source 76:AB:BF:80:4E:B3 -j ACCEPT
Quando não funcionou, eu ativei o log com:
$ iptables -I FORWARD -i wlan0 -j LOG
kern.log mostrou que meu endereço MAC de origem era o MAC do linux wlan0. Então eu tentei pelo endereço IP:
$ iptables -A FORWARD -s 192.168.1.10 -j ACCEPT
Também falhou. Eu então tentei deixar a política como aceitar e colocar o seguinte, para largar tudo, depois da minha regra acima:
$ iptables -A FORWARD -j DROP
Mas ainda não funcionou, pois meu cliente teve seu pacote descartado. Só funciona quando a política é ACCEPT (mas não há filtragem). Isso me faz acreditar que a regra não corresponde ao tráfego. O que estou fazendo errado?
EDITAR:
Minhas cadeias iptables completas:
$ 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
Tags iptables firewall linux forwarding