Категорії
FreeBSD Linux Security Solaris

Static ARP защита от подмены IP и MAC.

Updated 24.06.2022

FreeBSD

Всё ниже описаное происходило на FreeBSD 8.0 Release.

static arp позволяет вручную задавать записи соответствия IP и MAC. В обычном режиме работает так называемый “динамический” arp, записи о котором обновляются каждые 20 минут. Это значение можно посмотреть так:

#sysctl net.link.ether.inet.max_age

а изменить вот так:

# sysctl net.link.ether.inet.max_age=10
net.link.ether.inet.max_age: 1200 -> 10

Теперь вернёмся к static arp. Мы будем настраивать так, что бы только избранные пары IP-MAC могли общаться с нашим сервером. static arp включается на каждой сетевой карте отдельно. Что бы его включить делаем так:

#ifconfig le0 staticarp

Что бы посмотреть, действительно ли у нас всё применилось, выполним команду:

# ifconfig le0
le0: flags=88843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,STATICARP> metric 0 mtu 1500
options=8
ether 00:0c:32:8e:d5:50
inet 10.10.10.10 netmask 0xffffff00 broadcast 10.10.10.255
media: Ethernet autoselect
status: active

Наличие слова STATICARP в угловых скобках говорит о том, что мы сделали всё верно. Теперь можно переходить к составлению пар IP-MAC. Создаём файл /usr/local/etc/arp.list такого содержания (допускаются комментарии через ‘#‘):

10.10.10.10 00:0c:32:8e:d5:50 pub
10.10.10.111 00:15:46:fb:44:f2 pub
10.10.10.49 00:1d:77:7b:40:54 pub
#10.10.10.33 00:02:34:66:f9:97 pub

то есть сопоставляем IP – MAC. После этого нужно очистить текущую таблицу arp и загрузить новую, из файла. Если вы находитесь непосредственно у сервера, на консоле, то волноваться нечего, ибо в случае чего можно вернуть всё обратно. Но если же вы далеко и подключены через ssh, будьте осторожны и внимательны, не забудьте добавить все нужные IP и MAC.

Теперь переходим собственно к команде очистки и наполнения arp-таблицы:

#((arp -a -d && arp -f /usr/local/etc/arp.list ) || ifconfig le0 -staticarp) &

Я на всякий случай добавил отключение staticarp, если что-то пойдёт не так. Запускать нужно именно в фоне, ибо в момент запуска очищается таблица и вас выбрасывает из сессии. Поэтому рекомендую работать в “скринах”, что бы потом просто подключиться к сессии.

После этого смотрим arp-таблицу:

$arp -a
freebsd80 (10.10.10.10) at 00:0c:32:8e:d5:50 on le0 permanent
skeletor (10.10.10.111) at 00:15:46:fb:44:f2 on le0 permanent published
? (10.10.10.49) at 00:1d:77:7b:40:54 on le0 permanent published

Как видим, у нас только те адреса, которые указаны в файле.

Что бы после ребута у нас ничего не слетало, сделаем следующее. В /etc/rc.conf в строку, где определяется адрес интерфейса добавим параметр staticarp:

ifconfig_le0="10.10.10.10/24 staticarp"

ну и создадим стартовый скрипт для очистки и наполнения arp-таблицы:

$ cat /usr/local/etc/rc.d/static_arp.sh
#!/bin/sh
((arp -a -d && arp -f /usr/local/etc/arp.list ) || ifconfig le0 -staticarp)

Сделаем его исполняемым и поместим в папку /usr/local/etc/rc.d. После этого можно полноценно работать. При добавлении нового адреса нет надобности использовать данный скрипт, ибо он обрывает все соединения. Лучше всего добавлять вручную (естественно, что не забываем добавлять его и в файл!). Делается это так :

#arp -s 10.10.10.33 00:01:52:8d:f9:54 pub

Linux

Выключаем arp на интерфейсе:

# ip link set eth0 arp off

Добавляем запись arp:

# ip neighbor add 10.0.0.1 lladdr aa:bb:cc:dd:ee:ff dev eth0

Или можно использовать arp -f <filename> для чтения из файла

Solaris

Выключаем arp на интерфейсе:

# ipadm set-ifprop -p arp=off net0

Добавляем запись arp:

# arp -s 10.1.2.1 00:10:20:30:40:50 permanent pub

Или можно использовать arp -f <filename> для чтения из файла

29 коментарів “Static ARP защита от подмены IP и MAC.”

Лучше сделать по другому. Static arp не поднимать, а грузить таблицу используемых адресов при старте системы через arp -f /etc/arptable. А трафик со свободных адресов на 80 порт заворачивать в страницу с ругательством и угрозами юзеру административными карами ;).

Лучше сделать как написано в статье. Adsh, видимо, невнимательно читал статью, то что он предлагает совершенно не спасает от подмены адресов. В начале статьи сказано правильно, через 20 минут или если адрес свободен (ПК с этим адресом выключен) его может использовать любой. Проверил лично – надо делать именно так, как пишут в статье.

При выполнении команды arp -f /etc/arptable подменить уже прописанный адрес нельзя, можно только поставить свободный адрес и увидеть в броузере ругательство администрации сети.

Подмена делается так: сначала полностью очищается таблица (выполняем ard -a -d) затем заполняем новыми значениями(arp -f /path/to/file).

Здравствуйте!
Не срабатывает у меня скрипт! Я правильно сделал: создал файл static_arp.sh в /usr/local/etc/rc.d – с таким содержимым: #!/bin/sh

((arp -a -d && arp -f /usr/local/etc/arp.list ) || ifconfig em1 -staticarp), но пред этим ввел строчку #cat /usr/local/etc/rc.d/static_arp.sh

Добрый день.
Строка #cat /usr/local/etc/rc.d/static_arp.sh в скрипте не нужна. Скрипт должен начинаться со строки #!/bin/sh

Я в скрипт её и не вводил, а просто выполнил, но скрипт не сработал.

Скрипт работает всегда, так как в нём есть условие – при успешном выполнении команды arp и при не успешном. Сравните вывод
arp -a, ifconfig XX
до и после выполнения скрипта. Вы вообще включили static arp на сетевой?

на сетевой карте включен staticarp. А для чего строчка “$ cat /usr/local/etc/rc.d/static_arp.sh”,

это команда, которая выводит содержимое файла /usr/local/etc/rc.d/static_arp.sh

А static arp надо включать и на сетевой которая смотрит в инет и на сетевой которая смотрит в локалку? Или только на той которая смотрит в локалку?

Нужно включать там, где планируете использовать эту защиту.

В статье написано “Создаём файл /usr/local/etc/arp.list такого содержания…”

Выходит надо в ручную вводить IP+MAC? Потому что через “#arp -s 10.10.2.12 00:01:52:8d:f9:54 pub” не хочет записывать в файл arp.list

arp -s добавляет статическую запись в arp-таблицу, а не в файл.

Артур – вы вообще читали статью? Складывается впечатление, что прочли только заголовок. Прочтите статью, там всё расписано для самых-самых маленьких.

Статью читал, но всеравно не понял как сделать чтобы записать в файл arp.list! Обьясните пожалуйста!

а для 8,2 точно надо || ifconfig le0 -staticarp или все таки || ifconfig le0 staticarp

без знака –

staticarp – включает поддержку static arp на заданном интерфейсе
-staticarp – отключает поддержку static arp на заданном интерфейсе

А вы решайте, что вам нужно. Ниже в статье написано, почему добавлен “-“.

Спасибо за статейку.
файл на исполнение chmod +X
стоит ещё отметить возможности /etc/rc.conf
static_arp_pairs=”vlan1 vlan11″
static_arp_vlan1=”192.168.1.1 01:02:03:30:20:10″
static_arp_vlan11=”192.168.11.1 30:20:10:01:02:03″

Может я чего не понял, но после
((arp -a -d && arp -f /usr/local/etc/arp.list ) || ifconfig le0 -staticarp) &
сетевая возвращается к “динамическому” arp.
Смысл тогда в таком скрипте?

Неправильно.
Вторая част скрипта (та, которая после ||) выполняется ТОЛЬКО ТОГДА, когда первая часть завершилась неудачей. Видимо у вас первая часть отрабатывается с ошибкой – то ли файла такого нет, то ошибка в команде.

Если удачно – то заноситься, если неудачно, то включается dynamic arp

заработало, прикол был в том, что список формируется скриптом из dhcp.conf и в нескольких строчках попадали лишние символы, а так как список очень большой, то увидеть ошибки не сразу удалось.
Но возникла другая проблема. При указании статики на интерфейсе перестает авторизировать пользователей squid (используется ntlm – авторизация, пользователи в Active Directory). Записи для домен контроллеров в arp-у есть.

Проблема значит в другом. Проверьте правильный ли arp для AD. Авторизация здесь не причём.

Залишити коментар до skeletor Скасувати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff