你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
用DHCP服务器和Squid代理服务器对LAN上的用户进行存取控制
 

假设公司局域网上有40多个用户通过一台Linux proxy server上网,主要是浏览网页和从FTP站点下载文件,为了方便地控制哪些用户可以上网,哪些用户禁止上网,我设置了另外一台Linux DHCP server,在这台DHCP服务器上记录每台windows PC上网卡的物理地址,根据其物理地址为每台机器分配一个固定的内部IP地址,然后就可在那一台proxy server上用IP地址来控制用户存取,以此达到目的。

   我使用的操作系统环境为TurboLinux简体中文版4.0,实现方法如下:

1.     安装并配置DHCP

   虽然DHCP(动态主机配置协议)一般是用来动态地配置每台机器的TCP/IP信息,但在Linux里,它也有选项能用来把每台机器的配置固定下来,并且集中存放在服务器端,便于维护和管理,为了做到这一点,初期的工作量比较大,要记下每台机器上网卡的物理地址且输入到DHCP配置文件中,在windows 中,你可以通过击开始-运行,打入winipcfg’查看并记下网卡的物理地址。如下图。

 

 

 

 

 

 

 

 

 

 

 

TurboLinux安装盘上带有实现DHCP服务器功能的RPM包和DHCP客户机的RPM软件包。(注:此处的DHCP客户是指Linux上的DHCP客户,而不是Windows DHCP客户),实际上,你仅需要安装DHCP服务器RPM包即可。

若你在安装系统时没有选择安装,也可以在以后安装,放入CD,以root身份登录,mount it ,象下面这样安装:

 # mount /mnt/cdrom

 # cd /mnt/cdrom/RedHat/RPMS

 # rpm -ivh dhcp*.rpm

安装后,你需要在/etc目录下创建配置文件/etc/dhcpd.conf (我用vi编辑器),下面是我的配置文件内容的一部分。

subnet 192.168.11.0 netmask 255.255.255.0 {

range 192.168.11.30 192.168.11.79;

default-lease-time 86400;

max-lease-time 259200;

option subnet-mask 255.255.255.0;

option broadcast-address 192.168.11.255;

option routers 192.168.11.1;

option domain-name-servers 192.168.11.1;

option domain-name "yourdomain.com";

}

host JepheWu{

hardware ethernet 11.22.33.44.55.66;

fixed-address 192.168.11.30;

}

host HelenLi{

hardware ethernet aa.bb.cc.dd.ee.ff;

fixed-address 192.168.11.31;

}

 注:  我用的是192.168.11.0 网段, 其中192.168.11.1是局域网上的一台DNS服务器,我用了其中一段地址空间192.168.11.30192.168.11.79用来做DHCP分配,最后把每个人的网卡物理地址和为其分配的IP地址加在后面,这样,虽然每个windows机器每次启动时动态地为其分配IP地址,但每次得到的地址总是一样的。

第一行定义了所在的网段和子网掩码,第二行定义用来做DHCP分配的IP范围,后面的几行依次定义了默认租用时间,最大可租用时间,子网掩码,广播地址,默认路由器地址即网关地址,还有你的DNS名服务器地址和你公司的域名。

    其次, 你还需要在/etc下创建一空文件叫/etc/dhcpd.leases, 象下面这样:

# touch /etc/dhcpd.leases

该文件包含哪个IP地址被分配到哪台机器的详细信息,既然所有这些都交给服务器去做,你要做的仅仅就是创建一个0字节的空文件dhcpd.leases即可。

然后启动DHCP后台服务程序:

#/etc/rc.d/init.d/dhcpd start ,

    后运行

# ntsysv

确保选中dhcpd 后台程序,使得以后机器重启动时能自动运行dhcpd。如下图:

 

 

 

 

 

 

 

 

 

 

 

 

至此,你局域网上的用户每次应该能自动获得固定的IP地址,如我的机器每次将会获得192.168.11.12

    果你通过DHCP获得IP地址有问题,你可能需要考虑在Linux DHCP服务器上运行下面的命令(加一段广播路由)

 # /sbin/route add -host 255.255.255.255 dev eth0

若成功,就加这一行到 /etc/rc.d/rc.local 文件中,以确保每次启动时运行它。

最后,为了检查你是否已正确地从Linux DHCP服务器自动得到IP地址,和前面一样,在Windows上运行winipcfg去检查。

2.来在另外一台linux server上安装Squid Proxy Server, Squid 是一个全功能的WEB 代理和缓存服务程序,能代理诸如HTTPFTPSSL等网络服务请求,并且其程序可以免费从网上获得,Squid的主页在 http://squid.nlanr.net , Redhat 5.2 CD 随盘附带了squid-1.1.22-2  RPM包,这是一个非常稳定的版本。 Squid proxy 默认配置文件是 /etc目录下的squid.conf ,该文件中附有大量的注释和说明,看上去非常复杂,其实,为了代理HTTP/FTP/HTTPS等服务请求,其中的大多数配置勿需改动,仅需要改动很小的一部分即可,同样的,若你在安装系统时没有安装,也可以通过光盘以后安装(同上)

首先,去掉http_port那一行前面的注释, 定义你自己所想用的代理服务器端口号,我选择3333,方便用户记忆。

http_port 3333

其次,你就可以编辑存取控制表了,用vi编辑器,翻页到该文件的后面,你会发现有一部分专门说明如何定义存取控制表,标题为 ACCESS CONTROL/ Defining an Access List,这部分很详细地说明了各种控制语法,如:你可以象下面这样定义一个组名,后面是该组所包括的一批源IP地址。为了方便管理和记忆,我按公司部门名称来命名每一个存取控制表名。

acl all src 0.0.0.0/0.0.0.0  (定义组名all为任何TCP/IP 地址,默认就有这一行)

acl isd src 192.168.11.30/32 192.168.11.31/32 192.168.11.32/32(定义组名isd包含三个地址,即允许ISD部门有三台机器可以上网)

acl account src 192.168.11.40/32 192.168.11.52/32

acl hr src 192.168.11.56/32  192.168.11.59/32 192.168.11.60/32 等等,依照上面的方法列出每个部门被允许上网的机器的TCP/IP地址。

因为并非允许每个人都可上网,故你需要分别列出每台可允许上网的IP地址,若不是本文所述的情形,允许所有局域网上的机器可上网,则只需要第一行,定义组名all 所有地址而后允许组all可上网即可。32是子网掩码255.255.255.255的缩略形式。这部分与开始时记录每台机器网卡的物理地址一样,需要花点时间准确输入。

再接下来指明上面的组可上网,象下面这样:

http_access allow isd

http_access allow account

http_access allow hr

  为了拒绝其他非授权用户可通过该代理服务器上网,则应拒绝所有其他人的请求,象下面这样,该行必须加在http_access控制语句的最后。

http_access deny all

Squid还有其它更多的控制方法,例如如何禁止访问某些域名的网站

  可参考/etc/squid.conf中的注释。

最后在对文件/etc/squid.conf编辑完毕后,运行 /etc/rc.d/init.d/squid start 起动Squid代理服务器,任何时候,在改动了/etc/squid文件后,你只需要运行 /etc/rc.d/init.d/squid restart重读配置文件即可,还有运行ntsysv确信Squid后台每次都自动启动。

注: 这里只介绍如何设置squid.conf 对用户上网进行控制,作者用连到ISP的专线上网,如果你用拨号或者ISDN,要配置Linux服务器做为PPP/ISDN拨号服务器,专线上网需要配置另一块网卡,在这里不做介绍。

后注:

1. 据我的经验,Linux下的DHCP功能非常稳定,唯一不太方便的是,如果你在LAN上的任意一台windows pc上安装了sygate,wingate之类的windows代理服务程序,即使你没有启动他们的dhcp服务功能,其它windows pc在启动时也会因此避开linux  dhcp server,而去试着从装了sygate/wingatePC获取TCP/IP信息。故当你用winipcfg  发现不能正确获得IP地址,或者所显示的DHCP服务器地址不是你的Linux DHCP服务器时,应检查你的用户是否在他们自己的PC上装了类似的windows代理软件。

2.据我的经验,觉得squid-1.1.22-2版本最为稳定,最新的基于2.2内核的版本的Squid程序在使用过程中总有各种各样的毛病,象Squid-2.2-stable4, 我在一周之内运行良好,一周后便出现问题,客户端从网上下传网页时没有完全下载完就结束了,不是缺少图像就是缺少文字,好象是Squid在处理缓存时混乱出错了,因此作者在升级后,仍然安装先前的Squid-1.1.22-2的版本,非常可靠。

    3.Squid能方便地做为http/ftp/https的代理,假若你运行squid的服务器IP地址为192.168.11.5,并在 /etc/squid.conf中设置了http端口号为3333,那么你在用浏览器(IE)访问互联网时,就方便地设置所有的协议代理服务器均为192.168.11.5,端口为3333 ,不仅浏览器可以使用Squid代理,也可以在一些有proxy server选择设置的客户端软件中使用,象Yahoo message(网上消息传递程序)就有代理服务器的设定,还有一些FTP断点续传类的软件也可设置代理。

4.注意,在TurboLinux简体中文版4.0中,如果你要用它带的Squid2.2的版本,其中的http_access选项默认是禁止了所有的代理请求,象其中ACCESS CONTROL部分有一行http_access_access deny all而更早的的版本是默认允许,因此如果你安装完Squid后用默认的http代理端口,且不设置任何存取控制规则,则TurboLinux 4.0 就默认禁止了所有客户的Squid请求,而比较早的版本就默认允许,没有任何限制。

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089