一、Squid简介及作用
Squid是Linux下一个缓存Internet数据的代理服务器软件,其接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份。当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。 
squid不仅可用在Linux系统上,还可以用在AIX、Digital Unix、FreeBSDNetBSDNextstepSCOSolaris等系统上。
Squid与Linux下其它的代理软件如Apache相比,下载安装简单,配置简单灵活,支持缓存和多种协议。用ipchains+Squid的解决方案,就可以获得通过缓存高
性能的同时能够无缝的访问Internet。
Squid代理服务器的作用
1.通过缓存的方式为用户提供web访问加速
2.对用户的web访问进行过滤控制
缓存代理服务器又分为普通代理服务器,透明代理服务器,和反向代理服务器。
普通代理服务即指标准的,传统的代理服务,需要客户机在浏览器中指定代理服务器的地址,端口。
透明代理服务器适合企业的网关主机,客户机不需要指定代理服务器地址,端口等信息,需要设置防火墙策略将客户机的web访问数据转交给代理服务器。
反向代理服务为INTERNET用户访问网络内网站点提供缓存加速,提高访问效率。
 
二、squid常用命令及其相关配置
       
1. Squid命令
在开启squid之前,你应该验证其配置文件是否正确
# squid -k parse
初始化cache目录.即建立缓存目录的存储格式,观察这个过程,请使用-X选项
# squid –zX
启动squid服务
# service squid start
重配置运行中的squid进程
# squid -k reconfigure
最安全的停止squid的方法是使用squid -k shutdown命令:
# squid -k shutdown
       
2.Squid 主要组成部分
服务名:squid
主程序:/usr/sbin/squid
配置目录:/etc/squid
主配文件:/etc/squid/squid.conf
监听tcp端口号:3128
默认访问日志文件:/var/log/squid/access.log
        
3.squid 常用配置选项(/etc/squid/squid.conf)
http_port 3128      #监听端口
cache_mem 64MB       #缓存占内存大小
maximum_object_size 4096KB      #最大缓存块
reply_body_max_size 1024000 allow all #限定下载文件大小
access_log /var/log/squid/access.log #访问日志存放的文件
visible_hostname proxy.test.xom #可见的主机名
cache_dir ufs /var/spool/squid 100 16 256
usf:缓存数据的存储格式
/var/spool/squid 缓存目录
100 : 缓存目录占磁盘空间大小(M)
16 :缓存空间一级子目录个数
256 :缓存空间二级子目录个数
cache_mgr webmaster@test.com #定义管理员邮箱
http_access deny all #访问控制
 
4.squid中的访问控制
使用访问控制特性,可以控制在访问时根据特定的时间间隔进行缓存、访问特
定站点或一组站点等等。 Squid 访问控制有两个要素:ACL 元素和 访问列表。
访问列表可以允许或拒绝某些用户对此服务的访问。
下面列出一些重要的 ACL 元素类型
src : 源地址 (即客户机IP地址)
dst : 目标地址 (即服务器IP地址)
srcdomain : 源名称 (即客户机名称)
dstdomain : 目标名称 (即服务器名称)
time : 一天中的时刻和一周内的一天
url_regex : URL 规则表达式匹配
urlpath_regex: URL-path 规则表达式匹配,略去协议和主机名
proxy_auth : 通过外部程序进行用户验证
maxconn : 单一 IP 的最大连接数
为了使用控制功能,必须先设置 ACL 规则并应用。ACL 声明的格式如下:
acl acl_element_name type_of_acl_element values_to_acl
注:
1. acl_element_name 可以是任一个在 ACL 中定义的名称。
2. 任何两个 ACL 元素不能用相同的名字。
3. 每个 ACL 由列表值组成。当进行匹配检测的时候,多个值由逻辑或运算换言之,即任一 ACL bbs.bitsCN.com元素的值被匹配,则这个 ACL 元素即被匹配。
4. 并不是所有的 ACL 元素都能使用访问列表中的全部类型。
5. 不同的 ACL 元素写在不同行中,Squid 将把它们组合在一个列表中。
我们可以使用许多不同的访问条目。下面列出我们将要用到的几个:
* http_access: 允许 HTTP 访问。这个是主要的访问控制条目。
* no_cache: 定义对缓存请求的响应。
访问列表的规则由一些类似 'allow' 或 'deny' 的关键字构成,用以允许或拒绝向特定或一组 ACL 元素提供服务。
注: 
1. 这些规则按照它们的排列顺序进行匹配检测,一旦检测到匹配的规则,匹配检测就立即结束。
2. 一个访问列表可以又多条规则组成。
3. 如果没有任何规则与访问请求匹配,默认动作将与列表中最后一条规则对应。
4. 一个访问条目中的所有元素将用逻辑与运算连接:http_access Action 声明1 AND 声明2 AND 声明 OR.http_access Action 声明3 多个 http_access 声明用或运算连接,但每个访问条目的元素间用与运算连接。
5. 请记住列表中的规则总是遵循由上而下的顺序。  
 
三、实验环境的搭建
 
1.试验设备:
客户机
Microsoft window xp , Microsoft window 7
www服务器
Microsoft window 2003
Squid代理服务器
[root@localhost ~]# uname -r
2.6.18-164.el5
[root@localhost ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
2.安装squid服务
[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm
 
四、实验案例
1.实现普通代理服务器
拓扑图:
 
 
配置信息squid服务器
[root@localhost ~]# vim /etc/squid/squid.conf
637 http_access allow all
920 http_port 192.168.2.101:3128 ##代理的ip地址
#http_port指令告诉squid在哪个端口侦听HTTP请求
2994 visible_hostname 192.168.2.101   ##出现错误时,返回的主机信息
[root@localhost ~]# squid -k parse ##检查配置文件
[root@localhost ~]# service squid start ##启动
测试
客户端配置和网络配置参数
打开IE浏览器—>工具—>Internet选项—>连接—>局域网设置—>
 
     
 
 
 

 

访问控制示例
1)禁止访问sina
acl sina dst www.sina.com.cn
http_access deny sina
2) 禁止来自某些IP地址的访问
squid配置文件中添加以下acl名称及访问规则,并重新加载配置文件
acl enemy src 192.168.2.10/32
http_access deny enemy
3) 禁止在某些时段访问
acl Working_hours MTWHF 08:00-17:00
http_access allow Working_hours
http_access deny !Working_hours
4) 禁止某个代理客户建立过多连接
acl OverConnLimit maxconn 4
http_access deny OverConnLimit
5)禁止访问域名包含为google.com的网站
acl badurl url_regex -i google.com
http_access deny badurl
篇幅有限,这里不再多举例子了,我也是菜鸟一个,在这方面也要多努力学习。

 

2.实现透明代理服务器
拓扑图:
 

配置信息
打开数据的转发功能
[root@localhost ~]# vim /etc/sysctl.conf
7 net.ipv4.ip_forward = 1       ##1代表打开,0代表关闭
[root@localhost ~]# sysctl –p ##生效
[root@localhost ~]# vim /etc/squid/squid.conf
920 http_port 192.168.2.101:3128 transparent ##透明代理
[root@localhost ~]# squid -k parse
[root@localhost ~]# service squid restart
添加iptables规则
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -p udp --dport 53 -o eth1 -j MASQUERADE
[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j REDIRECT --to-ports 3128
测试
客户端网络配置参数
 

 

 

 

 

 

3、反向代理服务
拓扑图:
 

 

配置信息
[root@localhost ~]# vim /etc/squid/squid.conf
920  http_port 192.168.101.26:80 vhost   ##反向代理
1185 cache_peer 192.168.2.201 parent   80   0 originserver
 
测试 
客户端网络配置参数