Squid缓存服务器原理与实战演练

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Squid缓存服务器原理与实战演练相关的知识,希望对你有一定的参考价值。

Squid服务基础讲解
代理缓存机制:
技术分享图片
代理的基本类型:
1、 传统代理:需要在客户端软件手动设置指定代理服务器
技术分享图片

2、 透明代理:无需用户手动指定,通过路由、防火墙策略将访问重定向
技术分享图片
Squid 反向代理:为网站服务
技术分享图片
下面进行实战演练!

实验环境:
代理服务器squid 192.168.80.181
HTTP服务器192.168.80.182
Win7客户端 192.168.80.9
代理服务器端配置如下
[[email protected] squid-3.5.27]# tar xf squid-3.5.27.tar.gz -C /opt/ #解压squid源码包
[[email protected] squid-3.5.27]# yum install perl-devel #安装perl语言编译插件
[[email protected] squid-3.5.27]# cd /opt/squid-3.5.27/
[[email protected] squid-3.5.27]# ./configure
--prefix=/usr/local/squid
--sysconfdir=/etc
--enable-arp-acl //支持acl
--enable-linux-netfilter //支持透明代理
--enable-linux-tproxy //重定向
--enable-async-io=100
--enable-err-language="Simplify_Chinese"
--enable-underscore --enable-poll
--enable-gnuregex
[[email protected] squid-3.5.27]# make && make install //配置、编译、安装
[[email protected] squid-3.5.27]# ln -s /usr/local/squid/sbin/* /usr/local/sbin //
[[email protected] squid-3.5.27]# useradd -M -s /sbin/nologin squid
[[email protected] squid-3.5.27]# chown -R squid:squid /usr/local/squid/var/
[[email protected] squid-3.5.27]# vi /etc/squid.conf
http_port 3128 //59行,在下面新增
visible_hostname 192.168.80.181
cache_mem 64 MB
cache_swap_low 80
cache_swap_high 97
cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 //68行,去掉注释配置硬盘缓存,打开#.缓存目录100M,其中一级目录16个,二级256个
cache_effective_user squid
cache_effective_group squid //制定squid用户的执行主和组
[[email protected] squid-3.5.27]# squid -k parse //检查配置文件
[[email protected] squid-3.5.27]# squid –k rec //重新加载配置文件
[[email protected] squid-3.5.27]# squid -zX //初始化缓存目录
[[email protected] squid-3.5.27]# vi /etc/init.d/squid //制作管理脚本
#!/bin/bash
#chkconfig: 35 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 -utpln | grep squid &>/dev/null
if [ $? -eq 0 ]
then
echo "Squid is running"
else
$CMD
fi
;;
stop)
$CMD -k kill &>/dev/null
rm -rf $PID &>/dev/null
;;
status)
[ -f $PID ] &>/dev/null
if [ $? -eq 0 ]
then
netstat -utpln | 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 "用法:{start | stop | restart | reload | check | status}"
esac
[[email protected] squid-3.5.27]# chmod +x /etc/init.d/squid //赋予启动脚本执行权限
[[email protected] squid-3.5.27]# chkconfig --add squid //将squid添加到管理脚本
[[email protected] squid-3.5.27]# chkconfig squid on //设置开机自启动
[[email protected] squid-3.5.27]# service firewalld stop
[[email protected] squid-3.5.27]# setenforce 0
[[email protected] squid-3.5.27]# service squid start
[[email protected] squid-3.5.27]# netstat -anpt | grep 3128
此时已经可以通过代理服务器访问www服务器了
下面是http服务器的配置
[[email protected] ~]# yum install -y httpd //安装httpd服务器
[[email protected] ~]# service httpd start //启动
下面客户端直接访问测试
技术分享图片
没有指定代理服务器,访问正常
下面客户端指定代理服务器

技术分享图片
设置完毕,去http服务器上监控访问日志
[[email protected] ~]# tail -f /etc/httpd/logs/access_log
下面再去访问182
技术分享图片
技术分享图片
访问依旧成功,查看日志发现,实际的访问者为181代理服务器。
du -sh /usr/local/squid/var/cache/squid/
技术分享图片
缓存服务器内容已经缓存了

-------------------限制下载文件的大小------------
在http服务器上配置
[[email protected] ~]# cd /var/www/html/
[[email protected] html]# dd if=/dev/zero of=test1.tgz bs=1M count=11
[[email protected] html]# dd if=/dev/zero of=test2.tgz bs=1M count=2 //复制出两个tgz文件用于下载测试。
[[email protected] squid-3.5.27]# vi /etc/squid.conf
reply_body_max_size 10 MB //限制文件超过10M的不能下载
[[email protected] squid-3.5.27]# service squid restart
客户端测试下载情况
当访问下载test2.tgz时可以成功下载
技术分享图片

当访问test1.tgz时,由于大小为11M,则不能下载
技术分享图片

-------------下面配置透明代理------------------
代理服务器做为内网的网关设备,两块网卡,一块连接内网,另一块连接外网,测试客户端主机要指网关。
首先理清实验拓扑:通过181的网关代理,使80.9的win7能够上互联网
Win7:ip地址为192.168.80.9,网关地址为192.168.80.181
代理squid:内网网卡地址为192.168.80.181,使用桥接模式连外网

下面进行实验准备,打开代理服务器的桥接模式,两块网卡地址都已经获得了
181为内网,123.197为外网口地址
技术分享图片
Ping百度是通的,说明可以上网
技术分享图片
将win7之前的指定代理服务器去掉,此时是上不了网的
技术分享图片
指定他的网关为192.168.80.181
技术分享图片
下面去配置squid透明代理
[[email protected] ~]# vi /etc/squid.conf
http_port 192.168.80.181:3128 transparent //将改行修改如此,指定内网卡监听端口
[[email protected] ~]# service squid restart
[[email protected] ~]# yum install -y iptables-services
[[email protected] ~]# systemctl start iptables
[[email protected] ~]# iptables –F //清空防火墙nat表内容
[[email protected] ~]# iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -s 192.168.80.0/24 -j REDIRECT --to-ports 3128 //对nat表的PREROUTING链做操作,指定内网卡ens33接收到的来自192.168.80.0/24网段的80端口的tcp请求全部转发给3128端口处理
[[email protected] ~]# service iptables save //保存防火墙配置
技术分享图片
Win7客户端访问百度成功

-------------------下面可以配置acl访问控制---------
[[email protected] ~]# vi /etc/squid.conf
Acl和防火墙一样是从上向下依次匹配,匹配及停止,并执行匹配的动作。
#acl localnet src 192.168.0.0/16 //注释本行默认配置

http_access allow all //在本行上面新增ACL语句,如果在该行下面插入,则访问的已经被全部允许了

1.禁止某IP地址主机上网
acl nolink src 192.168.90.9
http_access deny nolink

2.禁止某网段在某时间段上网
acl nolink src 192.168.1.0/24
acl nowang time MTWHF 9:00-11:30
http_access deny nolink nowang

3.禁止所有人访问某网站(精确匹配)
acl nourl dstdomain -i www.qq.com
http_access deny nourl

4.禁止所有人访问某些网站(含有关键字的都会过虑)
acl nourl url_regex -i taobao.com
http_access deny nourl

5.禁止下载某类型的文件
acl nof urlpath_regex -i .avi$ .mkv$
http_access deny nof

6.禁止访问某类型的网站
acl nop url_regex -i ^emule:// ^thunder
http_access deny nop

修改squid配置文件测试
[[email protected] ~]# vi /etc/squid.conf
#acl localnet src 192.168.0.0/16 //注释本行默认配置
技术分享图片
[[email protected] ~]# service squid restart
技术分享图片
再次访问,访问被拒绝

---------------配置sarg日志---------------
注意:需要在代理服务器上安装WWW服务器
[[email protected] ~]# yum install -y httpd
[[email protected] sarg-2.3.11]# tar xf sarg-2.3.11.tar.gz -C /opt/
[[email protected] sarg-2.3.11]# cd /opt/sarg-2.3.11/
[[email protected] sarg-2.3.11]# ./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
[[email protected] sarg-2.3.11]# make && make install
[[email protected] sarg-2.3.11]# vi /etc/sarg/sarg.conf
7 access_log /usr/local/squid/var/logs/access.log //squid的访问日志位置
25 title "Squid User Access Reports" //网页标题
120 output_dir /var/www/html/squid-reports //分析报告的存放位置
178 user_ip no //不使用IP代替用户ID
184 topuser_sort_field BYTES reverse //升序排列
190 user_sort_field BYTES reverse
206 exclude_hosts /usr/local/sarg/noreport //设置不生成报告的主机
257 overwrite_report no
289 mail_utility mailx //指定发邮件命令
434 charset UTF-8
518 weekdays 0-6 //指定top排序星期周期
523 hours 7-12,14,16,18-20 //指定top排序时间周期
633 www_document_root /var/www/html //网页根目录
[[email protected] sarg-2.3.11]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
[[email protected] sarg-2.3.11]# sarg //启动
SARG: Records in file: 102, reading: 100.00%
SARG: Successful report generated on /var/www/html/squid-reports/2018Mar21-2018Mar22

http://192.168.80.181/squid-reports/ //访问日志页
技术分享图片
----------------配置squid反向代理-------------
Squid服务器:内网卡192.168.80.181 外网卡192.168.80.90.181
两台web服务器:192.168.80.182 192.168.80.183
Win7客户端:192.168.90.9 gw192.168.90.181
[[email protected] network-scripts]# vi /etc/squid.conf
http_port 192.168.90.181:80 vhost vport
cache_peer 192.168.80.182 parent 80 0 no-query round-robin originserver name=s1
cache_peer 192.168.80.183 parent 80 0 no-query round-robin originserver name=s2
cache_peer_domain s1 www.test.com
cache_peer_domain s2 www.abc.com
[[email protected] network-scripts]# service squid restart
下面去客户端测试
修改hosts文件
192.168.90.181 www.test.com
192.168.90.181 www.abc.com
访问成功
技术分享图片如果报错访问被拒绝deny改为allow
技术分享图片
技术分享图片

以上是关于Squid缓存服务器原理与实战演练的主要内容,如果未能解决你的问题,请参考以下文章

Squid缓存服务器(缓存机制代理模式ACL访问控制squid用户认证功能等)

varnish-原理

高性能Web服务之varnish应用详解及实战应用

Varnish缓存代理简介与配置

Squid传统代理与透明代理构建

Squid缓存服务器之ACL访问控制与反向代理