一、缓存代理概述
作为应用层的代理服务软件,Squid主要提供缓存加速、应用层过滤控制的功能。
1.代理的工作机制
当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机;如果缓存中没有客户机要的访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机。
作用:
减少了向Internet提交重复的Web请求的过程,提高了客户机的Web访问响应速度;
客户机的web访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户的真实IP地址;
代理服务器有机会针对要访问的目标、客户机的地址、访问时间段等进行过滤控制,还能起到监控的作用。
2.代理的基本类型
传统代理:首先必须在客户机的浏览器、QQ聊天工具、下载软件等程序中手动设置代理服 务器的地址和端口,然后才
能使用代理来访问网络。网页浏览器访问网站时的域 名解析请求也会发给指定的代理服务器。
透明代理:提供与传统代理形同的功能和服务,其区别在于客户机不需要指定代理服务器的 地址和端口,而是通过默
认路由、防火墙策略将Web访问重定向。重定向的过程 对客户机来说是“透明”的,用户甚至不知道自己在
使用代理服务,所以称为“透 明代理”。网页浏览器访问网站时的域名解析请求将优先发给DNS服务器。
实际应用中,传统代理多见于Internet环境,如为QQ程序使用代理可以隐藏本机的真实IP地址,为下载工具使用多个代理可以规避服务器的并发链接限制;透明代理多见于局域网环境。
二、安装及运行控制
1.编译安装
主要配置项含义:
--sysconfdir=/etc //单独将配置文件修改到其他目录
--enable-arp-acl //可以在规则中设置直接通过客户端MAC进 行管理,防止客户端使用IP欺骗
--enable-linux-netfilter //使用内核过滤
--enable-linux-tproxy //支持透明模式
--enable-async-io=值 //异步I/O,提升存储性能,
--enable-err-language=”Simplify_Chinese” //错误信息的显示语言
--enable-underscore //允许URL中有下划线
--enable-poll //使用Poll()模式,提升性能
--enable-gunregex //使用GNU正则表达式
安装完成后,创建链接文件、创建用户和组。
2.Squid的配置文件
主要修改有以下几条配置项,有的配置项需要修改,而有的配置项需要添加。
http_port 3128 //用来指定代理服务器监听的地址和端口,默认
端口号为3128 修改
cache_effective_user squid //指定squid的程序用户,用来设置初始化、运
行时缓存的账号,否则启动不成功! 添加
cache_effective_group squid //默认为cache_effective_user指定账号的基
本组 添加
visible_hostname 主机名 //代理服务器的主机名 添加
cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256
3.Squid的运行控制
检查配置文件语法是否正确
-z选项用来初始化缓存目录
启动squid服务
注意:第一次启动Squid服务时,会自动初始化缓存目录。在没有可用的Squid服务脚本的情况下,需要直接调用Squid程序来启动服务,这时需要先进行初始化。
确认服务处于正常监听状态
为了使Squid服务的启动、停止、重载等操作更加方便,可以编写Squid服务脚本,并使用chkconfig和service工具来进行管理。
#!/bin/bash
# chkconfig: 2345 90 25
# config: /etc/squid.conf
# pidfile: /usr/local/squid/var/run/squid.pid
# Description: Squid - internet object cache.
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -anpt | grep squid &> /dev/null
if [ $? -eq 0 ]
then
echo "squid is running"
else
echo "正在启动squid..."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null
rm -fr $PID &> /dev/null
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -anpt | grep squid
else
echo "squid is not running."
fi
;;
restart)
$0 stop &> /dev/null
echo "正在关闭squid..."
$0 start &> /dev/null
echo "正在启动squid..."
;;
reload)
$CMD -k reconfigure
;;
check)
$CMD -k parse
;;
*)
echo "用法: $0 {start | stop | restart | reload | check | status}"
;;
esac
三、构建透明代理服务器
透明代理依赖于默认路由和防火墙的重定向策略,因此更适用于为局域网主机服务,而不适合为Internet中的客户机提供服务。
案例:
·在linux网关上,构建Squid为客户机访问Internet提供代理服务,设置ACL访问控制。
·在所有的局域网客户机上,只需要正确设置IP地址、默认网关,不需要手动指定代理服务器的地址、端口等信息。
1.配置Squid支持透明代理
对于2.6以上版本的Squid服务,只要在http_port配置行加上一个”transparent”选项,就可以支持透明代理了。
2.设置iptables的重定向策略
在防火墙上为3128端口开启例外
设置重定向策略
控制类型”REDIRECT”:实现本机端口的重定向,此例中将访问网站协议HTTP、HTTPS的外发数据交给本机的Squid服务
(3128端口)。
选项”--to 端口号”:指定映射的目标端口
客户机配置正确的IP和默认网关后,就可以访问网站服务器了,接下来通过设置ACL访问控制,实现有针对性的过滤。
3.ACL访问控制
在配置文件squid.conf中,ACL访问控制通过两个步骤:
第一、使用acl配置项定义需要控制的条件;
第二、通过http_access配置项对已定义列表做“允许”或“拒绝”访问的控制。
(1)定义访问控制列表
格式:acl 列表名称 列表类型 列表内容
[root@localhost ~]# vim /etc/squid.conf
……
acl SAFEPORT port 80 443
acl MALAN src 192.168.1.0 /24 //客户机网段
acl MEIDAFILE urlpath_regex -i \.mp4$ \.avi$ //以.mp4、.avi结尾的URL路径
acl WORKING time MWTHF 08:30-17:30 //时间为周一至周五8:30~17:30
……
当要限制的同一类对象较多时,可以使用独立的文件来存放,在acl配置行的列表内容处指定对应的文件位置即可。例如,要针对目标地址建立黑名单文件,操作如下:
[root@localhost ~]# mkdir /etc/squid
[root@localhost ~]# vim /etc/squid/ipblock.list //建立目标IP地址名单
61.135.167.36
125.39.127.25
……
[root@localhost ~]# vim /etc/squid/dmblock.list //建立目标域地址名单
.qq.com
.msn.com
.live.com
……
[root@localhost ~]# vim /etc/squid.conf
……
acl IPBLOCK dst “/etc/squid/ipblock.list” //调用指定文件中的内容
acl DMBLOCK dstdomain “/etc/squid/dmblock.list”
常用的访问控制列表类型
src:源IP地址、网段、IP地址范围
dst:目标IP地址、网段、主机名
port:目标端口
dstdomain:目标域
time:上网时间,WTWHFAS表示一星期中的各天的英文缩写(H-Thursday)
maxconn:每个客户机的并发连接数
url_regex:目标资源的URL地址,-i表示忽略大小写(例如:^rtsp://)
urlpath_regex:目标资源的整个URL路径(例如:\.mp3$)
(2)设置访问权限
使用http_access配置项来进行控制,需要注意的是,http_access配置行必须放在对应的acl配置行之后。
格式:http_access allow或deny 列表名……
[root@localhost ~]# vim /etc/squid.conf
…… //acl列表
http_access deny MYLAN MEDIAFILE IPBLOCK DMBLOCK
//禁止客户机下载MP4、avi类型文件,禁止客户机访问黑名单中的IP地址、网站域
http_access allow MYLAN WORKTIME //允许客户机在工作时间上网
http_access deny all //默认策略禁止所有客户机使用代理
执行访问控制时,squid将按照各条规则的顺序一次进行检查,如果找到一条相匹配的规则就不再向后搜索,需要注意的是:
·没有设置任何规则时:Squid服务器拒绝客户端的请求
·有规则但找不到相匹配的项:Squid将采用与最后一条规则的相反的权限
四、Squid日志分析
Sarg全名是Squid Analysis Report Generator,是一款Squid日志分析工具,采用HTML格式,详细列出每一位用户访问Internet的站点信息、时间占用信息、排名、连接次数、访问量等。
1.安装GD库
[root@localhost ~]# yum -y install gd gd-devel
2.安装sarg
上述配置项的含义:
--sysconfdir=/etc/sarg //配置文件目录,默认是/usr/local/etc
--enable-extraprotection //添加额外的安全保护
3.配置
[root@localhost ~]# vim /etc/sarg/sarg.conf
access_log /usr/local/squid/var/logs/access.log //指定squid的访问日志文件
title “Squid User Access Report” //网页标题
output_dir /var/www/html/sarg //sarg报告的输出目录
user_ip no //使用户名显示
exclude_hosts /usr/local/sarg/noreport //指定不计入排序的站点列表文件
topuser_sort_filed connect BYTES reverse
//在top排序中,指定连接次数、访问字节数,采用降序排列,升序将reverse换成normal
user_sort_filed connect reverse //对于用户访问记录,连接次数按降序排列
overwrite_report no //当那个日期报告已经存在,是否覆盖报告
charset UTF-8 //使用字符集
weekdays 0-6 //指定top排序时的星期周期,0为周日
hours 9-12,14-16,18-20 //指定top排序时的时间周期
www_document_root /var/www/html //网页根目录
4.运行
上述配置中,添加了不计入排序的站点,需要存在这个文件中:
[root@localhost ~]# touch /usr/local/sarg/noreport
这个文件中添加的 域名将不被显示在排序中
[root@localhost ~]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin //设置符号链接
[root@localhost ~]# sarg //启动一次记录
5.验证
在客户端上访问http://192.168.1.254/sarg/,可以看到报表。
6.计划任务
可以将sarg做成计划任务,定期执行
例如,写个日报告:
[root@localhost ~]# vim /usr/local/sarg/daily.sh
#/bin/bash
#get current date
TODAY=$(date +%d/%M/%Y)
#get one week ago today
YESTERDAY=$(date -d “1 day ago” +%d/%m/%Y)
/usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/sarg -z -d $YESTERDAY-$TODAY &> /dev/null
exit 0
[root@localhost ~]# chmod +x /usr/local/sarg/dalily.sh
[root@localhost ~]# crontab -e
00 00 * * * /usr/local/sarg/daily.sh
[root@localhost ~]# chkconfig crond on