【www.hj8828.com】Squid代理服务器高级应用两例

一、对使用者的分析

BKJIA独家特稿】Squid是一个缓存Internet数据的一个软件,其接收用户的下载申请,并自动处理所下载的数据。当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。目前,Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS协议,暂不能代理POP3、NNTP等协议。并且,Squid可以自动地进行处理,可以根据自己的需要设置Squid,使之过滤掉不想要的东西。Squid可以工作在很多的操作系统中,如AIX、Digital、UNIX、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。

实验需求:使用squid搭建反向代理服务器,在内网服务器192.168.100.1上启用基于域名的虚拟主机,使客户端能通过域名访问www.linuxidc.com和bbs.linuxidc.com 
                                                                       

现有网络情况:

Squid安装的例子很多了,本文不讲述,本文着重介绍2个Linux下Squid代理服务高级应用的例子。

                                    内网接口eth0(192.168.1.254)

我校校园网通过光缆已将31座建筑物连通,光缆总长度约15Km,绝大多数楼中实现结构化布线,连入校园网的网络多媒体教室、教学基地、实验室、机房等约有数十个,连网计算机达3000多台
。我校目前出口有2个,一条速率为10M
bps,通过光纤接入中国教育科研网CERNET,另一条速率为4M bps连入中国电信。

1、配置带认证的代理服务

 内网web服务器192.168.100.1———- squid反向代理服务器————-
公网客户端1.1.1.1

用户的需求:

默认时,Squid本身不带任何认证程序,但是可以通过外部认证程序来实现用户认证。一般有以下的认证程序:LDAP认证、SMB认证、基于mysql的认证、基于sock5的密码认证和基于Radius的认证。下面介绍常用的ncsa实现的认证,ncsa是Squid源代码包自带的认证程序之一,从squid
2.5开始都包含了ncsa的模块。在Red Hat Enterprise Linux
5的/usr/lib/squid目录下可以找到ncsa_auth文件。 

                                    公网接口eth1(1.1.1.254)

我校校园网的使用者主体为在校学生及老师。根据统计,约80%的用户使用WWW、FTP等资源。我校现有Chinanet
ip
126个,不可能分给所有的用户使用。通过架设代理服务器来实现让所有用户使用网络资源是最简单并且相对安全和可靠的方法。通过架设专门的WWW(FTP)代理来满足用户的主要需求,通过架设socks5代理来满足用户的其他需求。

要使用该认证服务,首先需要创建认证用户和密码:

一.配置内网的网站服务器192.168.100.1

二、硬件及软件的选择

#htpasswd -c /usr/local/squid/etc/ps_file guest 

可以使用apache或nginx等软件搭建,本实验采用nginx搭建

硬件

如果是以后添加用户的话就把-c的参数去掉。

1.安装nginx软件并编辑配置文件

Cache
Server可以是一台普通的PC服务器加上cache软件(如Squid、Inktomi)构成,也可以是软硬件系统和一台专门的cache服务器。根据Chinanet出口的实际情况,4Mbps速率的出口,每秒最大传入数据量为约500K/s。我校主干网节点间为双千兆连接,到达部分实验室是百兆,到达宿舍为10M。送出的最大数据量为约12M/s。传送的数据量不是很大,使用传统的IA32构架服务器既可满足需求。我校网络中心主机房使用机柜来存放服务器。惠普公司的LH6000服务器,具有很强的扩展性,是新型的六路服务器。代理服务器的运算负荷不是很重,对于IO的要求较高。LH6000通过自定义配置可以达到这个要求。通过使用raid可以提高磁盘性能,增加数据的可靠性。代理服务器软件占用内存较大。LH6000可以支持8GB内存。最终选择配置如下:

然后,再更改/etc/squid/squid.conf主配置文件,添加如下: 

# vim /usr/local/nginx/conf/nginx.conf

配置

//配置认证文件和用户文件
auth_param basic program /usr/lib/squid/ncsa_auth /usr/local/squid/etc/ ps_file 
//指定认证程序的进程数
auth_param basic children 5 
//代理服务器的名称
auth_param basic realm Squid proxy-caching web server 
//认证有效时间为2小时
auth_param basic credentialsttl 2 hours 
//只有认证用户才能访问
acl normal proxy_auth REQUIRED 
http_Access allow normal 

http {

处理器:Intel Xeon 处理器

最后,重启squid服务即可。在浏览器里配上这个代理,打开任意网站,如果弹出了输入用户名和密码的对话框,就证明配置成功了。

  ……

内存:2G

2、配置反向代理服务器

    server  {

磁盘控制器:集成具有32MB高速缓存双通道Ultra3 SCSI HP NetRAID控制器

反向代理Reverse
Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

        listen  80;

附加单通道:Ultra Wide SCSI控制器

通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务器不支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。

        server_name  www.linuxidc.com;

内置存储:热插拔5x18G半高驱动器

反向代理方式和包过滤方式或普通代理方式并无冲突,因此可以在防火墙设备中同时使用这两种方式,其中反向代理用于外部网络访问内部网络时使用,正向代理或包过滤方式用于拒绝其他外部访问方式并提供内部网络对外部网络的访问能力。因此可以结合这些方式提供最佳的安全访问方式。

          location  /  {

网卡:内置INTEL 82559 100M网卡

目前有许多反向代理软件,比较有名的有 Nginx 和 Squid
。其他还包括Socks、Apache、Jigsaw、Delegate等。Nginx 是由 Igor Sysoev
为俄罗斯访问量第二的 Rambler.ru 站点开发的,是一个高性能的 HTTP
和反向代理服务器,也是一个 IMAP/POP3/SMTP
代理服务器。而Squid也可以用来构建反向代理服务器。

                  root  /www;

电源:3个热插拔电源

www.hj8828.com 1
图1  反向代理服务器工作原理示意图

                  index  index.html;

RAID使用了RAID5模式,这个模式是向阵列中的磁盘写数据,奇偶校验数据存放在阵列中的各个盘上,允许单个磁盘出错。RAID
5也是以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个硬盘上。这样,
任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。

Squid作为反向代理服务器使用时,其工作原理为:客户端请求访问 WEB
服务时,DNS 将访问的域名解析为 Squid 反向代理服务器的 IP
地址,这样客户端的 URL 请求将被发送到反向代理服务器。如果 Squid
反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端,否则反向代理服务器将向后台的
WEB
服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。

        }

软件

Squid反向代理一般只缓存可缓冲的数据比如 html 网页和图片等),而一些 CGI
脚本程序或者 ASP、JSP 之类的动态程序默认不缓存。它根据从 WEB
服务器返回的 HTTP 头标记来缓冲静态页面。有四个最重要HTTP头标记:

    }

Squid Internet Object Cache (Harvest Project的後续版本)
是美国政府大力助的一项研究计划。Squid是一个开放源代码的代理服务器软件。它是一个为UNIX系统下运行的全功能的代理服务器软件。它可以为HTTP协议、FTP协议以及其他使用URL方式定位的协议作缓存。它支持客户端使用SSL协议进行数据传送。它可以使用ICP,
HTCP, CARP, Cache
Digests等协议和方式和其他运行squid的服务器进行协同。它支持SNMP协议,可以用相应的软件来做协调和管理。并且能配置详细的访问控制列表(acl)。

要配置反向代理服务器,需要在squid的主配置文件里面添加如下内容:

    server  {

操作系统
以前学校的代理服务器使用linux作为操作系统。这是因为以前的代理服务器通常还兼作其他的服务器。很多服务器软件是专门为linux开发的,或者在linux上运行的效率最高。Squid本身是为unix-like操作系统开发的。本身对系统没有太多的要求。目前我校Chinanet代理服务器使用的是FreeBSD作为操作系统。

http_port 80 accel vhost vport
cache_peer 192.172.1.133 parent 80 0 no-query originserver 
cache_peer_domain www.test.com 192.172.1.133
acl sites dstdomain www.test.com
http_access allow sites
http_access deny all
cache_dir ufs /var/spool/squid3 100 16 256
cache_mgr [email protected]
cache_mem 64 MB
maximum_object_size_in_memory 1028 KB
access_log /var/log/squid3/access.log squid

        listen  80;

没有选择Linux有下面几点原因:

上述配置的详细解释如下:

        server_name  bbs.linuxidc.com;

Linux的核心部分开发相对比较开放,FreeBSD的核心是由一个严格的core
team来完成的。相对检查更加严格。从核心部分比较BSD的内核更加稳定。

http_port 80 accel vhost
vpor:指定Squid所服务的端口为80,vhost和vport指的是所采用的虚拟主机的方式:基于IP地址和基于端口的,详细请参见本书对Apache
Web服务器的介绍;

        location  /  {

Linux对高负荷的承载能力不如FreeBSD。对于高负荷下程序出错的容忍力,BSD远强于Linux。

cache_peer 192.172.1.133 parent 80 0 no-query originserver:指定真实Web
Server的IP地址;

                  root  /bbs;

许多著名的网站,如:yahoo, netease
等著名的商业网站使用的就是freebsd,稳定性和性能早已通过很多专家的评测,远远强于Linux。

cache_peer_domain www.test.com
192.172.1.133:告诉反向代理服务器,当客户端有对www.test.com的访问请求时,需要从真实Web
Server 192.172.1.133上取得数据;

                  index  index.html;

在著名的文章“Linux vs BSD: A Tale of Two System”中,是这样评价Freebsd的:
FreeBSD focuses on the Intel Architecture PC and server platforms, and
on providing the best performance and stability possible. The DEC/Compaq
Alpha is also supported.

acl sites dstdomain
www.test.com:定义客户端能够通过反向代理服务器访问的主机;

 

但是Freebsd也有不如Linux的弱点。主要表现在磁盘IO的性能上。这主要是因为Freebsd使用的文件系统—UFS的性能不如linux上使用的ext2/ext3。但是在加上softupdate之后会有很大的改进。而且出国代理上配置的使用raid5模式,磁盘使用高转速scsi硬盘,在上述硬件配置的情况下,读取squid
cache的数k大小的小文件使用ext2和ufs+softupdate的效率的差别在万分之一以下。对于负载数千用户的代理服务器来说,可以忽略这样的效率差别。

http_access allow sites、http_access deny
all:限制客户端通过反向代理服务器能够访问的范围;

        }

基于以上原因,最终选用Freebsd作为代理服务器的操作系统。

cache_dir ufs /var/spool/squid3 100 16 256、cache_mgr
[email protected]、cache_mem
64 MB、maximum_object_size_in_memory 1028 KB、access_log
/var/log/squid3/access.log squid:代理服务器的常规配置。

  }

三、代理服务器软件的安装

BKJIA.com独家特稿,转载请注明原文作者和出处。】

  ……

squid的安装

作者介绍:李洋博客),博士毕业于中科院计算所。10多年来一直从事计算机网络信息安全研发工作,曾主持和参与多项国家重点项目以及信息安全系统和企业信息安全系统的研发工作。具有Linux系统应用、管理、安全及内核的研发经验,擅长网络安全技术、协议分析、Linux系统安全技术、Linux系统及网络管理、Linux内核开发等。

2.制作测试网页文件

freebsd本身的ports程序带有squid的稳定版本。目前squid的最新版本是2.4.STABLE6。在freebsd的/usr/ports/www/squid
目录下执行make;make
install就会将最新版本的squid代码下载、编译并最终安装到/usr中的相应路径中。

# mkdir /www