From: Alexander V. Naumochkin
Newsgroups: http://www.unixfaq.ru
Date: Mon, 17 May 2004 18:21:07 +0000 (UTC)
Subject: Как бороться со сменой IP адресов клиентами локальной сети
Подобная проблема как правило возникает в локальной сети с платным
доступом к интернет, где траффик считается по IP адресам.
Все приведенные ниже способы так или иначе используют аппаратный адрес
сетевой карты MAC - Media Access Control. Во время работы машины в
локальной сети в ее памяти хранятся пары MAC<->IP, которые обновляются
динамически. Если в памяти нет записи для какого-то IP адреса, то
посылается широковещательный запрос и машина имеющая этот IP отвечает.
Способ 1 (наиболее примитивный) - на все IP адреса MAC прописывается
статически с помощью команды arp(8). На не никем занятые адреса
прописывается MAC 0:0:0:0:0:0. Это можно делать приблизительно таким
скриптом:
#!/bin/sh
mynet="192.168.0.";
n=1
while ( [ n -lt 255 ]; ); do
arp -S $mynet$n 0:0:0:0:0:0
n=$(expr $n + 1);
done
arp -f /etc/ethers
Здесь соответственно в переменной mynet задается защищаемая подсеть, в
файле /etc/ethers лежат "правильные" пары IP<->MAC.
Однако все современные сетевые карты позволяют легко
перепрограммировать MAC адрес. Во всяком случае под FreeBSD, Linux и
тп это делается очень легко. Под различными Windows это возможно не
всегда, в зависимости от драйвера сетевухи. Поэтому ничего не стоит
прописать себе MAC 0:0:0:0:0:0 и спокойно работать с несуществующего
IP. Значит данный способ защитит от всяких "умников", которые знают
как мастдае меняется IP адрес. А от смены MAC это не спасет.
Способ 2: можно сделать так что бы arp lookup вообще не работал, и
записи в таблицу можно было вносить исключительно с помощью arp(8).
Тогда не придется присваивать нули всем пустым адресам. Делается это
так:
Теперь на этом интерфейсе arp не работает вообще. То есть не только не
принимаются обновления в arp-кэш, но и не отсылаются ответы на запросы
arp who-has. А это значит, что и на клиентских машинах необходима
статическая запись соответствия ip и MAC-адресов маршрутизатора. На
Windows-машинах это делается записью вида:
arp -s 192.168.1.1 00-79-36-FC-09-0F
В старых версиях FreeBSD поддержки флага -arp для интерфесов не было.
Ниже приведен патч к ядру FreeBSD который это делает(возможно подобные
патчи существуют и для других ОС).
В этом patch'е блокируется только обновление arp-кэша, ответы на
запросы не блокируются, поэтому статические записи на клиентских
машинах не требуются. В версиях FreeBSD старше чем 4.9-RELEASE патч не
требуется, такая функциональность есть out of box. Просто нужно
сконфигурировать интерфейс с флагом staticarp.
Однако если какой-то пользователь выключит свой компьютер, то "хакер"
может включить свой и установить его MAC. К сожалению против этого
дешевыми способами защититься нельзя.
Способ 3: (дорогой и надежный) Port Security. Необходимо приобрести
свитч, который позволяет сделать привязку MAC к конкретному
физическому порту в свитче. А на роутере в свою очередь делается
статическая привзяка IP к MAC, как описано в способе 1.Обмануть такую
защиту практически невозможно. Однако стоят такие свитчи немало.Один
из недостатков данного способа - клиенты будут удивляться, почему не
работает интернет после смены сетевой карты.
Способ 4: (В последнее время все более и более популярный)
Туннелирование. Для туннелирования в ethernet существует протокол
PPPoE. Пример настройки можно посмотреть здесь Cетевая часть->PPP
(http://www.unixfaq.ru/index.pl?id=79).
Альтернативные протоколы туннелирования PPTP и L2TP требует
предварительной выдачи клиенту какого-то IP адреса, поверх которого
уже будет ходить реальный.
Способ 5: - авторизация юзеров по паролю. При корректной реализации
(криптованные пересылки) способ почти такой же непробиваемый, как и
"умный" коммутатор. На машинке с firewall'ом ставится сервер и база
login:password, у юзеров - соответствующий клиент. Перед началом
работы юзер запускает эту софтинку, сообщает серверу свои
login/password, сервер прописывает в firewall'е разрешающее правило.
Юзер работает. Клиентская софтинка у юзера регулярно извещает сервер
"Я тут, я жив!". Когда юзер делает logoff или вырубает машину (сервер
не получает keep-alive от клиента) - правило в firewall'е сносится.
Пример реализации есть на http://nag.ru.
Способ 6: (идеальный и не достижимый) - 802.1x. Протокол придуманный
специально для авторизации в Ethernet. Основная идея состоит в том,
что все защищенные порты на свитче находятся в "отключенном"
состоянии, в котором они принимают только аутентификационные пакеты.
По получении такого пакеты свитч проверяет его подлинность и включает
порт. По окончании работы клиента порт снова "отключается". К
сожалению свитч поддерживающий этот протокол стоит ~ $350, и поддержка
802.1x операционными системами оставляет желать лучшего.
P.S. Имеет также смысл взглянуть на следующий софт - arpwatch
(http://www.Awfulhak.org/arpwatch/), который позволяет мониторить
смену MAC адресов клиентами.
Создано: Alexander V. Naumochkin
Последнее обновление: Gleb Smirnoff
553 Прочтений • [Как бороться со сменой IP адресов клиентами локальной сети (arp mac ethernet ifconfig freebsd limit security)] [08.05.2012] [Комментариев: 0]