声的伟大!
分类: LINUX
2011-04-13 11:04:38
Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。
也就是说,当一个用户象要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid
连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面
时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。目前,Squid 可以代理HTTP, FTP,
GOPHER, SSL 和 WAIS 协议,暂不能代理POP, NNTP等协议。不过,已经有人开始修改Squid,相信不
久的将来,Squid能够代理这些协议。
Squid能够缓存任何数据吗?不是的。象缓存信用卡帐号、可以远方执行的scripts、经常变换的
主页等是不合适的也是不安全的。Squid可以自动的进行处理,你也可以根据自己的需要设置Squid,
使之过滤掉你不想要的东西。
Squid可以工作在很多的操作系统中,如AIX, Digital Unix, FreeBSD, HP-UX, Irix, Linux,
NetBSD, Nextstep, SCO, Solaris,OS/2等,也有不少人在其他操作系统中重新编译过Squid。
Squid对硬件的要求是内存一定要大,不应小于128M,硬盘转速越快越好,最好使用服务器专用SCSI
硬盘,处理器要求不高,400MH以上既可。
2. Squid的编译和运行
其实现在的Linux发行套件中基本都有已经编译好的Squid,你所作的就是安装它既可。如果你手头
没有现成的编译好的Squid或想使用最新的版本,去ftp:squid.nlanr.net下载一份,自己编译。
Squid的编译是非常简单的,因为它基本上是自己配置自己。最容易出现的问题是你的系统上没有
合适的编译器,这可以通过安装相应的编译器解决。如果出现其他问题,你可以问一下有经验的用户或
到相应的邮件列表寻找帮助。
编译Squid之前,最好建一个专门运行Squid的用户和组。我就在自己的服务器上建了一个名为
squid的用户和组,用户目录设为/usr/local/squid。然后su为用户squid并从squid.nlanr.net下载
Squid的源文件到目录 /usr/local/squid/src中,用如下命令进行解压:
%tar xzf squid-2.0.RELEASE-src.tar.gz
%cd /usr/local/squid/src/ squid-*.*.RELEASE /
%./configure
%make
%make install
第一个命令在目录/usr/local/squid/src中产生一个新的子目录/squid-*.*.RELEASE/。命令
./configure会自动查询你的系统配置情况以及你系统中使用的头文件。不加参数的./configure会
把Squid安装在目录/usr/local/squid中,如果你想使用其他目录,用如下命令
./configure --prefix=/some/other/directory,这会把Squid安装在目录/some/other/directory中。
make命令编译Squid,make install命令安装Squid。
不出意外的话,目录/usr/local/squid中会出现如下目录:
/bin
/cache
/etc
/logs/
/src (自己创建的)
目录/bin中含有Squid可执行程序,包括Squid本身,ftpget等。
目录/cache包含Squid缓存的数据,其中包含象/00/ /01/ /02/ 以及/03/这样的目录,这些目录
中还有子目录,因为目录多了比在一个目录成千上万的文件中寻找一个文件更容易,速度更快。
目录/etc中包含Squid的唯一的配置文件squid.conf。
目录/logs中包含Squid的日志。
3. 代理服务器的作用
通过缓存的方式为用户提供Web访问加速
对用户的Web访问进行过滤控制
4.squid下代理类型
普通代理服务
即标准的、传统的代理服务
需要客户机在浏览器中指定代理服务器的地址、端口
透明代理服务
适用于企业的网关主机(共享接入Internet)中
客户机不需要指定代理服务器地址、端口等信息
需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理
反向代理服务
为Internet用户访问企业Web站点提供缓存加速
5.squid软件包
软件包名:squid-2.6.STABLE6
服务名:squid
主程序:/usr/sbin/squid
配置目录:/etc/squid/
主配置文件:/etc/squid/squid.conf
默认监听端口:TCP 3128
默认访问日志文件:/var/log/squid/access.log
6.常用配置项
http_port 3128
cache_mem 64 MB
maximum_object_size 4096 KB
reply_body_max_size 10240000 allow all
access_log /var/log/squid/access.log squid
visible_hostname proxy.test.com
cache_dir ufs /var/spool/squid 100 16 256
cache_swap_low
cache_swap_high
dns_nameservers
7.普通代理服务的典型应用环境
设置squid服务器端(192.168.1.1)
修改squid.conf主配置文件
http_port 3128
visible_hostname proxy.benet.com
reply_body_max_size 10240000 allow all
http_access allow all
初始化squid缓存目录(squid -z)
启动squid服务(squid -D)
export http_proxy=
验证代理服务器功能
当外网测试机(218.29.30.29)中启用Web服务程序后,在局域网客户机(192.168.1.100)的IE浏览器中应能够访问该站点:
网页访问成功后,检查代理服务器的日志文件,应发现客户机的HTTP访问记录
[root@localhost ~]# tail -1 /var/log/squid/access.log
1244386040.208 62 192.168.1.100 TCP_MISS/200 2828 GET - DIRECT/218.29.30.29 image/gif
验证代理服务器功能
检查外网测试机的Web访问日志,应发现进行访问的是代理服务器主机(218.29.30.31),而不是客户机
[root@gw1 ~]# tail -1 /var/log/httpd/access_log
218.29.30.31 - - [16/May/2009:12:39:39 +0800] "GET /icons/apache_pb2.gif HTTP/1.0" 200 2414 "" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 1.0.3705; aff-kingsoft-ciba)"
例子:
1.透明代理
http_port 3128 transparent
iptables -t nat -I PREROUTING -s 192.168.10.0/24 -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
此时客户端进行验证,然而客户端的IP为私有地址如访问话,客户端从DNS那里获得的IP,然而外网是不能访问内网的,如果要让请求返回给客户端,就要进行地址转换。
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to 192.168.0.87(192.168.0.87这里假设为外网地址)
2.反向代理
http_port 218.29.30.31:80 vhost
cache_peer 192.168.10.7 parent 80 0 originserver weight=5 max-conn=30
cache_peer 192.168.10.8 parent 80 0 originserver weight=5 max-conn=30
cache_peer 192.168.10.9 parent 80 0 originserver weight=5 max-conn=30
cache_peer 192.168.10.6 parent 80 0 originserver weight=1 max-conn=8
cache_peer Web服务器地址 服务器类型 http端口 icp端口 [可选项]
8.ACL(Access Control List,访问控制列表)
可以从客户机的IP地址、请求访问的URL/域名/文件类型、访问时间、并发请求数等各方面进行控制
应用访问控制的方式
定义acl列表
acl 列表名称 列表类型 列表内容 …
针对acl列表进行限制
http_access allow或deny 列表名……
最基本的ACL访问控制示例
禁止任何客户机使用代理服务
acl all src 0.0.0.0/0.0.0.0
http_access deny all
常用的acl列表类型
arp
scr
dst
srcdomain
dstdomain
time
port
url_regex
urlpath_regex
proto
browser
maxconn
ACL列表定义示例
acl LAN1 src 192.168.10.0/24
acl PC1 src 192.168.10.12/32
acl Blk_Domain dstdomain .qq.com
acl Work_Hours time MTWHF 08:30-17:30
acl Max20_Conn maxconn 20
acl Blk_URL url_regex -i ^rtsp:// ^mms://
acl Blk_Words urlpath_regex -i *** adult
acl RealFile urlpath_regex -i \.rmvb$ \.rm$
根据已经定义的部分ACL列表进行访问控制
http_access deny LAN1 Blk_URL
http_access deny LAN1 Blk_Words
http_access deny PC1 RealFile
http_access deny PC1 Max20_Conn
http_access allow LAN1 Work_Hours
访问控制规则的匹配顺序
没有设置任何规则时
—— 将拒绝所有客户端的访问请求
有规则但找不到相匹配的项时
—— 将采用与最后一条规则相反的权限,即如果最后一条规则是allow,那么就拒绝客户端的请求,否则允许该请求