假设公司局域网上有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.30到192.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 代理和缓存服务程序,能代理诸如HTTP,FTP,SSL等网络服务请求,并且其程序可以免费从网上获得,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/wingate的PC获取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请求,而比较早的版本就默认允许,没有任何限制。
|