squid缓存代理相关配置

本文介绍了Squid缓存代理的配置,包括传统代理和透明代理的设置,详细讲解了每一步操作,如安装、配置、 acl访问控制以及日志分析。通过设置代理,可以提高Web访问速度,隐藏客户机IP,并利用Sarg日志分析软件进行流量分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缓存代理概述

web代理工作机

制缓存网页对象,减少重复请求(作用)

当客户机的请求在Squid代理服务器缓存中存在时,Squid代理服务器返回数据;当请求Squid代理服务器缓存中没有时,Squid代理服务器才将请求发送给Web节点服务器,由Web节点进行数据回应,之后通过Squid服务器发送给客户机,同时Squid服务器也将发送的数据存入自己的缓存中,在下一次同样请求时直接回应请求,不需要请求到Web节点服务器
在这里插入图片描述

代理的基本类型

传统代理:适用于internet,需要明确指定服务器
端透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由,防火墙策略将web访问重定向给代理服务器处理

使用代理的好处

提高web访问速度
隐藏客户机的真实IP地址

安装squid

解压软件包

tar zxvf squid-3.5.23.tar.gz /opt

编译安装

cd /opt/squid-3.5.23
./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-arp--acl --enable-linux-netfilter --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll --enable-gnuregex

--prefix=/usr/local/squid #安装路径
--sysconfdir=/etc #配置文件根路径
--enable-arp--acl #允许arp的acl
--enable-linux-netfilter # Linux内核通过netfilter模块实现网络访问控制功能
--enable-linux-tproxy #实现透明代理功能
--enable-async-io=100 #异步传输输入输出数量
--enable-err-language="Simplify Chinese" #用中文报错
--enable-underscore #允许下划线
--enable-poll #协调读写设备额个数或读写设备顺序的函数
--enable-gnuregex #c/c++常用的正则表达式

make && make install

软连接,在本地使用squid命令

ln -s /usr/local/squid/sbin/* /usr/local/sbin

创建不可登录用户

useradd -M -s /sbin/nologin squid

设定属主属组

chown -R squid.squid /usr/local/squid/var/

修改配置文件

vi /etc/squid.conf
cache_effective_user squid #添加 指定程序用户
cache_effective_group squid #添加 指定账号基本组
coredump_dir /usr/local/squid/var/cache/squid #设置数据缓存的目录

在这里插入图片描述

squid -k parse #检查配置文件语法
没有error报错信息即可
squid -z #初始化缓存目录

在这里插入图片描述

squid #启动服务
netstat -anpt | grep squid #查看服务启动情况

在这里插入图片描述
创建程序管理脚本

vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 35 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case $1 in
start)    
    netstat -napt | grep squid &> /dev/null    
    if [ $? -eq 0 ]    
    then      
    echo "squid is running"      
    else      
    echo "正在启动 squid..."      
    $CMD   
  fi
;;
stop) 
   $CMD -k kill $> /dev/null   
   rm -rf $ $PID &> /dev/null
;;
reload)
   $CMD -k reconfigure
;;
status) 
   [ -f $PID ] &> /dev/null       
   if [ $? -eq 0 ]          
   then               
   netstat -napt | grep squid          
   else               
   echo "squid is not running"        
  fi
;;
restart)
    $0 stop &> /dev/null    
    echo "正在关闭"   
    $0 start &> /dev/null    
    echo "正在启动"
;;
check)
   $CMD -k parse
;;
*)
   echo "用法:$0{start|stop|status|restart|reload|check}"
esac
chmod +x /etc/init.d/squid #赋予执行权限
chkconfig --add /etc/init.d/squid 
chkconfig --list #检查
systemctl start squidsystemctl status squid #查看状态

在这里插入图片描述

传统代理服务器

准备

web1服务器:20.0.0.20
web2服务器:20.0.0.30
squid服务器:20.0.0.10
客户机:20.0.0.40

配置

squid服务器

vi /etc/squid.conf
http_access allow all
http_access deny all #允许所有(按顺序执行,先允许后拒绝)
http_port 3128 
cache_mem 64MB #指定缓存功能所使用的内存空间大小,便于保持访问频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB #允许用户下载的最大文件大小,以字节为单位,默认设置0表示不进行限制
maximum_object_size 4096 KB #允许保持到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户

在这里插入图片描述

squid -k parse #检查语法
systemctl restart squid #重启服务

在另两台主机安装web节点

安装httpd

yum -y install httpd

关闭所有主机防火墙

systemctl stop firewalld
setenforce 0
2号节点:echo "<h1>web1</h1>" > /var/www/html/index.html
3号节点:echo "<h1>web2</h1>" > /var/www/html/index.html
systemctl start httpd

在4号客户机上访问测试网页,并查看效果

在这里插入图片描述
在2,3上查看日志,是来自4号主机的访问

tail -f /var/log/httpd/access_log

在这里插入图片描述
在4号客户机的浏览器上设置代理服务器
打开浏览器–设置页面–首选项–高级–网络–连接设置
手动配置代理–http代理20.0.0.10端口3128

在浏览器中访问2,3号主机网页查看后日志,是来自代理服务器的访问
在这里插入图片描述

透明代理

准备

systemctl stop squid #关闭服务

拓扑图
在这里插入图片描述
实现同网段互通后
在squid上开启路由

vi /etc/sysctl.conf 
net.ipv4.ip_forward = 1
sysctl -p

在这里插入图片描述
在web节点上加路由

route add -net 192.168.110.0/24 gw 192.168.100.10
route -n #查看路由

在这里插入图片描述

客户机上指定网关为squid服务器ens37的ip:192.168.110.10

route -n #查看路由

实现全网互通
在这里插入图片描述

配置

vi /etc/squid.conf
http_port 192.168.110.10:3128 transparent
systemctl start squid #启动服务

在这里插入图片描述
在squid服务器上配置iptables策(重定向)

iptables -F #清空策略
iptables -t nat -I PREROUTING -i ens37 -s 192.168.110.0/24 -p tcp --dport=80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens37 -s 192.168.110.0/24 -p tcp --dport=443 -j REDIRECT --to 3128
【iptables -I INPUT -p tcp --dport 3128 -j ACCEPT】
#将来自ens33网卡192.168.110.0/24网段的包重定向到3128端口

在客户机上访问服务器后查看日志
查看网页节点日志
在这里插入图片描述
查看squid服务器服务日志
在这里插入图片描述

acl访问控制

常用的acl列表类型

src–源地址
dst–目标地址
port–端口号
destdomain–目标域
time–访问时间
maxconn–最大并发连接数
url_regex–目标url地址
urlpath_regex–整个目标url路径

使用规则:先定义,再调用

squid定义acl
acl 列表名称 类型 控制的对象
acl localhost src #IP地址
acl MYLAN src #网段 
acl destionhost dst #目标地址  
acl MC20 maxconn 20 #设定最大连接数
acl BURL url_regex -i  ^rtsp:// ^emule:// #设定以rtsp、rtsp开头的访问,支持正则表达式,rtsp传输音频视频的协议,emule下载协议
acl PURL urlpath_regex -i \.mp3$ .\mp4$ .\rmvb$   #设定以mp3,mp4,rmvb结尾的访问
acl work time MTWHFAC 08:00-17:00 #设定工作时间

也可以先定义一个包含要定义的目标的文件
mkdir /etc/squid #启用对象列表管理
vi dest.list
192.168.1.2 #目标web
vi /etc/squid.conf
acl destionhost dst "/etc/squid/dest.list" #定义acl
http_access deny destionhost #调用acl

squid调用
aclhttp_access allow/deny 列表名称

比如vi /etc/squid.conf
acl client src 192.168.110.40/32
http_access deny client
systemctl restart squid

在这里插入图片描述
重启后再被禁止登录的ip上访问
在这里插入图片描述
查看squid日志
在这里插入图片描述

squid日志分析

通过日志分析软件sarg实现

yum -y install gd gd-devel #图像处理(若yam源中没有gd-devel,可通过阿里云或是网易云的yum仓库)
mkdir /usr/local/sarg #创建安装路径
tar zxvf sarg-2.3.7.tar.gz /optcd /opt/sarg-2.3.7/
./configure 
--prefix=/usr/local/sarg #安装路径
--sysconfdir=/etc/sarg  #系统配置文件
--enable-extraprotection #开启额外的安全防护
make && make install

vi /etc/sarg/sarg.conf 
7/ access_log /usr/local/squid/var/logs/access.log #指定访问日志文件
25/ title "squid User Access Reports" #网页标题
120/ output_dir /var/www/html/squid-reports #报告输出目录
178/ user_ip no #使用用户名显示
206/ exclude_hosts /usr/local/sarg/noreportl #不计入排序的站点列表文件
184/ topuser_sort_field connect reverse #top排序中有连接次数、访问字节、降序排列升序是normal
190/ user_sort_field reverse(注释掉) #用户访问记录连接次数、访问字节按降序排序
257/ overwrite_report no #同名日志是否覆盖
289/ mail_utility mailq.postfix #发送邮件报告命令
434/ charset UTF-8 #使用字符集
518/ weekdays 0-6l  #top排行的星期周期
525/ hours 0-23l #top排行的时间周期
633/ www_document_root /var/www/html #网页根目录

touch /usr/local/sarg/noreport #创建一个不记排名的文件 

ln -s /usr/local/sarg/bin/sarg /usr/local/bin/ #命令链接

sarg

因为生成的网页日志报告,所以要安装apache,安装后启动

yum -y install httpd
systemctl start httpd

在浏览器中访问该目录的网页http://192.168.100.10/squid-reports/
在这里插入图片描述
周期性计划任务执行每天生成报告crontab

crontab -e 
* 2 * * * /usr/lcoalbin/sarg -l /usr/local/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $(date -d "1 day ago" +%Y-%m-%d)-$(date +%Y-%m-%d)

反向代理

概述

如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用

工作机制(目的)

缓存网页对象,减少重复请求
将互联网请求轮询或按权重分配到内网尾部服务器
让用户请求,避免用户直接访问web服务器,提高安全性(类似于调度器)

配置

因为在squid反向代理中会用到80端口,所以要停止http服务

systemctl stop httpd
vi /etc/squid.conf
http_port 192.168.100.10:80 accel vhost vport
cache_peer 192.168.100.20 parent 80 0 no_query originserver round-robin max-conn=100 weight=1 name=web1
cache_peer 192.168.100.30 parent 80 0 no_query originserver round-robin max-conn=100 weight=1 name=web2
【ache peer_domain web1 web2 www.ph.com】#需要用域名访问时设置
systemctl restart squid

在这里插入图片描述
在客户机上访问后,查看squid日志
ip访问
在这里插入图片描述
域名访问,需要在客户机上多好域名绑定
在这里插入图片描述
squid日志
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值