Squid
相关概念
Squid:代理服务器
代理分为:正向代理、反向代理
正向代理:
为客户端作代理服务器,可以隐藏客户端的ip,当客户端发送请求,会先在代理服务器上寻找是否有对应的资源,如果有,返回给客户端,反之,代理服务器会去后端服务器上获取对应的资源,缓存到本地,再把请求的数据返回给客户端
正向代理访问的是真实服务器的ip,而真实服务器的后端记录的是代理服务器的ip
反向代理:为web服务器端作代理服务器,可以隐藏服务端的ip
正向代理的优点:
1、访问外网
3、保护客户端,对外隐藏信息
4、对客户端进行访问控制列表
反向代理
ngxin:反向代理代理的后端的服务器,客户端访问的是代理服务器
反向代理和负载均衡的区别:反向代理可以作缓存,缓存静态数据(静态数据、html页面、图片、视频)
CDN:内容分发网络(反向代理服务器),是一个云服务器,如果想要增加用户粘性,也就是不同地区的用户在访问时的效率一致,可以部署CDN,CDN用来缓存静态的数据,可以解决不同的地理区域用户访问同一站点的高延迟,加快用户的访问速度,缓解服务器的压力,提高用户粘性。
阿里云、腾讯云、亚马逊等都有CDN云服务器
对于电商平台:静态页面
对于视频网站:流媒体
对于游戏平台:安装包,补丁,更新包等
对于移动平台:app的安装包,更新包
每一台CDN的云服务器中的缓存数据都是拿取的后端文件服务器所共享的数据
正向代理的分类
正向代理分为:传统代理和透明代理
传统代理
需要客户端通过手动配置,设置代理服务器,对于客户端而言,代理服务器不是透明的
透明代理
代理服务器对于客户端而言是透明的,相当于是客户端的网关。
传统代理的部署
实验环境:三台pc
代理服务器:192.168.1.1
后端web服务器:192.168.1.4
客户端:192.168.1.5
实验目的
客户机直接访问web服务器,web服务器中记录的连接ip为代理服务器的ip
实验步骤
第一步:web的部署
使用yum进行安装,源码编译请参考其他文档
[root@localhost ~]# yum -y install httpd
做http主页文件并启动web服务
[root@localhost ~]# echo web > /var/www/html/index.html
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl 127.0.0.1
web
第二步:部署squid代理
首先下载squid包,这里用的是3.5.7版本
源码编译安装squid的tar包
[root@localhost ~]# tar -zxf squid-3.5.7.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/squid-3.5.7/
[root@localhost squid-3.5.7]# ./configure --prefix=/usr/local/squid \
--sysconfdir=/etc/ \
--enable-arp-acl \
--enable-linux-netfiler \
--enable-linux-tproxy \
--enable-async-io=100 \
--enable-err-language="Simplify-Chinese" \
--enable-underscore \
--enable-poll \
--enable-gnuregex
[root@localhost squid-3.5.7]# make && make install
各项配置含义
--prefix=/usr/local/squid # squid安装路径
--sysconfdir=/etc/ # 主配置文件路径
--enable-arp-acl # 防止arp攻击
--enable-linux-netfiler # 启动内核过滤功能
--enable-linux-tproxy # 支持透明代理
--enable-async-io=100 # 调整io线程参数
--enable-err-language="Simplify-Chinese" # 错误信息显示语言
--enable-underscore # 允许url中有下划线
--enable-poll # 使用poll,提升性能
--enable-gnuregex # 使用gnu的正则表达式
第三步:配置squid
优化命令路径
[root@localhost ~]# ln -s /usr/local/squid/sbin/* /usr/local/sbin
[root@localhost ~]# ln -s /usr/local/squid/bin/* /usr/local/bin
创建程序用户squid
[root@localhost ~]# useradd -M -s /sbin/nologin squid
授权程序用户为安装目录的属主属组
/usr/local/squid/var/
:目录下存放了squid的数据
[root@localhost ~]# chown -R squid:squid /usr/local/squid/var
[root@localhost ~]# chmod -R 757 /usr/local/squid/var/
配置主配置文件
/etc/squid.conf
[root@localhost ~]# vim /etc/squid.conf
修改:
http_access deny all # 将deny改为allow
启动squid
[root@localhost ~]# squid
[root@localhost ~]# netstat -anpt | grep squid
tcp6 0 0 :::3128 :::* LISTEN 98457/(squid-1)
第四步:客户端配置并验证
手动配置客户端的代理服务器(图形化)
打开firefox浏览器
这里选择手动配置代理,设置代理ip为squid服务器的IP地址,端口号为squid的端口号
然后使用firefox访问web服务器
http:192.168.1.1
可以通过web服务器的日志文件查看到web服务器记录的ip是代理服务器的
/var/log/httpd/access_log
也可以通过设置全局变量的命令指定客户端的代理服务器
export http_proxy=”http:squid服务ip:3128”
透明代理的部署
实验环境
代理服务器:ip1,192.168.1.1 ip2, 192.168.2.1
web服务器:ip, 192.168.1.4 网关:192.168.1.1
客户端:ip 192.168.2.2 网关:192.168.2.1
实验目的
客户端与web不在同一网络中,客户端通过代理服务器作为网关进行转发请求到web服务器的页面中,同正向代理一样,web服务器中的请求ip为代理服务器的ip
实验步骤
第一步:根据实验环境配置ip,添加网卡,要注意网卡及网段的对应
代理服务器:添加网卡,复制网卡配置文件并改名,ip为192.168.2.1
客户端:网卡改为与代理服务器新添加的一样,ip为192.168.2.2,网关为192.168.2.1
web:更改ip网关为192.168.1.1
第二步:squid透明代理配置
由于存在两个网段,需要开启路由转发
[root@localhost ~]# vim /etc/sysctl.conf
添加:
net.ipv4.ip_forward =1
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
修改主配置文件
[root@localhost ~]# vim /etc/squid.conf
修改:
http_port 3128
http_port 192.168.2.1:3128 transparent # ip为客户端网关地址
启动服务即可
[root@localhost ~]# squid
[root@localhost ~]# netstat -anpt | grep squid
tcp 0 0 192.168.2.1:3128 0.0.0.0:* LISTEN 99857/(squid-1)
第三步:客户端配置
如果配置过了正向代理,需要将浏览器的代理设置还原为默认
其他不需要去做
第四步:验证及防火墙配置
iptables -t nat -A PREROUTING -p tcp --dport=80 -s 192.168.2.0/24 -i ens37 -j REDIRECT --to 3128
-t nat # nat表
PREROUTING REDIRECT # 链
-p tcp # tcp协议
-dport=80 # 访问的目的端口
-s 192.168.2.0/24 # 谁去访问,客户端所在网段
-i ens37 # 通过哪个网卡接口来访问
--to 3128 # 转发到squid
iptables -t nat -F
:清除防火墙规则
访问验证:打开客户端浏览器直接访问http:192.168.1.4
可以通过web服务器的日志文件查看到web服务器记录的ip是代理服务器的
/var/log/httpd/access_log
squid的访问控制列表
使用squid配置文件中的acl对客户端或者服务端的内容进行严格把控,来达到控制访问的目的
格式:acl 列表名称 列表选项 列表内容
列表名称是唯一的
src:对源地址(客户端)进行限制
[root@localhost ~]# vim /etc/squid.conf
添加:
acl cyj src 192.168.2.2(客户端地址)
http_access deny cyj
dst:对目标ip地址进行限制
[root@localhost ~]# vim /etc/squid.conf
添加:
acl cyj dst 192.168.1.4(web服务器)
http_access deny cyj
dstdomain:对客户端访问的域名进行限制
[root@localhost ~]# vim /etc/squid.conf
添加:
acl cyj dstdomain www.web.com(web域名)
http_access deny cyj
port:对访问的端口进行限制
[root@localhost ~]# vim /etc/squid.conf
添加:
acl cyj prot 80
http_access deny cyj
time:对客户端访问的时间进行限制
S:周日 M:周一 T:周二 W:周三 H:周四 F:周五 A:周六 D:M-F(周一到周五)
[root@localhost ~]# vim /etc/squid.conf
添加:
acl cyj time TW 08:30-12:30
http_access deny cyj
# 周二到周三的八点半到十二点半不能访问,其他时间都能
arp:对客户端的MAC地址进行限制
[root@localhost ~]# vim /etc/squid.conf
添加:
acl cyj arp 00:0c:29:0d:80:0a(客户端mac地址)
http_access deny cyj
url_regex:对客户端的url进行限制
[root@localhost ~]# vim /etc/squid.conf
添加:
acl cyj url_regex web(如果web服务器的域名中包含web三个字母时)
http_access deny cyj
所有实验拒绝的结果如图所示
squid反向代理的部署
实验环境
client:192.168.1.1
squid代理服务器:192.168.1.4
web后端服务器:192.168.1.6
实验目的
客户机访问squid代理,会获取到web服务器的页面
实验步骤
使用之前部署好的squid环境,直接更改配置文件即可
第一步:
代理服务器(192.168.1.4)
编辑配置文件,如果是新安装的squid,按照如下更改
vim /etc/squid.conf
修改
http_access deny all为http_access allow all
http_port 3128为http_port 192.168.1.4:80 accel vhost vport
添加
cache_peer 192.168.1.6 parent 80 0 originserver name=web1
释义:
http_port 192.168.1.4:80 # 监听ip为本机ip,端口号与后端服务的端口号一致
accel # 开启加速模式
vhsot # 允许客户端通过域名/主机访问
vport # 允许客户端通过ip、端口访问
cache_peer 192.168.1.6 # 指定后端真实服务的ip
parent # 代理服务器和后端服务器的层级关系
80 # 后端服务端口号
0 # 代表只有一个squid
originserver # 该节点为资源节点
name=web1 # 该后端节点的别名
如果之前用过的squid,除了以上更改外,还要注意是否有acl
第二步:
启动squid,直接执行squid
即可,如果失败,先执行killall squid
,保证该服务之前没有在运行,再执行squid
第三步:
部署web服务器(192.168.1.6),因为是实验环境,所以直接使用yum安装
[root@localhost ~]# yum -y install httpd
编写页面
[root@localhost ~]# echo cyj > /var/www/html/index.html
启动服务
[root@localhost ~]# systemctl restart httpd
第四步:
验证
实验环境注意关闭squid和web的防火墙,生产环境需要防火墙放行端口
使用client进行访问squid服务器
[root@localhost ~]# curl 192.168.1.4
cyj