基于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权威指南。