Привет, прочел Вашу заметку на opennet.ru
Не обязательно писать на перле скрипт и потом проверять б/д и менять правила в файерволе.
Есть более простой способ. Я сделал так (идею тоже нашел на этом сайте):
1 Создал файл б/д привязки IP к MAC (например /etc/ethers.local)
Пример строк из файла:
192.168.0.11 00:0c:6e:3f:cd:e5 #kasa2
192.168.0.12 00:0d:88:82:da:a2 #mobil
и т. д.
2 Написал скрипт такого содержания: (например /etc/static.arp):
#!/bin/sh
# обнуляем всю таблицу arp
arp -ad > null
# к каждому компу в локальной сети привязываем несуществующий (нулевой)
# MAC адрес
I=1
while [ $I -le 254 ]
do
arp -s 192.168.0.${I} 0:0:0:0:0:0
I=`expr $I + 1`
done
# к реально существующему компу в сети из базы данных в файле
# /etc/ethers.local привязываем
# правильный MAC адрес
arp -f /etc/ethers.local
3. Делаем этот файл исполняемым и прописываем в файл /etc/rc.local такую
строчку:
/etc/static.arp
Еще желательно, чтобы привязки имен юзерских хостов к ip-адресам были
прописаны в /etc/hosts (это ускорит их поиск). Теперь сервер не будет
рассылать широковещательные запросы о локальных MAC адресах, т. к. все они
статически жестко привязаны к ip-адресам. Этим убивается два зайца: не
рассылаются широковещательные запросы, что экономит траффик и время на ответ сервера, и не позволяет пользователю менять свой ip-адрес, т. к. сервер все равно пакет будет отправлять на жестко привязанный MAC адрес.
Еще заметка. В нашей сети используются радиокарточки D-Link DWL 520+ Я еще не знаю, как для них под Виндой программно сменить аппаратный адрес (а под FreeBsd, насколько я знаю эти карточки не работают). Так что на некоторое время немного успокоился.
А вот сменить аппаратный (MAC ) адрес RTL-8139 под Виндой действительно очень легко (сам проверял даже под Win98), там прямо в драйвере --свойства карточки -- дополнительно -- аппаратный адрес. А ведь на таком чипе работает очень много, если не большинство современных дешевых сетевых карточек. И меняй какой хочешь, только надо знать какой писать. А узнать тоже довольно легко одинаково и под Виндами, и под BSD:
делаем команду ping на заведомо известный ip-адрес локальной сети, а
потом
командой arp -a смотрим что получилось
И в конце концов собираем всю таблицу привязки для всей локальной сети.
Потом только ждем когда отключится какой нибудь комп в локальной сети (тоже вычисляем командой ping), и спокойненько присваеваем его ip и MAC адреса, перезагружаемся и пользуемся инетом, а сосед оплачивает наши художества и соответственно ругается с нами-провайдерами, а мы ничего и поделать не можем, даже вычислить хулигана. И не помогут даже ни Ваши правила в файерволе, и ни моя статическая привязка. Правда такого беспредела еще у меня не было (бог миловал), но в перспективе возможно. И как от такого лечиться - не знаю.
Говорят знающие люди, что можно использовать туннелирование через VPN
протокол - там проверяется кроме ip и MAC адресов еще и логин и пароль (еще и шифруются). Но вот как настроить его под FreeBsd, извините, пока не знаю. Но работать и учиться в этом направлении надо обязательно, если что то такое об этом знаете, или ссылки какие есть - очень прошу прислать. Это скоро может быть жизненно необходимо.
Правда есть еще одна фича. Жесткая привязка ip к MAC адресам
существует и в Виндах, даже во всех, начиная с 98 (о 95 не знаю) не говоря
уже об ХР и 2К. Там есть команда типа
arp -s 157.55.85.212 00-aa-00-62-c6-09
Тоже делает жесткую привязку в таблице arp Поэтому если мы у каждого
пользователя жестко привяжем ip провайдерского сервера к его MAC адресу, а
все остальные ip привяжем к нереальным MAC адресам (это можно сделать
аналогично тому, как было описано выше, только все команды надо записать в
bat файл, а потом его прописать где то в реестре или в system.ini - это уже как больше нравится. Теперь локальная машина тоже не будет отправлять
широковещательные запросы, а будет отправлять ответы только на жестко
привязанные MAC адреса. А поскольку они все "от фонаря" кроме провайдерского сервера, то ни на какие команды вроде ping ответы приходить не будут (кроме сервера конечно т. к. на него прописан правильный МАС адрес). Этим хулигану обрубывается возможность узнать МАС адрес бедного простого юзера и естественно прописать он его не сможет. Простому юзеру объясняется что эта процедура делается для его же блага и безопасности. А если юзер и снесет ее из автозагрузки и хакер воспользуется этим - то тут уже на его претензии можно ответить, что он сам виноват, удалив прогу провайдера для обеспечения безопасности.
Есть одна издержка данного метода. После описанной процедуры простые юзеры не смогут связываться друг с дружкой и гонять игрушки по сети. Но в этом тоже есть свой плюс. Теперь появляется возможность контролировать локальный траффик хотя бы на качественном уровне -- той паре юзеров, которые хотят видеть друг друга в сети можем попарно дописать в таблицу arp еще по одному правильному МАС адресу. Т. е. узнать МАС адреса теперь они смогут только друг у дружки. А это конечно не так страшно, как если бы его мог узнать неизвестно кто, особенно если это все учитывать и вести журнал типа кому и что было когда то разрешено. Это намного сужает круг поиска, если кто то друг у друга все же сворует МАС адрес.
Кроме того за этот траффик в локальной сети можно брать еще небольшую дополнительную плату, в отличие от тех, кто такой услугой (или возможностью -не знаю как правильнее сказать) не пользуется. И предоставлять только тем, кто попросит.
PS Конечно я своими выкладками совсем не претендую на истину в последней
инстанции, но все же очень бы хотелось услышать Ваше мнение. Так что если
Вас не затруднит, то пожалуйста ответьте мне.
С уважением
Krigs