Ключевые слова:mac, freebsd, kernel, patch, ip, (найти похожие документы)
From: "Anton L. Vinokurov" <anton@inorg.chem.msu.ru>
Date: Tue, 31 Aug 99 16:33:21 +0800
Subject: [FreeBSD] патч который делает arp-таблицу статической
> Появились у нас в конторе шибко умные юзеры.
> Сидя во внутренней сети на IPX+Novell прописывают себе сами IP адрес и
> лазят, черти, в Интернет через прокси сервер. Административные меры
> применить не удается (администрация ..., госконтора).
> Так вот, как бы отрезать им Инет напрочь ? Прокси (Squid), он же роутер
> между двумя физическими сегментами сети (внутр. и внешней), работает на
> FreeBSD. При этом известны МАС-адреса сетевых карт всех юзеров. Как бы
> эффективнее отсекать таких "умников" с учетом того, что они периодически
> меняют себе IP-адреса ?
Есть патч к ядру FreeBSD, который делает arp-таблицу статической. Он внизу.
Соответственно man arp на предмет -f и грузить всю таблицу при загрузке
машины.
Это не спасет от умников, которые на своих машинах перепрошивают MAC-адрес
(для некоторых типов плат это возможно).
--
Anton Vinokurov, ALV-RIPN, ALV9-RIPE, ALV26
anton@inorg.chem.msu.ru ICQ:29041781
-------------------------------
- --- netinet/if_ether.c.orig Wed Mar 17 10:37:34 1999
+++ netinet/if_ether.c Wed Mar 17 11:41:02 1999
@@ -482,6 +482,19 @@
itaddr = myaddr;
goto reply;
}
+#ifdef ARP_PERMNOOVER
+ la = arplookup(isaddr.s_addr, 0, 0);
+ if (la && (rt = la->la_rt))
+ if (!rt->rt_expire) {
+ if ((sdl = SDL(rt->rt_gateway)) && sdl->sdl_alen && +
bcmp((caddr_t)ea->arp_sha, LLADDR(sdl), sdl->sdl_alen)) + log(LOG_ERR,
+ "arp: %6D is using permanent IP address %s of %6D\n", +
ea->arp_sha, ":",
+ inet_ntoa(isaddr), (u_char *)LLADDR(sdl), ":");
+ goto reply;
+ }
+#endif /* ARP_PERMNOOVER */
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 &&
---------------------------------------------------------------------------
после этого патча флаг NOARP на интерфейсе полностью
замораживает ARP-таблицу. содержимое таблицы может быть изменено
только с помощью /usr/sbin/arp
--- if_ether.c.std Thu Sep 10 18:22:48 1998
+++ if_ether.c Fri 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);