Chinaunix首页 | 论坛 | 博客
  • 博客访问: 626585
  • 博文数量: 110
  • 博客积分: 3808
  • 博客等级: 中校
  • 技术积分: 1930
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-15 14:32
个人简介

声的伟大!

文章分类

全部博文(110)

文章存档

2014年(1)

2013年(2)

2012年(12)

2011年(81)

2010年(14)

分类: 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, SolarisOS/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命令编译Squidmake 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,那么就拒绝客户端的请求,否则允许该请求

 

阅读(867) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~