Всё ниже описаное происходило на 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
Вот и всё.