Linux 版 (精华区)

发信人: knight (斩红郎无双剑), 信区: Unix
标  题: 防止盗用IP地址策略
发信站: 紫 丁 香 (Wed Mar  4 09:21:17 1998), 转信

发信人: rainbow (我不打RA,别找我), 信区: Internet
标  题: 防止盗用IP地址策略
发信站: 鼓浪听涛 (Sat Jan  3 17:22:06 1998)

防止盗用IP地址策略
具有一定网络规模的Internet用户,主要是科研院所、高校和国家机
关,这些单位的Internet记帐方式是以每个IP地址的通讯量进行统计
的。众所周知,一台机器的IP地址是由本机的管理者指定的,就上网
计算机的比例来说,微机占绝大多数,改一台微机的IP地址,只不过
需要一分钟而已,这就给一些盗用他人IP地址的人造成了方便机会。
那么,是否有办法来防止这种情况的发生呢?答案是肯定的,而且很
有效果。一、设计思路
在中国,现在大家使用的绝大部分是以太网卡,因此,我们的讨论只
限于以太网。该设计基于以下的事实: 每一台机器除了有一个独一无
二的IP地址之外,每一块网卡还有一个独一无二的地址,称为MAC地
址(也称为以太网地址)。该地址为48bit,不同系统有不同的写法,
例如以下的几种写法其实表示的是同一个MAC地址:0800207A0529
8∶0∶20∶7A∶5∶29
08-00-20-7A-05-29
每一块卡的MAC地址在全世界是唯一的,这个MAC地址一般用户也许并
不关心,但对机器来说至关重要,没有它,以太网就不可能工作。对
于TCP/IP网络,与IP协议在同一层的还有一个叫“地址解释协议”(A
RP),它的作用就是把IP地址“映射”(或者说解释)成MAC地址。因为
MAC地址对机器是如此重要,所以在每一台机器上,都会保留有一份
“最近”与本机器有过“联系”的其他机器的IP与MAC对照表。如何
得到这份IP-MAC对照表呢?其实在UNIX、WindowsNT、Windows95下都
有相应的命令,这就是arp命令。arp命令除了能设置静态对照表外,
也可以用来显示对照表。显示时,一般是用arp -a。如果我们能让网
络中的某台机器来自动维护一张IP与MAC的对照表,以文件的形式存
于硬盘中,每当有新的MAC出现,且IP是未使用过的(对应于新增加一
台机器),就往该表中增加一行;每当一个MAC对应两个IP时(对应于
改变IP地址),说明可能有人盗用或误用IP地址,这时可发出警报信
息,并记录下事件发生的时间;而每当一个IP地址对应两个MAC时,
这时可发出提示信息给系统管理员,提醒他有可能将同一个IP地址分
配给了不同的机器。这样就实现了我们的想法。前面提到,每一台机
器只保留“最近”与之有联系的其他机器的IP-MAC对照表。如果别的
机器没有与监控的这台机器联系,而这时它改变了IP地址,怎么来得
到这个信息呢?其实,我们可以主动来与它联系,最简单的方法就是
使用ping了,每隔一段时间(我认为比较合适的间隔是10分钟左右),
对本网段内的所有IP地址ping一遍,而不管该IP地址是否正在使用。
这样,不管该网段中的机器运行的是何种TCP/IP软件,只要正在运行
,都一定会有回答。为什么只对本网段使用ping呢?如果单位里有多
个网段,对这些网段也ping一遍不是可以得到其他网段的IP-MAC对照
表吗?其实不然,因为以太网地址只在本网段中使用,而不会跨越路
由器。虽然你可以得到其他网段机器的回答,但──不管其他网段有
多少个IP──这些IP所对应的MAC地址,一定是路由器与本网段相连
的那块以太网卡的MAC地址!读到这里,有些读者会发出疑问─你这方
法管用吗?既然有人成心盗用IP地址,那么在改IP的同时,随便换一
块以太网卡不就行了吗,根本就找不出是谁用的!对于这个问题,只
能结合其他手段来加以控制。有些路由器(如Cisco路由器)可以在每
一端口设置相应的access list,来允许或拒绝某数据包的转发,包
括对TCP端口、IP地址范围等的控制,其中也包括对MAC地址的控制。
但是这种方法比较麻烦,因为必须把允许通行的所有MAC地址全部敲
进去,而且要保证不能敲错。另一种方法比较简单,就是使用带管理
模块(如比较常用的3COM的3c16630模块)的HUB。把每一端口设置成en
able security,HUB会自动记录下与每一端口连接的第一块以太网卡
的MAC地址,当某一端口发现MAC地址有改变时,会自动断开连接,直
到系统管理员重置该端口为止。二、 在UNIX系统下的实现
为什么选用UNIX来作为例子呢?因为在一般的网络中都会有若干服务
器,这些服务器24小时开机,正好符合我们监测的需要,它们往往运
行UNIX。程序可以用任何语言来写,这里我选用shell语言。因为she
ll语言可以在任何UNIX平台(Solaris、HP、Linux等)下运行而无需编
译,具有很好的移植性。下面我们以Solaris为例来进行分析和编写
程序,在其他的平台下只要作一些相应的小改动即可。该系统涉及到
三个shell程序,RunEvery10Min、checkIP和checkMAC,下面分别进
行介绍。假设它们安装在/var/IllegalUser目录下。1. RunEvery10M
in程序
我们可以在超级用户root的cron表中加入以下一行(用crontab -e命
令):0,10,20,30,40,50 * * * * /var/IllegalUser/RunEvery1
0Min这样,每10分钟系统就会自动执行该程序一次。程序的前半部分
是对本网段的机器ping一遍,然后,调用checkIP和checkMAC。这里
,我们使用netstat -pn命令来替代前面的arp -a命令,后面你将看
到这样做的原因。例如,本网段是159.226.111.64,net mask为255.
255.255.192,表明可用IP地址从159.226.111.65至159.226.111.126
,程序如下:#!/bin/sh
home=/var/IllegalUser
net=159.226.111
host=65
while [ $host -lt 127 ]
do
ping $net.$host > /dev/null &
host=`expr $host + 1`
done 
sleep 10
/bin/netstat -pn | grep le0 | $home/checkIP
$home/checkMAC > /dev/null &
2. check IP程序
在Solaris中,arp -a命令输出的IP地址部分实际上已经翻译成机器
的名字。因为名字的解释有好几种,如DNS、NIS+和文件/etc/hosts
,由DNS解释的是机器的全名(机器名+域名),而由NIS+解释的就只有
机器名而没有域名,这样会扰乱判断的准确性,应尽量避免。幸好So
laris提供了一条等价于arp -a的命令netstat -p,如果再加上-n选
项(netstat -pn),其输出结果就不会把IP解释成名字了。下面是该
命令的输出。Device    IP Address    Mask    Flags        Phy
s Addr le0    159.226.111.3    255.255.255.255        08:00:
20:79:0e:e0le0    159.226.111.1    255.255.255.255    SP    
08:00:20:7a:05:29le0    159.226.111.6    255.255.255.255    
U     le0    224.0.0.0    240.0.0.0    SM    01:00:5e:00:00:
00Flags项为空表示该数据是“查询”来的,为正常的情况;Flags项
为SP表示为本机数据;Flags项为U表示该IP地址现在没有使用(如已
关机),这一行没有MAC地址,我们要排除掉这种情况。需要排除掉的
还有两种情况:一种是前面说过的,本网段路由器口的MAC地址可能
对应着一批其他网段的IP地址;另一种是特殊的IP地址224.0.0.0。
假设:路由器的MAC地址为00∶60∶3e∶10∶e9∶a7则部分程序可以
这样来写:
home=/var/IllegalUser
while true;do
# read from pipe
read input
if [ "$input" = "" ]
then exit 0
fi
# get ip_addr and ether_addr from input
set `echo $input`
ip=$2
ether=$5
if [ "$ether" = "" ]
then ether=$4
fi
# pass unused IP, router's IP, and 224.0.0.0if [ "$ether" = 
"00:60:3e:10:e9:a7" ]
then 
continue
fi
(略... ...)
# check ip and ether addresses
old_ip=`grep $ether $home/EtherTab | cut -d_ -f2`# if it is 
a new one, add it to ./EtherTab
if [ "$old_ip" = "" ]
then 
echo ${ether}_${ip} >> $home/EtherTab
lastIP=""
if [ -f $home/mac.$ether ]
then
lastIP=`tail -1 $home/mac.$ether | cut -f3 -d" "`fi
if [ "$ip" != "$lastIP" ]
then
echo $ether `date +%y/%m/%d__%T` $ip >> $home/mac.$etherfi
# if it is an illegal one
elif [ "$old_ip" != "$ip" ]
then
file=$home/EtherTab.`date +%y%m%d.%T`
echo $ether `date +%y/%m/%d__%T` $ip >> $home/mac.$ethercat 
$home/EtherTab | sort >> $file
echo ------------ ILLEGAL USER ------------ >> $fileecho ${e
ther}_${ip} >> $file
echo ----- `date +%y/%m/%d`  `date +%T` ----- > $home/EtherT
abecho ${ether}_${ip} >> $home/EtherTab
# Warning messages to console and you
# mailx YourEmailAddressHere < $home/mac.$etherecho WARNING:
 `date +%y/%m/%d__%T`  --- ILLEGAL USER --- > /dev/consoleca
t $home/mac.$ether > /dev/console
fi
done
3. checkMAC程序
这个程序主要用来检查是否有一个IP地址对应多个MAC地址的情况。
(程序略)读者欲得到完整的程序,请访问http://www.cern. ac.dn
/chen,或者寄一封空的E-mail到如下地址:checkip@cern.ac.cn,
您将得到一封自动回复的信件,其中包括在Solaris下运行的程序,
并告诉您如何进行安装。 

--
m;31m※ 来源:.鼓浪听涛 bbs.xmu.edu.cn.[FROM: 210.34.2.156]m

--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: r617.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.274毫秒