Ограничить доступ по MAC к интерфейсу
-
Хай. гайз!
Как осуществить сабж?
Не могу найти как это сделать. Например, я хочу, чтобы в локальной сети некоторые девайсы никак не могли добраться до смотрящего в этот сегмент интерфейса pfSense.
Спасибо! -
@hitch в настройках есть ограничение по ip адресу. Если в DHCP маки привязаны к ip...
-
@descod это несколько не то. Это уже получается мак получил доступ к интерфейсу и всю инфу с дхцп заалчил.
А я хочу прям на сетевом уровне банить. -
@hitch
Добрый
Из коробки PF работает на сетевом уровне и выше , а Вам нужен канальныйЯ лично вижу решение Вашей проблемы 2 путями
1 использовать фильтрацию MAC адресов на уровне коммутатора
2 если нужно именно решать проблему через PF , то можно ее решить с помощью сетевой подсистемы Freebsd Netgraph -
Добрый.
@hitch
Развернуть radius в сети? -
@werter ни разу не пробовал это делать. Раньше юзал WatchGuard XTM. Там это просто делалось прям на интерфейсе соответствующем.
-
@hitch
Есть еще вариант с дхцп, когда получение ip возможно только разрешенным МАКам. -
@werter да, это я пробовал. Нет особого смысла. Руками вносят адрес и работают спокойно
-
@hitch
тогда radius
возможно, понадобится свитч, к-ый умеет в radius
поищите инфу -
@Hitch это не то. IP легко подменить
-
@Hitch
ЗдравствуйтеКак я уже писал ранее , проблема в том , что PF работает чуть выше уровнем , чем Вам надо (см статью в этой ветке порядок прохождения пакетов )
Если все-таки надо фильтровать на уровне канальном с анализом Ethernet заголовка и именно на PF , то я бы решал эту проблему через Netgraph ( но в лоб ее не решить , нужно приложить некие усилия )
Суть в том , что эта подсистема позволяет перехватывать и анализировать трафик именно в том момент , когда он передается от драйвера адаптера к ядру системы и наоборот
Таким образом , можно отсеивать пакеты с неразрешенными Mac- адресами и пропускать валидные пакеты
Тут есть 2 пути
1 использовать комбинацию модулей ng_ether +ng_bpf
(они уже встроены в ядро PF , и тут надо только написать грамотный скрипт и составить bpf- программу , используя tcpdump)
пример такой программыprintf "Configuring ${INTERFACE}_bpf..." ngctl msg ${INTERFACE}_bpf: setprogram { thisHook=\"${INTERFACE}_to_bpf_from_tee\" \ ifMatch=\"${INTERFACE}_from_bpf_to_one2many\" ifNotMatch=\"drop\" \ bpf_prog_len=19 bpf_prog=[ { code=40 jt=0 jf=0 k=12 } { code=21 jt=16 jf=0 k=34525 } \ { code=21 jt=0 jf=15 k=2048 } { code=48 jt=0 jf=0 k=23 } { code=21 jt=0 jf=13 k=17 } \ { code=40 jt=0 jf=0 k=20 } { code=69 jt=11 jf=0 k=8191 } { code=177 jt=0 jf=0 k=14 } \ { code=72 jt=0 jf=0 k=14 } { code=21 jt=0 jf=8 k=53 } { code=80 jt=0 jf=0 k=24 } \ { code=84 jt=0 jf=0 k=128 } { code=21 jt=0 jf=5 k=128 } { code=32 jt=0 jf=0 k=30 } \ { code=21 jt=2 jf=0 k=3232236006 } { code=84 jt=0 jf=0 k=4294967264 } \ { code=21 jt=0 jf=1 k=3232235808 } { code=6 jt=0 jf=0 k=65535 } { code=6 jt=0 jf=0 k=0 } ] } printf "OK! \n"
2 использовать комбинацию модулей ng_ether + ng_macfilter
тут все несколько отличается от пути 1 и конфигурируется тоже легче , НО тк модуль ng_macfilter не интегрирован в ядро PF , то
его придется отдельно собирать под конкретную версию Freebsd
https://www.gsp.com/cgi-bin/man.cgi?section=4&topic=NG_MACFILTERhttps://github.com/freebsd/freebsd-src/blob/main/sys/netgraph/ng_macfilter.c
посмотреть , с какими модулями собрано ядро можно командой
kldstat -v | grep ng_