基于squid的反向代理

一、实验目的

配置一台使用Squid的逆向代理服务器,用户只需要将DNS指向该代理服务器,通过认证授权后就能使用该代理,而无需在各类网络软件如浏览器之类的再设置,使得代理服务器更加易于使用。

二、网络拓扑图

三、服务端实施过程

首先我们修改DNS服务,解析www.a.com和www.b.com的A记录全部到Squid服务器IP地址。如果你愿意,DNS服务器和Squid可以分开用两台主机,这里我使用了同一台主机。配置DNS的过程可以去参考我以前的文档“实验报告-使用Bind架设一个DNS服务器”。

接下来,我们开始配置Squid,配置文件在/etc/suqid/squid.conf

首先,修改Squid服务监听的端口:
http_port 192.168.0.127:80 vhost vport

如果你把原来的http_port 3218保留下来,那么这个Squid既可做为一台正向代理服务器,又可作为一台web加速器,它会同时接受3128和80端口的访问。

找到:acl localnet src 192.168.0.0/16 这一条默认有的配置语句

这个语句把我当前的网络加入进去了(若没有则手动添加),由于配置文件默认允许localnet访问,所以如果我们这台服务器不对外网提供服务的话,我们不需要再设置允许其他内容。

在cache_peer部分加入如下代码:

 

cache_peer 192.168.0.12 parent 80 0 no-query originserver login=PASS

cache_peer 192.168.0.16 parent 80 0 no-query originserver login=PASS

 

在chche_peer_domain部分加入如下代码:

cache_peer_domain 192.168.0.12 www.a.com

cache_peer_domain 192.168.0.16 www.b.com

 

Squid在内部有一个类似于bind的域名解析机制,以上两句写明了域名和对应的IP地址。

四、客户端的设置

配置/etc/resolv.conf,把DNS指向192.168.0.127(DNS服务器),这样客户端就能使用我们的squid代理了。

五、用户认证

上面是我们的基本配置部分,接下来我们还需要对用户进行认证,只有认证成功的用户才能使用代理。

首先生成一个密码文件,和apache的网页认证类似,需要使用htpassword命令:

htpasswd -c /etc/squid/password user

New password:

 

这样,我们创建了一个包含user用户名和密码的密码数据文件待用,接下来修改squid配置文件。

squid的默认配置文件模板已经给我们做好了很多认证的范例,我们只需要找到以下四行并打开注释

 

auth_param basic program <uncomment and complete this line>

auth_param basic children 5 #指定了认证进程数

auth_param basic realm Squid proxy-caching web server

auth_param basic credentialsttl 2 hours #通过后2小时内无需再次认证

 

第一句需要修改为:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/password
这样就指定了认证调用的程序和密码数据文件的位置,但是但这样还不够,squid默认不会阻挡未通过认证的用户,所以需要在ACCESS CONTROLS 这部分进行描述。

首先我们需要添加一条acl语句:

acl been_authed proxy_auth REQUIRED

接下来,我们在配置文件默认的访问规则的最前面加入:

http_access allow been_authed

加入在最前面是非常重要的,由于squid是自上而下进行匹配的,如果没有通过验证的用户如果在下面即使放行也没有效果,同样的,在这条验证语句前面如果允许了一些用户,那么我们的验证对这些用户无效。

例如:如果你希望从本地访问无需密码, 那就可以把这句话放在 http_access allow manager localhost 以下,这样本机的管理员就免去了输入密码的麻烦。

别忘了重启squid服务,下次客户登录的时候,就会跳出提示输入密码的对话框了。

六、简单的访问控制

squid的访问控制非常强大,你可以任意组织自己的规则来达到对用户进行访问控制。

我们首先控制用户不能直接下载exe文件和torrent(BT种子)后缀名的文件:

增加一条acl语句:acl filesDownload urlpath_regex \.torrent$ \.exe$

再增加一条访问规则语句,需要注意的是我们自己的规则语句放置的位置最好放在:

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

的下面。

http_access deny filesDownload

七、总结

本文描述了搭建一个squid用来作反向代理的过程和访问控制的简单使用,squid的功能相当强大,需要了解更多可去阅读:squid权威指南。

posted @ 2009-05-19 08:49  Hello! Linux 博客  Views(2201)  Comments(5Edit  收藏  举报