Squid代理缓存服务器
一、代理缓存服务器
1.分类
- 正向代理:部署在企业内部,实现企业内部客户端访问公网加速(ACL、缓存)
传统代理:需在客户端指向正向代理服务器的IP及端口,方可正常使用
透明代理:将正向代理服务器作为网关,客户端只需指明网关地址即可
- 反向代理:部署在企业内部,实现公网客户端访问内部服务器加速
2.缓存方式
硬盘:速度慢、缓存时间长
- 内存:速度快、重启后缓存丢失
二、Squid
- Squid是应用层的代理服务软件,Squid主要提供缓存加速、应用层过滤控制的功能
- Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
- Squid是一种用来缓冲Internet数据的软件。它接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。
- Squid可运行在大多数Unix和OS/2版本的系统之上,已知的可工作的有:Windows,AIX,Digital Unix,FreeBSD,HP-UX,Irix,Linux,NetBSD,Nextstep,SCO,Solaris
1.Squid代理的工作机制
第一种情况:Squid服务器中有缓存
- 当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机;
第二种情况:Squid服务器中没有缓存
- 如果缓存中没有客户机要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机
- HTTP代理的缓存加速对象主要是文字、图像等静态Web元素。使用缓存机制后,当客户机在不同的时候访问同一Web元素,或者不同的客户机访问相同的Web元素时,可以直接从代理服务器的缓存中获得结果。这样就大大减少了向Internet提交重复的Web请求的过程,提高了客户机的Web访问响应速度
- 由于客户机的Web访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户的真实IP地址,起到一定的保护作用。另一方面,代理服务器担任着类似“经纪人”的角色,所以有机会针对要访问的目标、客户机的地址、访问的时间段等进行过滤控制
2.代理的基本类型
根据实现方式不同,代理服务可分为传统代理和透明代理两种常见的代理服务
a.传统代理:也就是普通的代理服务,首先必须在客户机的浏览器、QQ聊天工具、下载软件等程序中手动设置代理服务器的地址和端口,然后才能使用代理来访问网络。对于网页浏览器,访问网站时的域名解析请求也会发给指定的代理服务器
- b.透明代理:提供与传统代理相同的功能和服务,其区别在于客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向,实际仍然交给代理服务器来处理。重定向的过程对客户机来说是“透明”的,用户甚至都不知道自己在使用代理服务,所以称为“透明代理”。使用透明代理时,网页浏览器访问网站时的域名解析请求将优先转发给DNS服务器
实际应用中,传统代理多见于Internet环境,如为QQ程序使用代理可以隐藏本机真实IP地址,为下载工具使用多个代理可以规避服务器的并发连接限制。而透明代理多见于局域网环境,如在Linux网关中启用透明代理后,局域网主机无需进行额外设置就可以享受更好的上网速度
三、部署squid正向代理(传统代理)
环境准备
两台,一台linu作为squid代理及网关(两块网卡,第一块vmnet1、第二块桥接),另一台windows客户端(vmnet1)
部署gateway
1.IP配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp
/etc/init.d/network restart
2.开启路由功能
vim /etc/sysctl.confnet.ipv4.ip_forward = 1
sysctl -p
iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.13.206
部署squid
1.编译安装Squid
配置Squid的编译选项时,将安装目录设为/usr/local/squid,其他具体选项根据实际需求来定,配置前可参考“./configure --help”给出的说明
tar -zxvf squid-3.4.6.tar.gz -C /usr/src/
cd /usr/src/squid-3.4.6/
./configure --prefix=/usr/local/squid --sysconfdir=/etc/ --enable-linux-netfilter --enable-arp-acl --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll
选项详解
--prefix=/usr/local/squid #安装目录
--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-gnuregex #使用GNU正则表达式--enable-gnuregex
make && make install
echo "PATH=$PATH:/usr/local/squid/sbin" >>/etc/profile && source /etc/profile
useradd -M -s /sbin/nologin squid
chown -R squid:squid /usr/local/squid/var/
2.更改配置
vim /etc/squid.conf56 http_access allow all #允许所有访问61 cache_effective_user squid #指定运行用户62 cache_effective_group squid #指定运行组63 visible_hostname xueluo.org #指定当前主机名65 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 #启用缓存68 #coredump_dir /usr/local/squid/var/cache/squid #注释改行
squid -k parse #检测配置文件(/etc/squid.conf)是否有问题
squid -z #创建缓存目录
3.启动服务
vim /etc/init.d/squid
#!/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" instart)netstat -utpln | grep squid &>/dev/nullif [ $? -eq 0 ]thenecho "Squid is running"else$CMDfi;;stop)$CMD -k kill &>/dev/nullrm -rf $PID &>/dev/null;;status)[ -f $PID ] &>/dev/nullif [ $? -eq 0 ]thennetstat -utpln | grep squidelseecho "Squid is not running"fi;;restart)$0 stop &>/dev/nullecho "正在关闭Squid..."$0 start &>/dev/nullecho "正在启动Squid...";;reload)$CMD -k reconfigure;;check)$CMD -k parse;;*)echo "用法:{ start | stop | restart | reload | check | status}";;
esac
chmod +x /etc/init.d/squid
chkconfig --add squid
/etc/init.d/squid start
netstat -utpln | grep 3128
4.验证
IE-->代理服务器(192.168.1.1 3128) --> 119.75.213.61
tail -f /usr/local/squid/var/logs/access.log //查看代理访问日志
四、部署squid正向代理(透明代理)
环境准备
两台,一台linu作为squid代理及网关(两块网卡,第一块vmnet1、第二块桥接),另一台windows客户端(vmnet1)
部署gateway
1.IP配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp
/etc/init.d/network restart
2.开启路由功能
vim /etc/sysctl.confnet.ipv4.ip_forward = 1
sysctl -p
iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.13.206
部署squid
1.编译安装Squid
配置Squid的编译选项时,将安装目录设为/usr/local/squid,其他具体选项根据实际需求来定,配置前可参考“./configure --help”给出的说明
tar -zxvf squid-3.4.6.tar.gz -C /usr/src/
cd /usr/src/squid-3.4.6/
./configure --prefix=/usr/local/squid --sysconfdir=/etc/ --enable-linux-netfilter --enable-arp-acl --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll
选项详解
--prefix=/usr/local/squid #安装目录
--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-gnuregex #使用GNU正则表达式--enable-gnuregex
make && make install
echo "PATH=$PATH:/usr/local/squid/bin:/usr/local/squid/sbin" >>/etc/profile
source /etc/profile
useradd -M -s /sbin/nologin squid
chown -R squid:squid /usr/local/squid/var/
2.更改配置
vim /etc/squid.conf56 http_access allow all #允许所有访问60 http_port 192.168.1.1:3128 transparent61 cache_effective_user squid #指定运行用户62 cache_effective_group squid #指定运行组63 visible_hostname xueluo.org #指定当前主机名65 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 #启用缓存68 #coredump_dir /usr/local/squid/var/cache/squid #注释改行
iptables -t nat -I PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
squid -k parse #检测配置文件(/etc/squid.conf)是否有问题
squid -z #创建缓存目录
3.启动服务
vim /etc/init.d/squid
#!/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" instart)netstat -utpln | grep squid &>/dev/nullif [ $? -eq 0 ]thenecho "Squid is running"else$CMDfi;;stop)$CMD -k kill &>/dev/nullrm -rf $PID &>/dev/null;;status)[ -f $PID ] &>/dev/nullif [ $? -eq 0 ]thennetstat -utpln | grep squidelseecho "Squid is not running"fi;;restart)$0 stop &>/dev/nullecho "正在关闭Squid..."$0 start &>/dev/nullecho "正在启动Squid...";;reload)$CMD -k reconfigure;;check)$CMD -k parse;;*)echo "用法:{ start | stop | restart | reload | check | status}";;
esac
chmod +x /etc/init.d/squid
chkconfig --add squid
/etc/init.d/squid start
netstat -utpln | grep 3128
4.测试
IE --> 119.75.213.61
tail -f /usr/local/squid/var/logs/access.log
五、Squid的ACL
Squid提供了强大的代理控制机制,通过合理设置ACL(Access Control List,访问控制列表)并进行限制,可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤
- 在配置文件squid.conf中,ACL访问控制通过以下两个步骤来实现:其一,使用acl配置项定义需要控制的条件;其二,通过http_access配置项对已定义的列表做“允许”或“拒绝”访问的控制
1.定义访问控制列表
每一行acl配置可以定义一条访问控制列表,格式如下所示
acl 列表名称 列表类型 列表内容 ...
其中,“列表名称”由管理员自行指定,用来识别控制条件;“控制类型”必须使用Squid预定义的值,对应着不同类别的控制条件;“列表内容”是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格分割,为“或”的关系)
- 通过上述格式可以发现,定义访问控制列表时,关键在于选择“列表类型”并设置具体的条件对象。Squid预定义类型有很多种,常用的包括源地址、目标地址、访问时间、访问端口等
列表类型 | 列表内容示例 | 含义/用途 |
---|---|---|
src | 192.168.1.168192.1681.0/24192.168.1.0-192.168.3.0/24 | 源IP地址、网段、IP地址范围 |
dst | 216.163.137.361.135.167.0/24www.playboy.com | 目标IP地址、网段、主机名 |
port | 80 443 8080 20 21 | 目标端口 |
dstdomain | .qq.com .msn.com | 目标域,匹配域内所有站点 |
time | MTWHF 8:30-17:3012:00-13:00AS | 字母表示一星期天中各天的缩写M--MondayT--TuesdayW--WednesdatH--ThursdayF--FridatA--SaturdatS--Sunday |
maxconn | 20 | 每个客户机的并发连接数 |
url_regex | url_regex -i ^rtsp://url_regex -i ^emule:// | 目标资源的URL地址,-i表示忽略大小写 |
urlpath_regex | urlpath_regex -i sex adulturlpath_regex -i .mp3$ | 目标资源的整个URL路径,-i表示忽略大小写 |
- 在定义访问控制列表时,应结合当前网络环境正确分析用户的访问需求,准确定义使用代理服务的控制条件。例如,针对不同的客户机地址,需要限制访问的目标网站、特定的时间段......,分别定义列表
[root@localhost ~]# vim /etc/squid.conf
......
acl localhost src 127.0.0.1/255.255.255.255 //源地址为127.0.0.1
acl MYLAN src 192.168.1.0/24 192.168.4.0/24 //客户机网段
acl to_localhost dst 127.0.0.0/8 //目标地址为127.0.0.0/8网段
acl MC20 maxconn 20 //最大并发连接20
acl BlankURL url_regex -i ^rtsp:// ^emule:// //以rtsp://等开头的URL
acl MEDIAFILE urlpath_regex -i .mp3& .mp4& .rmvb& //以.mp3、.mp4等结尾的URL路径
acl WORKTIME time MTWHF 08:30-17:30 //时间为周一至周五08:30-17:30
- 当需要限制的同一类对象较多时,可以使用独立的文件来存放,在acl配置行的列表内容处指定对应的文件位置即可。例如,若要针对目标地址建立黑名单文件,可以参考一下操作
[root@localhost ~]# mkdir /etc/squid
[root@localhost ~]# cd /etc/squid/
[root@localhost squid]# vim ipblock.list //建立目标IP地址名单
61.135.167.36
125.39.127.25
60.28.14.0/24
[root@localhost squid]# vim dmblock.list //建立目标域地址名单
.qq.com
.msn.com
.live.com
.verycd.com
[root@localhost ~]# vim /etc/squid.conf
......
acl IPBLOCK dst "/etc/squid/ipblock.list" //调用指定文件中的列表内容
acl DMBLOCK dstdomain "/etc/squid/dmblock.list"
2.设置访问权限
定义好各种访问控制列表以后,需要使用http_access配置项来进行控制。必须注意的是,http_access配置行必须放在对应的acl配置行之后。每一行http_access配置确定一条访问控制规则。格式如下所示
http_access allow或deny 列表名 ......
在每一条http_accsess规则中,可以同时包含多个访问控制列表名,各个列表之间以空格分隔,为“与”的关系,表示必须满足所有访问控制列表对应的条件才会进行限制。需要使用取反条件时,可以在访问控制列表前添加“!”符号
[root@localhost ~]# vim /etc/squid.conf
......
http_access deny MYLAN MEDIAFILE //禁止客户机下载MP3、MP4等文件
http_access deny MYLAN IPBLOCK //禁止客户机访问黑名单中的IP地址
http_access deny MYLAN DMBLOCK //禁止客户机访问黑名单中的网站域
http_access deny MYLAN MC20 //客户机的并发连接超过20时将被阻止
http_access allow MYLAN WORKTIME //允许客户机在工作时间上网
http_access deny all //默认禁止所有客户机使用代理
执行访问控制时,Squid将按照各条规则的顺序依次进行检查,如果找到一条相匹配的规则就不再向后搜索(这点与iptables的规则匹配类似)。因此,规则的顺序安排是非常重要的,以下两种默认情况需要我们注意
没有设置任何规则时:Squid服务将拒绝客户端的请求
有规则但找不到相匹配的项:Squid将采用最后一条规则相反的权限,即如果最后一条规则时allow,就拒绝客户机的请求,否则允许该请求
- 通常清空下,把最常用的控制规则放在最前面,以减少Squid的负载。在访问控制的总体策略上,建议采用“先拒绝后允许”或“先允许后拒绝”的方式,最后一条规则设为默认策略,设置“http_access allow all”或者“http_access deny all”
3.验证访问控制效果
- 关于Squid服务的访问控制效果,无外乎两种情况:一种是能够正常访问,另一种时禁止访问。当客户机的代理访问请求被Squid服务被拒绝时,在浏览器中会看到ERROR报错页面,具体内容会根据限制条件不同有些细小差别
六、squid的日志分析
1.安装GD库,安装sarg
yum -y install gd httpd
yum -y localinstall gd-devel-2.0.35-11.el6.x86_64.rpm
mkdir /var/log/sarg
tar zxvf /root/sarg-2.3.7.tar.gz
cd sarg-2.3.7
./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
//--enable-extraprotection添加额外的安全保护
make && make install
2.配置
vim /etc/sarg/sarg.confaccess_log /usr/local/squid/var/logs/access.log //第7行title "Squid user Access reports" //第25行output_dir /var/www/html/sarg/ //第120行overwrite_report no //第257行mail_utility mailx //第289行topsites_num 100 //第294行max_elapsed 28800000 //第324行charset UTF-8 //第434行topuser_sort_field connect reverse bytes reverse //第184行 user_sort_field connect reverse BYTES reverse //第190行resolve_ip no //第153行user_ip no //第178行weekdays 0-6 //第518行hours 0-8,9-12,13-23 //第523行
3.运行
echo "PATH=$PATH:/usr/local/sarg/bin" >>/etc/profile
sarg //执行启动记录一次
/etc/init.d/httpd start
chkconfig httpd on
4.计划任务
crontab -e0 0 * * * /usr/local/sarg/bin/sarg
转载于:https://blog.51cto.com/13770206/2163491
Squid代理缓存服务器相关推荐
- 代理缓存服务器squid
链接 :[Linux通过squid配置代理上网] https://help.aliyun.com/knowledge_detail/41342.html?spm=5176.7841507.2.4.nS ...
- squid 3 反向代理 缓存服务器 安装配置精华指南 by lbj
squid-3.0.STABLE21 安装配置 by lbj 作用:作为反向代理/缓存服务器 系统:redhat linux 企业版 5.4 linux 要有gcc编译器,使用squid-3.0.ST ...
- 代理缓存服务器知识点整理
[代理缓存服务器知识点整理] 一.http相关 1.正常http请求跟代理http请求的区别 常规的http请求头部:GET /index.html HTTP/1.1 Host:www.xuxiong ...
- ROS 软路由配合squid WEB缓存服务器中实现行为管理
公司使用的ROS 软路由 和Cisco 交换机,划分的Vlan网络,路由器是ROS,在部署行为管理时,只能用端口镜像,但效果,表现比较一般,不能过滤内容,且公司终端数据比较多,网络出口压力日渐增大,需 ...
- nginx反向代理缓存服务器构建
博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 代理服务可简单的分为正向代理和反向代理: ...
- 【推荐】如何用 Nginx 构建反向代理缓存服务器?
作者:一盏烛光,贤牛特邀工程师. 防伪码:曾经沧海难为水,除却巫山不是云. 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对 Internet 的连接请求(如×××/NAT), ...
- NGINX做反向代理缓存服务器原理
代理服务可以简单的分为正向代理和反向代理 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标web服务器的HTTP请求先发送到 ...
- Linux实战教学笔记42:squid代理与缓存实践(一)
第1章 Squid介绍 1.1 缓存服务器介绍 缓存服务器(英文意思cache server),即用来存储(介质为内存及硬盘)用户访问的网页,图片,文件等等信息的专用服务器.这种服务器不仅可以使用户可 ...
- Squid代理服务器配置/二级代理
Squid全名Squid Cache(官网:http://www.squid-cache.org/),一个高性能的代理缓存服务器.主要支持FTP.HTTPS和HTTP协议.Squid用途广泛,可以作为 ...
最新文章
- Mysql sq优化(二)
- 普大喜奔:沁恒单片机免费样品申请开始啦!
- 一个关于HashCode 的追问!
- C语言 一维数组 练习
- 数据链路层、交换机内容整合
- python百钱买百鸡-百钱买百鸡的Python实现
- 谷歌否认街景服务侵犯隐私
- SpringCloudBus(了解)
- 未来我们需要一辆什么样的智能汽车?
- 谈谈对象和XML文件的转换
- Atitit httpclient feign使用总结RestTemplate Httpclient重要的功能 重试与超时 1.RedirectExec执行器的默认策略是,在接收到重定向错误码3
- 企业应如何改善设备功率因数,有效规避罚款
- 浏览器transform介绍
- UMLChina公众号文章精选(20220619更新精选)
- dexpathlist.java_java.lang.ClassNotFoundException: Didn't find class xxx on path: DexPathList
- JAVA生成高强度密码(包含随机数字+随机英文大小写)
- 2021-09-15如何把一个字符串的大小写取反(大写变小写小写变大写),例如 ’AbC‘ 变成 ‘aBc‘
- 什么办法能让鹅长头包 鹅什么药头上头瘤长得快
- 监管之外,加密货币在日本大行其道的其他原因
- Median Pyramid Hard题解
热门文章
- PointPillars 工程复现
- 扫描中国智慧城市:平安给出智慧方法论
- python partition函数_Python partition()函数的使用方法
- 降噪蓝牙耳机排名前十名,音质好、降噪明显的降噪耳机评测分享
- NokiaLogo Mobile版,仅供试用
- 开始学习c语言喽!!!
- SSM毕设项目大学校园宿舍零食便利店8o8u4(java+VUE+Mybatis+Maven+Mysql)
- 浅谈POE供电系统中PSE两种供电方式——终端跨度、中间跨度
- 华为matebook14s上手体验
- DDD(领域驱动设计)总结