The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Как бороться со сменой IP адресов клиентами локальной сети (arp mac ethernet ifconfig freebsd limit security)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: arp, mac, ethernet, ifconfig, freebsd, limit, security,  (найти похожие документы)
From: Alexander V. Naumochkin Newsgroups: http://www.unixfaq.ru Date: Mon, 17 May 2004 18:21:07 +0000 (UTC) Subject: Как бороться со сменой IP адресов клиентами локальной сети Оригинал: http://www.unixfaq.ru/index.pl?req=qs&id=169 Как бороться со сменой IP адресов клиентами локальной сети? Оглавление * Статический ARP * Статический ARP + NOARP * Port Security * Туннелирование * Самописная аутентификация * 802.1x Подобная проблема как правило возникает в локальной сети с платным доступом к интернет, где траффик считается по 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 на интерфейс: ifconfig fxp0 -arp и в файле /etc/rc.conf: ifconfig_fxp0="inet 192.168.1.1 netmask 255.255.255.0 -arp" Создаем файл, в котором прописываем соответствия ip и MAC-адресов (например, /etc/ether.local) такого вида: 192.168.1.2 00:80:23:5F:65:8C 192.168.2.3 00:5C:67:9A:55:5B . . . Очищаем arp-кэш и загружаем статическую таблицу: arp -ad arp -f /etc/ether.local и добавляем последнюю команду в /etc/rc.local Теперь на этом интерфейсе arp не работает вообще. То есть не только не принимаются обновления в arp-кэш, но и не отсылаются ответы на запросы arp who-has. А это значит, что и на клиентских машинах необходима статическая запись соответствия ip и MAC-адресов маршрутизатора. На Windows-машинах это делается записью вида: arp -s 192.168.1.1 00-79-36-FC-09-0F В старых версиях FreeBSD поддержки флага -arp для интерфесов не было. Ниже приведен патч к ядру FreeBSD который это делает(возможно подобные патчи существуют и для других ОС). --- if_ether.c.stdThu Sep 10 18:22:48 1998 +++ if_ether.cFri Sep 11 16:53:22 1998 @@ -482,6 +482,7 @@ itaddr = myaddr; goto reply; } +/*VV*/if (!(ac->ac_if.if_flags & IFF_NOARP)) { la = arplookup(isaddr.s_addr, itaddr.s_addr == myaddr.s_addr, 0); if (la && (rt = la->la_rt) && (sdl = SDL(rt->rt_gateway))) { if (sdl->sdl_alen && @@ -501,6 +502,7 @@ la->la_hold = 0; } } +/*VV*/} reply: if (op != ARPOP_REQUEST) { m_freem(m); В этом 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

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1.1, bdrFsg (?), 16:50, 23/04/2005 [ответить]  
  • +/
    Полезная вещь, спасибо
     
  • 1.2, kostik (??), 10:28, 02/09/2005 [ответить]  
  • +/
    А можно ли как-нибудь не запрещать серверу раздавать свой MAC адрес клиентским машинам?
    Просто в сетке есть ноуты, которые помимо инета в офисе пользуются инетом дома и прописывать им arp -s совсем не эстетично и не практично.
    Спасибо.
     
  • 1.3, Nab (ok), 04:48, 07/07/2006 [ответить]  
  • +/
    Есть еще ipsintel и arpalert, хотя насколько я знаю ни одна из них не спасает от одновременной смены адреса и мака :(
     
  • 1.4, anonymous (??), 15:53, 22/11/2006 [ответить]  
  • +/
    Способ 1 можна дополнить и превратить в Способ 2 но без проблем со статическим mac для маршрутизатора.

    iptables -A INPUT -s 192.168.0.0/24 -m mac --mac-source 00:00:00:00:00:00 -j DROP

    Смена mac'а на 0:0:0:0:0:0 "умному" юзеру теперь не не поможет.

     
     
  • 2.5, Alexandr (??), 12:44, 12/03/2007 [^] [^^] [^^^] [ответить]  
  • +/
    На мой взгляд проще в этом случае выдать фиксированные адреса с помощью сервера DHCP, затем остальным закрыть и тогда не поможет "умному" юзеру смена мака на 00:00:01:00:00
     

  • 1.6, Miha (??), 22:07, 30/07/2007 [ответить]  
  • +/
    Люди а вот Вы мне не подскажете как именно прописать в Ubuntu 7.04 MAC на 0:0:0:0:0
     
     
  • 2.7, Бурзум (?), 21:32, 29/03/2008 [^] [^^] [^^^] [ответить]  
  • +/
    ifconfig <iface> hw ether <mac>

    results may vary

     

  • 1.8, Ing (?), 13:41, 21/04/2008 [ответить]  
  • +/
    Некоторое время назад я размышлял над этим вопросом, в результате которой родилась теоретически работающая схема, но на практике она не проверялась.
    Схема такова:
    При подключении клиентской машины к сети первая позылает в сеть самопроизвольный широковещательный ответ типа: "мой IP такой<->мой МАС такой".
    Выделенный для известной цели сервер отслеживает подобные ответы с помощью arpwatch и передает в syslog. Последний обрабатывается например при помощи syslog-ng с выставленными фильтрами на эти случаи и передает в качестве параметров связку IP<->MAC скрипту. Скрипт читает данные из БД и в случае успешной проверки на валидность вносит в межсетевой фильтр соответствующее правило.
     
  • 1.9, Владимир (??), 17:32, 10/07/2008 [ответить]  
  • +/
    Не проще ли настроить DHCP, а учёт вести по логину?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру