Linux下客户端MAC地址控制 [h8s0
iptables squid相结合的方法 \H~zN]3^
zgH(/@P
Linux作为服务器操作系统,具有服务稳定、功能强大的特点。自Linux 2.4内核以来,其中又内置了NetFilter包过滤架构。它从而具有强大的数据包过滤功能,保证用作软件路由器时更得心应手。例如,很多中小企业使用 Linux软件路由器将内部网络接入Internet,其效果并不比某些专有系统逊色,而且在功能定制、应用扩展等方面更有优势。 b+|3nc!
2:_6nWl
在接入Internet中,不同的用户应当拥有不同的权限,为了防止权限盗用问题,对用户的识别非常重要。目前,常见的识别方法有用户名/密码识别、用户IP地址识别和用户网卡物理地址(MAC地址)识别等。 r fzNw
Zazff@O *
基于用户名/密码的认证是传统的识别方法。它在管理和使用上都比较繁琐,客户端也需要进行配置,大部分办公用户不能独立完成此类配置,对密码的保护也不够。这种方法往往是既加重了网络管理员的负担,又达不到认证的目的。 ^5.XQ0n
dI&Q5M8
IP地址识别虽然可以做到客户端零设置,但是由于IP地址修改方便,无法杜绝IP地址盗用的情况,所以基本无安全性可言。 TL)*onA9
(0B?OkQ
再来看网卡的物理地址。由于普通用户无法修改网卡的MAC地址,并且它和IP地址一样都是惟一的,完全可以用来识别用户,不需要客户端进行任何配置。即便是网络发生了变化,如扩容、改建等,导致客户端IP地址或用户名改变也不会影响到MAC地址。因此,通过判断客户端MAC地址的方法来识别用户,实现所谓的透明认证是一种简单、有效的选择。 DzQ
l#`G4Vf
下面我们来讨论当Linux被用作Internet网关,并集成代理服务时的MAC地址透明认证方法。目前,通过MAC地址识别用户的方法主要有使用iptables的mac匹配模块、使用代理服务器自身的mac地址检查功能和利用静态ARP表进行控制三种。 xDGS`o_w_
tc<uS%XT4^
TN1pg
N0.|Mb"?t
使用iptables的MAC匹配模块 E5$]0#jB
?3p7MjvZ
;AE-=/<
在Linux 2.4内核中,包过滤模块发生了根本性的变化,完全由内核控制,效率得到了很大的提高。控制内核包过滤的工具,也用iptables取代了 ipchains。在iptables的标准发布中,就带有MAC地址匹配的模块。我们可以通过iptables -m mac 命令来装载它。 4(|yl^w
nYFrp)DLK
假设局域网通过一Linux网关接入Internet,我们为拥有上网权限的A用户分配了IP地址192.168.1.25/32,其MAC地址为00: 02:01:50:bb:53。根据TCP/IP原理,最终封装后的IP数据包实际上有一个包含网卡MAC地址的字段。因此,我们可以通过检查这一字段来达到防止盗用IP的目的。在这个例子中,就是在Linux网关上检查来自192.168.1.25/32的包,看看这些包的MAC地址是不是00:02: 01:50:bb:53。具体命令如下: wD=]U@t`,
YZj*F-}
# 设置PREROUTING链的默认规则为丢弃,以禁止所有包通过。iptables -t nat -P PREROUTING DROP# 检查IP地址为192.168.1.25/32的用户的MAC地址。如果与指定的MAC地址不匹配,说明源自192.168.1.25的包并不是从该网卡上发出的,即是非法用户,就应当丢弃这些包。iptables -t nat -A PREROUTING -s 192.168.1.25 -m mac -mac-source ! 00:02:01:50:bb:53 -j DROP# 如果MAC地址匹配,包才能到达这里,并被允许通过。iptables -t nat -A PREROUTING -s 192.168.1.25 -j ACCEPT ZZ7qSyBs?
M
`^[Y2 c
i'7+
?YL
u '7h(1@
这样,即使有一个未授权用户B自己设置了IP地址为192.168.1.25(由于本机设置始终优先于DHCP,所以这种情况是很普遍的),当包通过网关时由于MAC地址不匹配,他仍然不能拥有A用户的权限。这样就达到了识别用户的目的。 IHYLM;@L
dH!z<~
An$2='=/
Xv|=RNz
使用代理服务器自身的MAC地址检查功能 @phVfP"M
\ l#eW
x
5&V=$]t
Linux 下使用较多的代理服务器是Squid和Socks5。此处以Squid为例,说明如何检查客户端MAC地址。由于Squid的RPM发布版通常没有启用这一特性,这种版本使用MAC匹配会提示错误的acl类型,所以我们必须手工编译源代码。首先下载squid-2.x-src.tar.gz,然后用tar xvfz squid....tar.gz命令解开源代码,并进入展开后的子目录,用./configure配置编译选项。除了启用自己需要的特性外,再加上参数 -enable-arp-acl,即允许设置acl(Access Control List)为arp(MAC地址匹配)方式。然后执行make, make install。 ocFk#FW
z
-!w/Bv@
安装完成后,就可以修改squid.conf来匹配MAC地址了,如下所示: Aeb(b+=
~/]]H;;^u
# 设置一个accept_group列表,该用户的MAC地址为00:02:01:50:bb:53。acl access_group arp 00:02:01:50:bb:53# 根据最低安全要求,设置all列表,包含源IP地址为0/0,即所有用户。acl all src 0/0 # 允许accept_group组正常访问 http_access allow accept_group # 禁止其他所有未经授权的访问 http_access deny all b:D92pH
8.[F3Tk=
S0)JIrrHC
&CQO+Yr$l
启动Squid,并配置正确的缓存目录和端口转发。 8HQ.MXKP
5$:
toL
当Squid 收到请求时,无论请求用户来自哪个IP地址或主机,它都会检查其MAC地址,并且只允许MAC地址为00:02:01:50:bb:53的请求通过。这样也可以实现客户端零配置的用户识别。对于使用iptables + Squid做透明代理的Linux网关来说,可以选择iptables或Squid来识别用户。 Aj)Q#Fd[
xwf-kwF8^
nUOi~cs
L%T(H<