Squid用途:
解决IP地址不够用,提高访问速度
节省web服务器流量
为终端用户提供良好的应用体验
软件包名称:squid-2.6.STABLE6
服务名:squid
主程序:/usr/sbin/squid
配置目录:/etc/squid/
主配置文件:/etc/squid/squid.conf
默认监听端口:TCP 3128
默认访问日志:/var/log/squid/access.log
实验要求:
1、需要两台虚拟机,一台squid服务,一台为客户机
2squid服务器需要两块网卡,一块保证可以连接互联网,一块连接内网
服务器内网网卡IP192.168.0.2
服务器外网网卡IP192.168.1.2
客户端IP192.168.0.1
拓扑大致如下:
 

实验目的:
为内网用户提供代理上网服务
配置步骤:
在服务器端:
安装软件包:
(保证配置有yum,若没有,可到网络上下载对应的软件包进行本地安装)
# yum install squid -y
squid要想实在加速必须有缓存,需要一个响应速度快的存储调配,这里可以使用RAID5
# cd /etc/squid/
备份一下配置文件squid.conf
#cp squid.conf squid.conf.bak
此配置文件有四千多行,大部分说明信息,这里去除注释和空白行来显示:
# grep -v "^#" squid.conf | grep -v "^$"
显示信息如下:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80# http
acl Safe_ports port 21# ftp
acl Safe_ports port 443# https
acl Safe_ports port 70# gopher
acl Safe_ports port 210# wais
acl Safe_ports port 1025-65535# unregistered ports
acl Safe_ports port 280# http-mgmt
acl Safe_ports port 488# gss-http
acl Safe_ports port 591# filemaker
acl Safe_ports port 777# multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
icp_access allow all
http_port 3128                
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid/access.log squid
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
refresh_pattern ^ftp:144020%10080
refresh_pattern ^gopher:14400%1440
refresh_pattern .020%4320
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
coredump_dir /var/spool/squid
squid.conf中常用的几个控制项介绍:
http_prot IP:3128
监听的端口
cache_mem 64M
代理进程所使用的内存大小,实际应为系统内存的1/31/2
maximum_object_size 4096KB
定义最的缓存对象的大小
reply_body_mas_size  10240000 allow all
请求的最大文件大小是多少
access_log /var/log/squid/access.log squid  
定义日志的位置
visible_hostname your_host_name
易引起系统错误,用于定义squid如何识别自己的主机名称,默认反向解释自己的主机名,如果不成功就会报错,建议将其明确定义,可直接用IP地址
cache_dir ufs /var/spool/squid 100 16 256
用于指定存放缓存的目录,ufs:指缓存所使用的文件系统  
100:单位M,缓存目录可使用的缓存空间折大小  
16:单位M,一级缓存子目录的大小  
256:单位M,二级子目录的大小   
刚创建时这些子目录不存在
开始修改配置文件
# vim suqid.conf
修改http_port为:
http_port 192.168.0.2:3128
:如果想使用其它端口可在此进行修改,地址为内网网卡地址
修改cache_mem:
cache_mem 128 MB
添加visible_hostname:
visible_hostname proxy.a.com
启用cache_dir,并修改为:
cache_dir ufs /var/spool/suqid 1024 16 256
启用error_directory,并修改为:
error_directory /usr/share/squid/errors/Simplify_Chinese
注:这一行把一些错误返回信息改为中文显示,如果你是客户端虚拟机不支持中文就不必修改,否则会出现乱码
保存退出 
检查语法:
# squid -k parse
若不报错,刚说明配置无误
第一次启动前初始化缓存:
# squid -z
此命令创建了16个一级子目录
查看
# ls /var/spool/squid
启动服务:
# service squid start
查看3128端口是否开启
# netstat -tnl | grep 3128
至此squid服务器端配置完成,用以为客户端提供代理
在客户端:
在浏览器中设置代理服务器,按图所示,进行设置:
 

 

此时客户端便可访问互联网,如果不能,则在服务器修改squid配置文件:
# vim /etc/squid/squid.conf
查找http_access deny all,将其修改为:
http_access allow all
重读配置文件:
# squid -k parse
# squid -k reconfig
然后,返回客户端继续访问网络,便畅通无阻!
 
 
 
 
 
 
在服务器端动态查看访问日志:
# tail -f /etc/squid/access.log
日志中出现TCP_PEFRESH_HIT的说明该访问是从服务器缓存中读取的
出现TCP_PEFRESH_HIT是直接从网站服务器上读取的
另外squid的配置文件中还支持访问控制列表,下面进行简要说明:
需要将http_access allow all 重新改回http_access deny all
此访问列表是从上到下进行匹配的,所以列表顺序很重要
常用的acl列表类型
src  基于源地址控制
dst
port
srcdomain
dstdomain
time        周一到周日分别用:MTHWHFAS代替
maxconn  基于最大连接数
url_regex 基于url列表控制
urlpath_regex 基于url路径进行控制
如:想禁止员工在工作时候访问与QQ相关的网站,且不允许下载MP3格式的音乐,192.168.1.0网段除外,可用如下代码,添加至/etc/squid/squid.conf文件中
添加在http_access allow localhost之前
acl LAN src 192.168.1.0/24
acl QQ dstdomain *.qq.com
acl WORKTIME time MTWHF 08:00-18:00
acl NOTMP3 url_regex -i ^.*tp://.*\.mp3$
http_access deny !LAN WORKTIME QQ NOTMP3