Нет, это нельзя сделать с помощью iptables. Ответ в названии команды и в том, что вы пытаетесь сделать.
В модели OSI MAC-адреса принадлежат канальному уровню. Это означает, что протоколы, такие как IEEE 802.3 (Ethernet), имеют концепцию MAC-адресов, а протоколы, такие как IPv4, - нет. Протоколы канального уровня могут рассматриваться как передающие "кадры".
Обратите внимание, что iptables
содержит "IP", что означает интернет-протокол. Это протокол на сетевом уровне, который является более высоким уровнем, чем канальный уровень. Протоколы сетевого уровня могут рассматриваться как передающие "пакеты".
Поскольку протоколы построены друг на друге как стек, протоколы более низкого уровня могут напрямую влиять на поведение протоколов более высокого уровня, а не наоборот. Таким образом, инструмент, работающий на уровне IP, не может напрямую влиять на поведение аппаратного устройства, работающего, например, на уровне Ethernet (802.3).
Если вы знаете о HTTP, вы можете думать об этом так. Как бы вы ответили, если бы кто-то спросил вас: «Как я могу отправлять произвольные данные через TCP-порт 6790, просто используя HTTP?«Ответ заключается в том, что вы не можете - например, порт TCP уже определен к тому времени, когда протокол HTTP находится в игре. Во-вторых, протокол HTTP имеет обязательные заголовки и структурные элементы, которые нельзя удалить без нарушения стандарта. Поэтому, как только вы говорите "HTTP", вы говорите о работе в существующем сокете TCP на заранее определенном порту, и вы застряли, придерживаясь правил протокола HTTP.
То же самое относится и к IP. Как только вы работаете с логическими адресами в стеке IP, вы не можете "проникнуть" вниз на физические уровни и делать низкоуровневые вещи. В качестве простого объяснения, почему устройство может иметь действительный адрес IPv4, но работать с использованием канального уровня, который вообще не использует MAC-адреса. Например, протокол USB может быть разработан для передачи IP-пакетов, но он не будет иметь понятия "Ethernet" или "кадры", поэтому он не будет иметь MAC-адреса или не будет реализовывать стандарт IEEE 802.3.
Что вам нужно, это ebtables
. ebtables
позволит вам выполнить аналогичную обработку на уровне кадра Ethernet . Вы должны быть уверены, что все устройства, которые вы хотите использовать для брандмауэра, имеют прямое подключение к сети Ethernet по отношению к компьютеру, который выполняет брандмауэр, иначе это не сработает. И если какое-либо из ваших устройств вообще не использует Ethernet, вам не повезло.