Мне нужно заблокировать определенные хосты (мульти-ОС) в нашей локальной сети от получения доступа в Интернет. Я решил попробовать заблокировать определенные хосты по mac-адресу через iptables, но я не могу использовать mac-адрес рабочей станции, поскольку он проходит через коммутатор L3, и кадр перестраивается с mac-адресом интерфейса коммутатора. Я подтвердил это с помощью tshark
утилиты Wireshark.
Я знаю, что могу заблокировать по IP-адресу, но я не могу контролировать, если пользователь изменит свой IP-адрес и, таким образом, блокировка будет обойти. Я думаю, что решение можно найти с помощью скрипта, который делает следующее:
- Обновите таблицу ARP с помощью fping:
fping -c 1 -g 10.10.10.0/24
- Выполните команду Grep таблицы ARP, чтобы получить IP из списка MAC-адресов, например, из файла:
arp -n | grep "00:11:22:aa:bb:cc" | awk '{print $1}'
- Создайте хэш или массив и динамически обновите iptables с IP-адресами, которые нужно заблокировать. Я бы, наверное, использовал файл и сделал что-то вроде
iptables-restore < ips_to_deny
. - Запускайте этот скрипт примерно каждые 5 минут. (Не уверен насчет времени)
Итак... вопрос. Видите ли вы недостатки в этом методе? Или способы его улучшить?
- На ум приходит подмена Mac, но у пользователей хоста нет прав администратора.
Я бы использовал для скрипта Perl или Ruby, если это имеет большое значение.
решение1
Мне пришлось столкнуться с похожей ситуацией при организации больших LAN-вечеринок (>500 пользователей), где у вас не было контроля над рабочими станциями, довольно интересно.
Если ваш коммутатор L3 (технически маршрутизатор) достаточно высокого класса, он, вероятно, управляется по протоколу SNMP, и вы можете прочитать его таблицу ARP для соответствующей подсети (той, которая напрямую подключена к станциям), чтобы получить эффективные сопоставления MAC/IP.
Однако если вы боитесь, что машина изменит IP-адрес без вашего согласия, вам, вероятно, следует также беспокоиться о том, что машина изменит MAC-адрес. Если вы уверены, что машина не изменит MAC-адреса, мы использовали еще один вариант: анализировать журналы DHCP-сервера. В качестве бонуса вы также можете сопоставлять журналы DHCP и таблицы ARP для обнаружения спуферов.
Если ваши коммутаторы поддерживают это, вы также можете использовать аутентификацию 802.1x. В этом режиме машина должна пройти аутентификацию на коммутаторе через Radius, прежде чем она начнет фактически коммутировать пакеты, и для каждой аутентификации сервер Radius получает идентификационные данные, физическое местоположение и MAC-адрес станции.
решение2
Мне все это кажется слишком сложным и может стать одним из тех «индивидуальных» решений, которые, как правило, становятся проблемой в будущем (например, «такой-то настроил это давным-давно, прежде чем уйти из компании, и никто не знает, как это изменить»). Поэтому я бы лично рассмотрел что-то более стандартизированное.
Если у вас нет необходимости, чтобы устройства с доступом в Интернет и без доступа в Интернет находились в одном сегменте сети L2, я бы реализовал обход аутентификации mac 802.1X (MAB). Вы можете сделать это так, чтобы аутентифицированным устройствам была предоставлена одна VLAN, а устройства, которые не прошли аутентификацию, были помещены во вторую VLAN.
Если ваши коммутаторы не поддерживают только MAB (т. е. MAB вступает в силу только после сбоя аутентификации IEEE 802.1X), вы можете уменьшить значения повтора и тайм-аута для аутентификации IEEE до минимальных значений. Поскольку вас не волнует аутентификация IEEE, и она быстро даст сбой, вам не потребуется настраивать какой-либо запрашивающий сервер, если вы не захотите этого сделать.
Для большей безопасности вы бы настроили MAC-адреса для всех устройств, которые должны иметь доступ в Интернет, разрешив только этим устройствам проходить аутентификацию и быть помещенными в VLAN, которая предоставляет доступ в Интернет. Однако, если вы хотите ограничить только определенные устройства (и позволить новым устройствам автоматически подключаться к Интернету), вы можете настроить его так, чтобы неудачные аутентификации помещались в VLAN с доступом в Интернет, а успешные аутентификации помещались в VLAN без доступа.
Вы не указываете причины, по которым вы хотите это сделать, но это также предоставило бы возможность легко ограничить доступ между двумя наборами хостов, если бы для этого были какие-либо причины.