У меня есть сеть с 80 ПК и Ubuntu 12.04 как GW. Из соображений безопасности я хочу ограничить количество компьютеров, подключенных к этой сети, с использованием предварительно скомпилированной таблицы ARP. Другими словами, мне нужен инструмент, который разрешает доступ в интернет, только если пара ARP --> [IP-MAC]
предварительно настроена и игнорирует любую другую комбинацию. С помощью этой техники я хочу запретить пользователям изменять их IP-адресатов, которые назначены из резервирования DHCP, а затем получать доступ к неограниченным сетям и избегать применения правил escape from iptable
. Спасибо
3 ответа
Что вы действительно ищете, так это 802.1x Network Access Control. Это работает на RADIUS и требует проверки подлинности клиента перед доступом к сети. Существует несколько решений на основе Linux, в том числе:
Для клиентов:
- http://tldp.org/HOWTO/html_single/8021X-HOWTO/
- https://help.ubuntu.com/community/Network802.1xAuthentication
Для сервера NAC:
- PacketFence
- OpenNAC
- FreeNAC (в настоящее время этот проект только для обслуживания, а не для активной разработки)
Предполагая, что у вас нет управляемых коммутаторов, способных работать с виртуальными локальными сетями, вы можете перейти с PacketFence во встроенном режиме, как описано в документации. Это использует ipset
для изменения правил брандмауэра, чтобы разрешить трафик, но требует определенного разделения топологии (DNS на отдельном сегменте от хостов). Коммутаторы, которые может использовать PacketFence, перечислены здесь
ИСПРАВЛЕНИЕ !: Существует еще один встроенный способ управления arp-таблицами в Linux, см. man 5 ethers
. Вы добавляете записи в виде ethernet ip
в /etc/ethers
затем запускаете arp -f
чтобы обновить таблицу на основе этого. Смотрите man arp
для подробностей и http://gwallgofi.com/static-arp-linux/ для более подробных инструкций.
Чтобы ответить на ваш конкретный вопрос о таблицах arp, создайте в файле static-arp.conf
такие записи, как:
10.0.0.6 00:0c:29:c0:91:bf
10.0.0.7 00:0c:29:c0:92:bf
10.0.0.8 00:0c:29:c0:93:bf
10.0.0.9 00:0c:29:c0:94:bf
Затем запустите:
while read -u 10 arpentry ; do arp -s $arpentry ; done 10<static-arp.conf
По какой-то причине for I in
cat static-arp.conf
не работал, и мне пришлось переключиться на чтение -u, чтобы настроить дескриптор файла, не знаю почему ... но это добавило записи, перечисленные в списке. Затем вы можете распространять этот static-arp.conf
через nfs, git, rsync и т.д.
Vlans, вероятно, будет лучшей идеей, однако. Информация по использованию linux-pure vlan находится здесь.
Вы ищете что-то простое, как это?
iptables -A FORWARD -m mac --mac-source 00:01:11:11:11:11 -j ПРИНЯТЬ
Таким образом, вы можете установить только разрешенные mac-адреса для доступа в Интернет (вы также можете включить ip-адрес, и вам, скорее всего, понадобится хороший скрипт для его поддержки). Другие решения уже обсуждались в комментариях.
Изменить: я не смог решить отрицание (не сработало), но вы можете сделать это:
iptables -P FORWARD DROP
iptables -A FORWARD -s 192.168.1.1 -m mac --mac-source 00:01:02:03:04:05 -j ПРИНЯТЬ
«Отбрасывает ли это правило все пакеты, полученные из 192.168.1.1, и имеют ли они другой MAC-адрес, указанный в правиле?» Я думаю, это то, что вы просили.
Обратите внимание на несколько изменений - "пропавших без вести"!"и" -p tcp "- который отбрасывает только tcp пакеты.
Примечание 2. Помните, что упомянутый IP-адрес с другим MAC-адресом может, например, пинговать маршрутизатор. Чтобы предотвратить это, вы должны сделать то же самое в цепочке INPUT.
Я проверил и, кажется, работает
iptables -A FORWARD -s 192.168.1.1 -m mac! --mac-source 00:01:02:03:04:05 -j DROP
Отбросьте, если пакеты пришли с того ip с другим MAC, как указано в правиле. Единственная проблема заключается в том, что мне нужно вручную добавлять каждый ip, который я должен "защитить". На данный момент у меня есть только 2
*A illusion of protect since exist MAC spoofing
любом случае, это препятствует пользователям пытаться