МАС-фильтрация с помощью Netfilter

Фильтрация МАС-адресов (Media Access Control, MAC) — это хорошо известный метод защиты беспроводных сетей. Этот тип фильтрации основан на принципе отказа по умолчанию: специально указываются узлы, которым разрешено соединение, остальные — не допускаются. МАС-адрес — это уникальное 48-разрядное число, которое присваивается каждому производимому Ethernet-устройству, включая устройства стандарта 802.11. Это число обычно записывается как шесть 8-разрядных шестнадцатеричных чисел, разделенных двоеточиями.  В дополнение к «родной» системе фильтрации IP-пакетов Netfilter Linux может осуществлять также фильтрацию МАС-адресов. Несмотря на то что точки беспроводного доступа, присутствующие на современном рынке, поддерживают ее, существует множество старых точек, которые этого не делают. МАС-фильтрация важна и в том случае, если ваша точка доступа сама по себе является Linux-машиной, использующей карты беспроводного доступа. Если межсетевой экран на основе Linux уже настроен, для включения его работы на МАС-уровне потребуется выполнить небольшие изменения. Фильтрация МАС-адресов с использованием jptables очень похожа на IP-фильтрацию и настолько же проста.
Представленный далее пример показывает, как разрешить конкретный МАС-адрес, если политика межсетевого экрана настроена на DROP:
iptables -A FORWARD -m state --state NEW \ -m mac -mac-source 00:DE:AD:BE:EF:00 -j АOOEPТ
Эта команда разрешает любой трафик, отправляемый из сетевого интерфейса с адресом 00:DE:AD:BE:EF:00. Использование подобных правил совместно с политикой отказа по умолчанию позволяет создавать «белый список» МАС-адресов, которые смогут проходить через шлюз. Для создания «черного списка» можно использовать политику разрешения по умолчанию PI изменить МАС-адрес, соответствующий конечному правилу, на DENY (отказ).
Это все очень просто, если вы заранее знаете МАС-адреса, для которых собираетесь создавать правила, а что делать, если они неизвестны? Если имеется доступ к системе, то МАС-адрес интерфейса можно найти с помощью команды ifconfig:
$ ifconfig ethO
ethO Link encap:Ethernet HNsddr 00:OC:29:E2:2B:C1
inet addr:192.168.0.41 Beast: 192.168.0.255 Mask:255.255.255.0
UP BROADOAST RUNNNG MULTICAST MTU:1500 Metric: 1
RX packets: 132893 errors:0 dropped:0 overruns:0 frame:0
TX packets:17007 errors:0 dropped:0 overruns:0 carrier:0
col 1isions:0 txqueuelen:100
RX bytes:46050011  (43.9 Mb) TX bytes:1601488  (1.5 Mb) Interrupt:10 Base address:0x1OeO
Здесь представлен МАС-адрес этого интерфейса — 00:0С:29:Е2:2В:С1. Результат выполнения команды ifconfig в других операционных системах может несколько отличаться от представленного, но в некоторой степени они все похожи (пример приведен для Linux). Удаленное определение МАС-адреса системы немного сложней и может выполняться с помощью команд агр и ping.
Например, для просмотра МАС-адреса, соответствующего IP-адресу 192.168.0.61, необходимо выполнить команды:
$ ping -с 1 192.168.0.61
$ /sbin/arp 192.168.0.61 | а^к '{print $3}'
либо воспользоваться следующим сценарием:
#!/bin/sh
ping -с $1 >/dev/null &&'/sbin/arp $1  I awk '{print $3}' \ |  grep -v Hwaddress

Метки: