Я опубликовал это на stackoverflow, но это было не по теме.
Я оглянулся и не смог найти ответ на свой вопрос. Я использую Raspberry Pi в качестве интернет-шлюза между моей локальной сетью и двумя глобальными сетями. Вот пример моей цепочки FORWARD в iptables.
Chain FORWARD (policy ACCEPT 541 packets, 164K bytes) pkts bytes target prot opt in out source destination 0 0 wifi.usb all -- * * 0.0.0.0/0 0.0.0.0/0 MAC 00:11:22:33:44:55 0 0 other.dev all -- * * 0.0.0.0/0 0.0.0.0/0 MAC 66:77:88:99:aa:bb 0 0 Local all -- * * 0.0.0.0/0 0.0.0.0/0
Эти устройства переходят на свои собственные цепочки для подсчета байтов и ПРИНЯТЬ. Переход к локальному предположению предполагает перехват любых пакетов не с вышеперечисленных устройств и REJECT WAN, но с разрешением LAN.
Chain Local (0 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * * 192.168.100.0/24 192.168.100.0/24 67 698 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Все пользовательские цепочки для устройств переходят на ACCEPT.
Chain wifi.usb (1 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
Однако при переходе к локальному правилу в FORWARD весь интернет-трафик входит в локальную цепочку и отклоняется. Как я могу по-прежнему использовать локальную цепочку, чтобы ловить неизвестные устройства, не ловя известные?
Редактировать: я забыл упомянуть одну вещь: когда я фильтрую по IP-адресу источника, он работает так, как я хочу, но я предпочитаю фильтровать по MAC-адресу.