作者胡杨月影
使用代理服务器自身的MAC地址检查功能
Linux下使用较多的代理服务器是Squid和Socks此处以Squid为例说明如何检查客户端MAC地址由于Squid的RPM发布版通常没有启用这一特性这种版本使用MAC匹配会提示错误的acl类型所以我们必须手工编译源代码首先下载squidxsrctargz然后用tar xvfz squidtargz命令解开源代码并进入展开后的子目录用/configure配置编译选项除了启用自己需要的特性外再加上参数 enablearpacl即允许设置acl(Access Control List)为arp(MAC地址匹配)方式然后执行make make install
安装完成后就可以修改nf来匹配MAC地址了如下所示
# 设置一个accept_group列表该用户的MAC地址为::::bb:
acl access_group arp ::::bb:
# 根据最低安全要求设置all列表包含源IP地址为/即所有用户
acl all src /
# 允许accept_group组正常访问
http_access allow accept_group
# 禁止其他所有未经授权的访问
http_access deny all
启动Squid并配置正确的缓存目录和端口转发
当Squid收到请求时无论请求用户来自哪个IP地址或主机它都会检查其MAC地址并且只允许MAC地址为::::bb:的请求通过这样也可以实现客户端零配置的用户识别对于使用iptables + Squid做透明代理的Linux网关来说可以选择iptables或Squid来识别用户
利用静态ARP表进行控制
我们知道ARP(Address Resolution Protocol地址转换协议)被当作底层协议用于IP地址到物理地址的转换在以太网中所有对IP的访问最终都转化为对网卡MAC地址的访问
不妨设想一下如果主机A的ARP列表中到主机B的IP地址与MAC地址对应不正确由A发往B数据包就会发向错误的MAC地址当然无法顺利到达B结果是A与B根本不能进行通信Linux可以通过arp命令控制ARP转换即IP到MAC的转换因此也能利用这一功能对用户MAC地址进行匹配下面我们就来看看arp命令的用法
输入arp将显示当前所有ARP转换记录类似于这样
Address HWtype HWaddress Flags Mask Iface
ether :::::F C eth
ether :::F:: C eth
ether ::E:F::C C eth
... ether ::E:F::C C eth
由此可以看到当前系统保留的IP地址与MAC地址一一对应并指明了硬件类型(Hwtype)和通信所使用的接口(Iface)不过这些都是动态生成的无需手工干预我们要做的恰恰是手工干预这一过程
我们需要用到arp命令的另一重要功能就是手工更改这一对应关系此外该命令还可以读取文本文件中的ARP记录其默认文件是/etc/ethers也就是说当输入ARPf的时候系统就会读取/etc/ethers这个文件并以其中的项目取代系统当前的ARP记录假设/etc/ethers文件内容如下
::::bb:
然后执行命令arp f
这时我们查看系统ARP表会发现无论原来对应的MAC地址是什么都会被新的所取代
Address HWtype HWaddress Flags Mask Iface
ether :::::F C eth
ether :::F:: C eth
ether ::E:F::C C eth
... ether ::::bb: C eth
此时本机发往的数据包目标MAC地址将由原来的::E:F::C改为::::bb:显然如果所在网卡的MAC地址并非::::bb:数据包就无法到达正确的目的地那么它们也就无法通信了这样也达到了识别非法用户的目的
当然控制MAC地址的方法还不止这些例如可以利用交换机的端口管理功能识别用户根据交换机的原理它是直接将数据发送到相应端口那么就必须保有一个数据库包含所有端口所连网卡的MAC地址由此可见控制每个端口使用的MAC地址理论上是完全可行的大部分中高端交换机如Com SuperStack系列等都具有这种功能具体操作与交换机型号有关这里就不赘述
最后提醒一下MAC地址控制并非绝对保险正如这个世界上没有绝对解不开的密码一样所谓安全都是相对于特定的环境而言现在很多网卡都支持MAC地址的软件修改Linux和Windows本身也都有办法修改这一物理地址不过由于这种方式相对稳定摒弃了繁琐的客户端设置对用户完全透明而且具备很强的可操作性所以在某种程度上说是安全的
(责任编辑郁单曰)