img4

Squid

相关概念

Squid:代理服务器

代理分为:正向代理、反向代理

正向代理:

为客户端作代理服务器,可以隐藏客户端的ip,当客户端发送请求,会先在代理服务器上寻找是否有对应的资源,如果有,返回给客户端,反之,代理服务器会去后端服务器上获取对应的资源,缓存到本地,再把请求的数据返回给客户端

正向代理访问的是真实服务器的ip,而真实服务器的后端记录的是代理服务器的ip

反向代理:为web服务器端作代理服务器,可以隐藏服务端的ip

正向代理的优点:

1、访问外网

2、可以用作缓存静态的数据,能够加速访问

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下载

源码编译安装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浏览器

image-20200113144324686

image-20200113144402093

这里选择手动配置代理,设置代理ip为squid服务器的IP地址,端口号为squid的端口号

image-20200113144706222

然后使用firefox访问web服务器

http:192.168.1.1

image-20200113144846692

可以通过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

所有实验拒绝的结果如图所示

image-20200113170532047

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

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0