squid 缓存服务器
作者:互联网
Squid 代理服务器
目录一 缓存代理概述
1.1 web 代理的工作机制
- 缓存网页对象,减少重复请求
- 代替客户机向网站请求数据,从而可以隐藏用户的真实ip地址。
- 将获得的网页数据(静态web元素)保存到缓存中并发送个客户机,以便下次请求
1.2 代理服务器的概念
代理服务器是一个位于客户端和原始(资源) 服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并制定目标原始服务器,然后代理服务器向原始服务器转交请求并获得内容返回给客户端。
1.3 代理服务器的作用
- 资源获取:代替客户端实现从原始服务器的资源获取
- 加速访问: 代理服务器可能里原始服务器更近,从而起到一定的加速作用
- 缓存作用: 代理服务器保存从原始服务器所获取的资源,从而实现客户端快速的获取
- 隐藏真实地址: 代理服务器代替客户端去获取原始服务器资源,从而隐藏客户端真实信息
1.4 squid 代理的类型
传统代理:适用于Internet,需要在客户机指定代理服务器的地址和端口
透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由,防火墙策略,架构访问重定向给代理服务器
反向代理: 如果squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则,反向代理服务器将向后台的web服务器请求资源,然后将请求的应到返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。
二: 安装squid
2.1 将软件包传到 /opt/目录下
#上传软件包 squid-3.5.28.tar.gz 到 /opt 目录中
[root@host103 opt]# ls squid-3.5.28.tar.gz
squid-3.5.28.tar.gz
#关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2.2 编译安装squid
#下载必要的编译安装工具,解压软件
yum -y install gcc gcc-c++ make
tar zxf squid-3.5.28.tar.gz -C /opt/
cd /opt/squid-3.5.28/
./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 \
--disable-poll \
--enable-epoll \
--enable-gnuregex
# -j 4 ,4核编译更快。如果没有这么多核型,可以修改 -j 选项,或者省略使用单核
make -j 4 && make install
#将安装目录的sbin目录下的文件做软连接到 /usr/local/sbin目录下
ln -s /usr/local/squid/sbin/* /usr/local/sbin/
#创建程序启动用户squid
useradd -M -s /sbin/nologin squid
#递归修改,将/usr/local/squid/var目录及目录下所有文件属主和属组谁修改为squid
#让squid拥有写入的权限
chown -R squid:squid /usr/local/squid/var/
2.3 修改squid 的配置文件
vim /etc/squid.conf
........
56// http_access allow all #允许任意客户机使用代理服务(控制规则是自上而下)
57// #http_access deny all #注释
60// http_port 3128 #代理服务器监听端口(默认3128)
61// cache_effective_user squid #指定程序用户
62// cache_effective_group squid #指定账号基本组
67// coredump_dir /usr/local/squid/var/cache/squid #指定缓存文件目录
2.4 squid 的运行控制
2.4.1 检查配置文件语法是否正确
squid -k parse
2.4.2 启动squid
启动squid 时,第一次启动squid服务,会自动初始化缓存目录
#初始化缓存目录
squid -z
#启动服务
squid
#查看 3128 端口是否启用
netstat -natp | grep "squid"
2.5 创建 squid 服务脚本
#在 /etc/init.d/目录下配置 squid 服务脚本
cd /etc/init.d/
vim squid
#服务脚本如下
#!/bin/bash
#chkconfig: 2345 90 25 #设置2345级别自启动。
#90代表启动优先级,25代表停止优先级。范围是0-100,数字越大,优先级越低
PID="/usr/local/squid/var/run/squid.pid" #指定pid文件路径
CONF="/etc/squid.conf" #指定配置文件路径
CMD="/usr/local/squid/sbin/squid" #指定程序文件路径
case "$1" in
start)
netstat -natp | 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
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -natp | 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|status|reload|check|restart}"
;;
esac
#为脚本文件添加可执行权限
chmod +x /etc/init.d/squid
#将服务添加到系统管理中
chkconfig --add squid
#设置35级别启动(已经在脚本文件中设置,可以省略)
chkconfig --level 35 squid on
#查看启动级别
chkconfig --list squid
2.6 实验检测服务脚本
#使用service 命令管理服务
[root@host103 init.d]# service squid stop #停止squid服务
[root@host103 init.d]# service squid status #查看服务状态
squid is not running
[root@host103 init.d]# netstat -natp | grep "squid" #3128端口未启用
[root@host103 init.d]#
#使用systemctl 命令管理服务
[root@host103 init.d]# systemctl start squid #使用systemctl 命令启动服务
[root@host103 init.d]# systemctl status squid #查看squid 服务状态
[root@host103 init.d]# netstat -natp | grep "squid" #查看到3128端口启用
tcp6 0 0 :::3128 :::* LISTEN 60090/(squid-1)
三: 构建传统代理服务器
代理服务器IP: 192.168.23.103
web 服务器ip: 192.168.23.104
客户端ip: 192.168.23.13
3.1 修改配置文件/etc/squid.conf
vim /etc/squid.conf
........
64// cache_mem 1024 MB #指定缓存空间内存大小,最好是4的倍数,为物理内存的1/4
65
66
67// reply_body_max_size 100 MB #允许用户下载的最大文件大小,单位是字节
68
69 #允许保存到缓存空间的最大文件大小,以kb为单位。超过限制则直接发给用户
70// maximum_object_size 40960 KB
#重启squid服务
systemctl restart squid
3.2 修改iptables 防火墙规则
#清空规则
iptables -F
#在INPUT 链添加规则,允许tcp 目标端口是 3128 的数据通过
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
#查看规则
iptables -nL
3.3 在web服务器,启动web服务
#下载httpd
yum -y install httpd
#启动httpd服务
systemctl start httpd
#查看80端口
netstat -natp | grep :80
#上传图片到 /var/www/html 目录下
[root@host104 html]# ls
girl.jpg
3.4 客户机启动代理,然后服务器动态跟踪squid 和 web 访问日志
3.4.1 客户端浏览器添加代理设置,然后访问web网站
火狐浏览器设置代理:
打开菜单--->首选项---->高级--->网络---连接设置--->手动配置代理---->输入代理服务器ip和端口----->确定
访问 http://192.168.23.103/girl.jpg
3.4.2 动态跟踪squid和web的访问日志
tail -f /usr/local/squid/var/logs/access.log
tail -f /var/log/httpd/access_log
四 : 构建透明代理服务器
代理服务器双网卡,内网:ens33:192.168.23.103 , 外网:ens36:12.0.0.1
web 服务器:12.0.0.12
客户机:192.168.23.13
4.1 squid 代理服务器设置
4.1.1 配置网卡
cd /etc/sysconfig/network-scripts/
vim ifcfg-ens33
.........
IPADDR=192.168.23.103
NETMASK=255.255.255.0
#注释网关和dns 设置
#GATEWAY=192.168.23.2
#DNS1=192.168.23.2
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
.....
NAME=ens36 #修改网卡名
#UUID=51234825-6c2e-47a5-a8e8-956782b900d8 #删除或者注释UUID
DEVICE=ens36 #需改设备名
ONBOOT=yes
IPADDR=12.0.0.1
NETMASK=255.255.255.0
#注释网关和DNS
#GATEWAY=192.168.23.2
#DNS1=192.168.23.2
systemctl restart network
ifconfig
4.1.2 修改配置文件
#其他配置保持不变,将60 行的监听端口设置修改
vim /etc/squid.conf
。。。。。。
60// http_port 192.168.23.103:3128 transparent
#重启服务
systemctl restart squid
4.1.3 开启路由转发和防火墙端口转发
#开启路由转发
[root@host103 ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
[root@host103 ~]# sysctl -p
net.ipv4.ip_forward = 1
#修改防火墙规则
iptables -t nat -I PREROUTING -i ens33 -s 192.168.23.0/24 \
-p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.23.0/24 \
-p tcp --dport 443 -j REDIRECT --to 3128
4.2 web 服务器配置
#web 服务器修改网卡ip 为 12.0.0.12
vim /etc/sysconfig/network-scripts/ifcfg-ens33
......
IPADDR=12.0.0.12
NETMASK=255.255.255.0
#设置网关指向12.0.0.1,因为暂时用不到dns,将其注释
GATEWAY=12.0.0.1
#DNS1=192.168.23.2
#重启网卡
systemctl restart network
ifconfig ens33
4.3 客户机配置
客户机配置网关指向 192.168.23.103
4.4 客户端访问测试,代理服务器和web服务器动态追踪各自的访问日志
客户端浏览器清除缓存
清除浏览器之前设置的代理服务器功能后,访问http://12.0.0.12/girl.jpg
#清空代理服务器访问日志,动态追踪
> /usr/local/squid/var/logs/access.log
tail -f /usr/local/squid/var/logs/access.log
#清空web访问日志,动态追踪
> /var/log/httpd/access_log
tail -f /var/log/httpd/access_log
#可以看到,客户端不用再浏览器设置代理服务器,可以直接使用代理服务器的代理上网
五 ACL 访问控制
5.1 ACL 访问控制方式与常用的ACL列表类型
5.1.1 ACL 访问控制方式
-
根据源地址,目标URL,文件类型等定义列表
acl列表名称 列表类型 列表内容
-
针对已定义的acl 列表进行限制
http_access allow或者deny 列表名称.....
5.1.2 常用的acl列表类型
acl 列表类型 | 释义 |
---|---|
src | 源地址 |
dst | 目标地址 |
port | 目标端口 |
dstdomain | 目标域 |
time | 访问时间 |
url_regex | 目标URL地址 |
urlpath_regex | 整个目标url路径 |
5.2 acl规则优先级
一个用户访问代理服务器时,squid 会顺序匹配squid 中定义的所有规则列表。一旦匹配成功,立即停止匹配。
所有规则都不匹配时,squid会使用与最后一条相反的规则
5.3 配置acl访问控制列表
在配置文件 squid.conf 中,ACL访问控制通过以下两个步骤来实现:
- 使用acl配置项定义需要控制的条件
- 通过http_access 配置项对已定义的列表做“允许",或"拒绝" 访问的控制
5.3.1 定义acl访问控制列表
格式:
acl 列表名称 列表类型 列表类容
eg:
acl localnet src 192.168.23.13/32 #源地址为192.168.23.13/32
acl mylan src 192.168.23.0/24 #定义客户机网段
acl destinationhost dst 192.168.23.103、32 #目标地址为192.168.23.103
acl MX maxconn 20 #最大并发连接20
acl PORT port 21 #目标端口21
acl DBLOCK dstdomin .sina.com #目标域,匹配域内所有站点
acl BURL url_regex -i ^rtsp:// ^emule:// #以rtsp://,emule:// 开头的目标URL地址。-i不区分大小写
acl PURL urlpath_regex -i \.mp3$ \.mp4$ #以.mp3,.mp4结尾的url路径
acl worktime time MTWHD 8:30-17:30 #时间以周一至周五 8:30-17:30
5.3.2 启动对象管理
mkdir /etc/squid
vim /etc/squid/dest.list #将acl 策略写入到一个单独的文件中
192.168.23.13
192.168.23.0/24
vim /etc/squid.conf
......
#格式一
#直接调用配置文件中定义的acl列表,拒绝或者允许
http_access deny或(allow) destinationhost
#格式二
acl destination det "/etc/squid/dest.list" #调用指定文件中的列表内容
http_access deny或(allow) destinationghost
5.3.3 示例
vim /etc/squid.conf
.....
acl localhost src 192.168.23.13/32 #配置acl列表,源地址是192.168.23.13/32
http_access deny localhost #acl列表localhost定义的所有主机禁止访问
systemctl restart squid
将配置文件中的禁止访问改为允许
</font size=2>
vim /etc/squid.conf
.....
acl localhost src 192.168.23.13/32 #配置acl列表,源地址是192.168.23.13/32
http_access allow localhost #acl列表localhost定义的所有主机允许访问
systemctl restart squid
六 squid 日志分析
6.1 安装图像处理软件包 sarg
[root@host103 opt]# ls sarg-2.3.7.tar.gz
sarg-2.3.7.tar.gz
yum -y install pcre-devel gd gd-devel #如果无法下载,可能是因为做了代理服务器,关闭了网关
mkdir /usr/local/sarg
tar zxvf /opt/sarg-2.3.7.tar.gz -C /opt/
cd /opt/sarg-2.3.7/
./configure \
--prefix=/usr/local/sarg \ #设置工作目录
--sysconfdir=/etc/sarg \ #配置文件目录,默认是/usr/lcoal/etc
--enable-extraprotection #额外安全防护
make && make install
6.2 修改sarg的配置文件
vim /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/sarg
#使用用户名显示
178// user_ip no
#top 排序中,指定连接次数采用降序排列(reverse降序,normal是升序)
184// topuser_sort_field connect reverse
#对于用户访问记录,连接次数降序排列
190// user_sort_field connect reverse
#指定不计入排序的站点列表文件。该文件需要手动创建,否则报错
206// exclude_hosts /usr/local/sarg/noreport
#同名同日期日志是否覆盖(no,不覆盖)
257// overwrite_report no
#发送邮件报告命令
289 mail_utility mailq.postfix
#指定字符集编码
434 charset UTF-8
#top 排行的星期周期
518 weekdays 0-6
#top 排行的时间周期
525 hours 0-23
#指定网页根目录
www_document_root /var/www/html
6.3创建不计入统计的站点的文件
#创建不记入统计的站点的文件
touch /usr/local/sarg/noreport
#将sarg 命令设置软连接到 /usr/local/bin目录下,可以随时直接使用sarg命令
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
#查看sarg命令帮助信息
sarg --help
6.4 运行sarg生成记录,并查看网页
yum -y install httpd
systemctl start httpd
sarg #生成一次报告
firefox http://192.168.23.103/sarg
6.5 设置计划任务,每天生成报告
vim /usr/local/sarg/report.sh
#!/bin/bash
#This is used for squid report
#Get current date
TODAY=$(date +%d/%m/%Y)
#Get yesterday
YESTERDAY=$(date -d "1 days ago" +%d/%m/%Y)
#-l 选项指定squid日志文件路径
#-o 指定网页报告文件输出路径
#-z 处理信息
#-d 指定日期范围
/usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log \
-o /var/www/html/sarg -z -d $YESTERDAY-$TODAY &> /dev/null
#将30天以前的报告文件删除
find /var/www/html/sarg -type d -a -name "20*" \
-a -mtime +30 | xargs rm -rf & >/dev/null
:wq
-------------------------------
#为脚本文件添加执行权限
chmod +x /usr/local/sarg/report.sh
#将脚本添加到contab计划任务中,每天0点0分执行
crontab -e
0 0 * * * /usr/local/sarg/report.sh
七 squid 反向代理
7.1 squid 反向代理概述
概述:
如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;
否则反向代理服务器将向后台的Web服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地供下一个请求者使用
工作机制:
• 缓存网页对象,减少重复请求
• 将互联网请求轮询或按权重分配到内网web服务器
• 代理用户请求,避免用户直接访问Web服务器,提高安全
7.2 配置squid 反向代理服务器配置
7.2.1 拓扑
squid 代理服务器: 192.168.23.103
web1 服务器:192.168.23.13
web2 服务器:192.168.23.12
客户端:192.168.23.104
7.2.2 修改代理服务器的配置文件
http_port 192.168.23.103:80 accel vhost vport
cache_peer 192.168.23.12parent 80 0 no-query originserver \
round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.23.11 parent 80 0 no-query originserver \
round-robin max_conn=30 weight=1 name=web2
#对www.mynet.com的请求,squid代理服务器向web1和web2的80端口发出请求
cache_peer_domain web1 web2 www.mynet.com
http_port 80 accel vhost vport
#squid从一个缓存变成了一个Web服务器反向代理加速模式,这个时候squid在80端口监听请求,同时和webserver的请求端口(vhost vport)绑定,这个时候请求到了squid, squid是不用转发请求的,而是直接要么从缓存中拿数据要么向,绑定的端口直接请求数据。
accel:反向代理加速模式
vhost:支持域名或主机名来表示代理节点
vport:支持IP和端口来表示代理节点
parent:代表为父节点,上下关系,非平级关系
80:代理内部web服务器的80端口
0:没有使用icp,表示就一台squid服务器
no-query:不做查询操作,直接获取数据
originserver:指定是源服务器
round-robin:指定squid 通过轮询方式将请求分发到其中一-台父节点
max_conn:指定最大连接数
weight:指定权重
name:设置别名
7.2.3 代理服务器清空多余环境
#清空透明模式时配置的iptable规则
iptables -F
iptables -t nat -F
#停止httpd服务,防止httpd的80端口和squid的监听端口冲突
systemctl stop httpd
#重启squid服务
systemctl restart squid
7.3 后端节点服务器配置
#两台web 服务器
yum -y install httpd
systemctl start httpd
#web 192.168.23.11
echo "This is web1" >> /var/www/html/index.html
#web 192.168.23.12
echo "this is web2" >> /var/www/html/index.html
7.4 客户端访问
# 配置host或者 DNS银蛇。 将 域名和代理服务器地址映射
echo "192.168.23.103 www.mynet.com"
#配置浏览器的代理设置。代理服务器地址192.168.23.103,端口80
#浏览器访问 www.mynet.com
标签:web,缓存,squid,sarg,192.168,acl,代理服务器,服务器 来源: https://www.cnblogs.com/zhijiyiyu/p/15260606.html