| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 
课件制作网.
收藏本站
设为首页
安全365
Linux系统下封杀非法IP
Linux系统下封杀非法IP
作者:佚名 文章来源:不详 点击数: 更新时间:2007-1-25 9:15:25

   不久前,一位朋友想把他管理的局域网出口全部进行IP和MAC地址绑定,以防止非法用户上网。该局域网是用Linux实现Internet接入和管理。整个网络包括数栋楼房,分别通过交换机级联到总的Internet出口。网络使用了10.0.0.x到10.0.3.x/255.255.252.0这样的子网,总容量应该有1016(254×4)台主机。目前有大约400位合法上网用户,这些用户可能会随时增减。在Linux系统下,想利用MAC原理对IP进行封杀,从而达到对某个IP地址或IP地址段的管理和控制,可以通过Linux系统提供的ARP来实现。    

  构思   

  决定使用ARP绑定后,接下来就要考虑ARP的实现方法。ARP(Address Resolution Protocol)协议是用来向对方的计算机、网络设备通知自己IP对应的MAC地址的。如果所有非法用户都被赋予了错误的MAC地址,那么他们是无法通过这台服务器上网的。因此,ARP绑定要求必须将所有可能的IP地址全部与MAC地址绑定,才能够杜绝非法用户(当然,用户修改MAC地址除外)。    

  经过一番思索,确定了初步的构思。首先,用Linux Shell的循环方法生成一张包含从10.0.0.1到10.0.3.254的无效MAC地址匹配表,称之为全局表。然后根据DHCP服务器的数据得到一张合法用户的IP和MAC地址表,称之为合法表。接着,读取合法表中每个用户的IP,并在全局表中寻找匹配的IP,如果找到的话就用合法用户的MAC地址替换原来无效的MAC地址。最后,这张全局表中的合法用户匹配正确MAC地址,而非法用户匹配无效的MAC地址。只要用户把这张表写入系统ARP缓存,非法用户就不能通过简单的盗取IP方法来通过网关了。    

  实现    

  首先生成一张初始的全局表。它包含所有IP地址,每个IP地址与一个非法的MAC地址匹配。它的格式必须是arp命令能够识别的。初始化全局表的脚本为init,内容如下:    

  #!/bin/bash 

  ipprefix=10.0. 

  count1=0 

  while (( $count1 < 4 )) 

  do 

   count2=1 

   while (( $count2 < 255 )) 

   do 

   echo“$ipprefix$count1.$count2 00e000000001” 

   let $count2+=1 

   done 

   let $count1+=1 

  done 

  写好后存档,用“chmod +x init”命令使得脚本可执行。然后运行脚本init > arp,就可以将结果保存到当前目录的arp文件中。该文件就是10.0.0.1到10.0.3.254所有IP地址与MAC地址00e000000001绑定的ARP表,看上去该文件类似于下面这样:    

  10.0.0.1 00e000000001 

  10.0.0.2 00e000000001 

  10.0.0.3 00e000000001 

  10.0.0.4 00e000000001 

  10.0.0.5 00e000000001 

  ... ... 

  需要注意的是,Shell脚本语法虽然和C语言类似,但对格式要求很严格,有些地方不能加空格,有些地方则必须加空格。比如let $count1+=1就不能写成let $count1 += 1;相反,while (( $count1 < 4 )) 也不能写成while (($count1<4)),括号与语句之间必需有空格。 

  接下来通过DHCP服务器得到合法用户的IP与MAC地址匹配表(即合法用户表),假设是valid.arp文件。编写一个脚本一行一行地读取该表,每得到一个IP地址记录,就在前面生成的arp文件中查找同样的IP。如果找到的话,那么就用valid.arp中该IP的MAC地址替换arp文件中该IP的MAC地址。valid.arp文件可能像下面这样:    

  10.0.0.2 00e00a0f1d2c 

  ... 

  10.0.1.25 00e0b2c3d5c1 

  ... 

  查找替换脚本为replace,内容如下:    

  #!/bin/bash 

  # 定义并初始化三个变量,分别是合法用户表、全局表和作交换用的表 

  validArp=valid.arp 

  globalArp=arp 

  tmpArp=tmp.arp 

  count=1 

  # 371是合法用户的总数,也就是valid.arp表的记录数,然后加1 

  while (( count < 371 )) 

  do 

  #“ sed -n‘“$count”p’$validArp”命令将每次打印valid.arp文件中的第$count个记录 

  # 例如,当$count=1的时候,该命令将打印: 10.0.0.2 00e00a0f1d2c2 

  # eval $getValid将会执行$getValid变量所包含的语句,并将结果赋给变量$curRec 

  getValid=“sed -n‘“$count”p’$validArp” 

   curRec=‘eval $getValid’ 

  # echo $curRec   awk‘{print $1}’命令将打印$curRec内容的第一个字段,也就是IP地址 

  # 然后我们将这个IP地址赋值给$curIP变量 

  getIP=“echo $curRec awk‘{print /$1}’” 

   curIP=‘eval $getIP’ 

  # 这样我们就得到了合法用户的IP及IP和MAC地址对,接下来是最关键的一步 

  # 下面两条语句在全局表中查找与得到的IP匹配的项目,找到后就在该记录后面添加合法用户的IP 

   和MAC地址对,然后删除旧的非法IP和MAC地址对,并将结果存入一个新的文件tmp.arp 

  replace=“sed -e‘/$curIP/>/a/ $curRec’ -e‘/$curIP/>/d’$globalArp >$tmpArp” 

   eval $replace然后用新的文件覆盖全局表文件,并将计数器加1,供下次循环 

  cp -f $tmpArp $globalArp 

   let count+=1 

  done   

  到此脚本结束。需要注意的地方有两个:第一,所有包含“eval”命令的语句,使用的都是反引号,也就是通常位于Tab键上面的那个引号,这样变量才能得到语句执行的结果,而非语句本身;第二,如果出现变量和其它字母在一起的情况,用双引号将变量包含,否则会出现错误的变量名,例如下面这条语句:    

  getValid=“sed -n‘“$count”p’$validArp”    

  如果不用双引号把变量$count包起来,Shell会认为用户的变量是$countp,而不是$count。    

  在执行完replace后,再查看arp文件,会发现其中所有在valid.arp文件中存在的IP和MAC地址对,其中的初始化MAC地址已被替换为正确的MAC地址。    

  最后,将得到的arp文件拷贝为/etc/ethers,在系统启动时运行“arp -f”,就可以实现IP和MAC地址匹配了。   

  总结   

  通过这件事不难发现,Linux继承了Unix的优秀传统,具备强大和完善的系统管理方法。只要用户掌握一些常用的命令与工具,就可以极大地提高系统管理效率,降低管理的工作强度。学习和掌握这些方法,是每个合格的Linux系统管理员都应该做到的。

【转自世纪安全网 http://www.21safe.com】
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    MS06-015不完善 导致Win
    调查显示Windows比Linux
    不比Win95 Vista成为漏洞
    调查显示Windows比Linux
    GnuPG Make_Printable_S
    Novell Client nwspool.
    Microsoft Windows打印后
    Linux Kernel get_fdb_e
    SAP Internet图形服务器
    Intel网卡驱动本地权限提

    Copyright © 2006-2008 www.anquan365.com 安全365
    建议使用1024*768分辨率及第三方浏览器对本站进行浏览