你知道的------关于代理Squid的那些事

关于代理的那些事

缓存服务器,即用来存储(内存及硬盘)用户访问的网页、图片、文件等等信息的专用服务器,这种服务器不仅可以使用户最快的得到他们想要的信息,而且大大减少了网络传输的数据量,缓存服务器经常是代理服务器。对于用户是不可见。目前常见的缓存服务器软件:squid、varnish、nginx、ats
Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher和HTTP协议。和一般的代理缓存软件不同,S quid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。

代理的基本类型

使用代理的好处:

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

传统代理:

有称为普通代理,通过浏览器设置的代理。适用于lnternet,需要明确指定服务器的ip。
工作原理:用户访问网站,先到squid代理服务器,如果squid代理服务器有数据,那么squid就直接从缓存中放回给用户,如果squid缓存中没有,那么squid就代替用户去访问网站,把数据返回的给用户的同时留一份到缓存中,一遍下次用户(或者其他用户)访问的时候,直接从缓存中返回给用户

透明代理:

客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将web访问重定向给代理服务器处理。结合iptables可以实现代理+网关+内容过滤+流量安全控制等完整的上网解决方案。
工作原理:用户A发送一个访问请求到防火墙,由防火墙将该用户的访问请求转发给Squid,squid再先检查自身缓存中有无该用户请求的访问内容,如果没有,则请求远端目的的服务器,获取该用户的访问内容,再放回给用户的同时,在自身缓存保留一份记录以备下次调用,当用户B发送一个和用户A相同的请求到防火墙时,有防火墙转发该用户请求到squid,squid检查到自身缓存发现有相同的内容,直接将该内容放回给用户B。而无需再次去访问请求的服务器。

反向代理:

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外表现为一个服务器。
工作原理:squid做反向代理服务器,通常工作在一个服务器集群的前端,在用户看来,squid服务器就是他所要访问的服务器,而实际意义上,squid只是接受用户的请求,同时将用户请求转发给内部真正的WEB服务器,如果squid本身有用户要访问的内容,则squid直接将数据返回给用户,起到了缓存数据的作用,减少了后端服务器的压力。

正向代理

是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

各代理服务器的应用场景

……正向代理(本地网关)
a、正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。
b、正向代理还可以使用缓存特性减少网络使用率。
c、正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
……透明代理(cdn, 架设于网络运营商主干机房)
a、提高各个地区访问者的访问速度。
b、减少源站压力。
c、减少网络运营商的网间结算费用。
d、节省网络运营商带宽资源。
……反向代理(网站前端)
a、降低源站服务器的负载。
b、隐藏源站真实ip。

图解正反向代理

在这里插入图片描述
在这里插入图片描述

简单的理解,就是正向代理是为客户端做代理,代替客户端去访问服务器,而反向代理是为服务器做代理,代替服务器接受客户端请求。

在这里插入图片描述

Squid代理实验

安装squid

首先将压缩包放到root目录中

tar zxvf squid-3.4.6.tar.gz	##解压gz结尾的包是zxvf要是bz2结尾的用jzvf
cd squid-3.4.6/
yum -y install gcc gcc-c++	##安装环境依赖包
./configure 		##当前的位置进行配置
--prefix=/usr/local/squid 	#指定安装路径
--sysconfdir=/etc/ 	##配置文件放的位置
--enable-arp-acl 	##启用acl访问控制列表
--enable-linux-netfilter ##内核过滤表指定一下
--enable-linux-tproxy 	##支持透明代理
--enable-async-io=100 	##实现里面的io读写
--enable-err-language="Simplify_Chinese" ##语言可以为中文
--enable-underscore	##支持有下划线的选项
--enable-poll 		##支持字符设备中的驱动函数
--enable-gnuregex	##支持正则表达式
make && make install	##编译  安装
ln -s /usr/local/squid/sbin/* /usr/local/sbin/	##设置软连接便于系统所启动
useradd -M -s /sbin/nologin squid	##创建程序型用户
chown -R squid:squid /usr/local/squid/var		##授权squid安装目录下面的var目录属主属组为squid
vim /etc/squid.conf 
 56 http_access allow all	##默认允许所有
 57 #http_access deny all	##默认拒绝所有(加不加#不重要是从上往下读的)
 58 # Squid normally listens to port 3128
 59 visible_hostname 20.0.0.10		##添加配置主机名或者ip
 60 http_port 3128
 61 cache_effective_user squid		##添加修改用户与组
 62 cache_effective_group squid		##添加
 65 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256	##开启内核的容灾功能

squid -k parse		##修改完检测配置有没有问题
squid -z		##初始化缓存目录
[root@squid squid-3.4.6]# ls /usr/local/squid/var/cache/squid/		##查看配置文件刚刚开启的缓存目录位置是否生成了缓存目录
00  02  04  06  08  0A  0C  0E  swap.state
01  03  05  07  09  0B  0D  0F
squid			##启动
[root@squid squid-3.4.6]# netstat -antp |grep squid	##检查端口有没有开启
tcp6       0      0 :::3128                 :::*                    LISTEN      87811/(squid-1)   
#这里想关闭它的时候就只能用pkall或者kall

添加配置文件的控制快捷键

case是多模式的匹配一般在启动脚本用的多

cd /etc/init.d/
vim squid
#!/bin/bash
#chkconfig:2345 90 25
PID="/usr/local/squid/var/run/squid.pid"	##PID文件的目录位置
CONF="/etc/squid.conf"	##CONF配置文件所在位置
CMD="/usr/local/squid/sbin/squid"	##启动路径

case "$1" in	##设置位置变量$1
        start)
         netstat -natp | grep squid &> /dev/null	##&>是混合导入
         if [ $? -eq 0 ]	##判断若上条命令有东西返回值为0然后执行下面语句
         then
          echo "squid is runing"
          else	##启动中返回值是不为0的故会正在启动
          echo "正在启动 squid..."
          $CMD
         fi
        ;;
        stop)
         $CMD -k kill &> /dev/null	##调用CDM那个文件
         rm -rf $PID &> /dev/null	##进程好要删除不然下次启动不了
        ;;
        status)
         [ -f $PID ] &> /dev/null	##-f是验证结果然后调用
          if [ $? -eq 0 ]
            then
              netstat -natp | grep squid
            else
              echo "squid is not runing"
          fi
        ;;
        restart)
            $0 stop &> /dev/null	#$0是调用stop脚本名称
            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

service squid stop
service squid restart
chmod +x squid
chkconfig --add squid
chkconfig --level 35 squid on	##开启级别

更改配置文件 做传统代理实验

vim /etc/squid.conf
省略部分内容必须要做3128下面那一块保存
cache_effective_group squid
cache_mem 64 MB			##添加指定缓存功能所使用的内存空间大小,便于保持访问比较频繁的web对象 容量最好为4的倍数 单位MB
reply_body_max_size 10 MB	##添加允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
maximum_object_size 4096 KB	##添加允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发到用户浏览器保存(这是优化指令)


service squid check	##验证语法
service squid restart
退出
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
##开启转发

在web端安装httpd

yum -y install httpd
cd /var/log/httpd
cat access_log 		##查看成的日志

在没有设置代理服务前在浏览器访问20.0.0.11

cat access_log		##可以看到是20.0.0.188的ip地址访问
20.0.0.188 - - [30/Oct/2020:15:27:54 +0800] "GET /images/poweredby.png HTTP/1.1" 200 3956 "http://20.0.0.11/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363"

设置代理服务器
在这里插入图片描述
设置代理后的

cat access_log 		##看到的是代理服务的ip地址  说明传统代理成功
20.0.0.10 - - [30/Oct/2020:16:04:48 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "http://20.0.0.11/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"

做透明代理实验

首先在Squit服务器上新添加一个网卡选择仅主机模式 主要用来做的是网关

在这里插入图片描述

给新网卡配置值ip地址

nmcli connection	##查看UUID信息用它
vi ifcfg-ens36		##更改ens36的网卡地址 uuid直接去掉就行
省略部分内容
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.10.3
PREFIX=24

vi /etc/sysctl.conf
net.ipv4.ip_forward=1			##添加路由转发功能
[root@squid network-scripts]# sysctl -p		##设置参数立即生效
net.ipv4.ip_forward = 1

测试web服务器能不能通网关

ping 192.168.10.3		##能通
route add -net 192.168.10.0/24 gw 20.0.0.10	##添加一个静态路由为回程路由

在客户机上面把网卡改成vm1然后将IP地址还有网关改成相应的地址
在这里插入图片描述
这时候去访问apache那么地址是客户端的地址而不是代理服务器

在自己的Squid更改配置文件让它支持透明模式

 vi /etc/squid.conf
# Squid normally listens to port 3128
http_port 192.168.10.3:3128 transparent		##添加透明服务器地址

退出
iptables -F	    ##清空防火墙规则
iptables -t nat -F  ##清空nat表中的所有链
iptables -L	    ##查看有哪些防火墙的规则
iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128	#在nat表中添加prerouting链 入口方向是36源地址段是支持的协议是tcp支持端口是80端口目标端口是3128端口
iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128	#443是https的端口
iptables -I INPUT  -p tcp --dport 3128 -j ACCEPT
netstat -ntap |grep 3128

这个时候可以去客户机上直接访问web机 注意一点 需要把之前的那个代理去关闭了 透明代理就是让你能够 在不设置代理的情况下也能在web端是以代理的IP地址去访问的
查看一下web的日志文件看是不是有squid的IP地址

cd /var/log/httpd/
cat /dev/null > access_log	##这两种方法都可清空日志文件内容
> error_log			##清空日志文件的内容
[root@web httpd]# cat access_log 	##取客户机刷新下浏览器后看日志文件
20.0.0.10 - - [30/Oct/2020:18:39:21 +0800] "GET / HTTP/1.1" 403 4897 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"

squid做反向代理

首先去web端将网页改一下不能都一样

cd /var/
cd www/html/
vim index.html		##添加一个网页
<h1>this is test1<h1>	##就写这个

去客户端测试一下
在这里插入图片描述
接下来就是去squid主机上去设置

systemctl start firewalld
iptables -L
iptables -F
iptables -t nat -F
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
vim /etc/squid.conf
# Squid normally listens to port 3128
http_port 20.0.0.10:3128 accel vhost vport
cache_peer 20.0.0.11 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 20.0.0.9 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.lai.com

然后去新开一个虚拟就做web2这里我用的是20.0.0.9

yum -y install httpd
cd /var/www/html/
vim index.html
<h1>this is test2<h1>

systemctl restart httpd
route add -net 192.168.10.0/24 gw 20.0.0.10	##这个静态路由一定要有

去客户机上测试看通不通
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在客户端去接禁用 -----》》此电脑右击—》》本地用户和组选择用户—》》adminstrator把禁用去点—》》确认

改成超级管理员用户主要是为了 一、开启账户权限 二、配置映射
然后右击adminstrator设置密码123
然后切换用户为超级管理员用户

在这里插入图片描述
可以选择个性化设置 图标设置 将桌面图标都调出来
在这里插入图片描述
在这里插入图片描述

设置代理 注意代理的端口是3128或者是80主要是看你的配置文件的那个20.0.0.10的squid设置的端口号了

在这里插入图片描述

在浏览器输入www.lai.com看是不是轮询的效果

在这里插入图片描述
在这里插入图片描述

可能会遇到的问题

一、在做反向代理的时候squid的端口不是80端口、而是可能之前的httpd占用了80端口
这里有两种解决方法(1)直接将httpd关了 然后重启squid服务在用netstat -natp | grep 80出来的就应该是squid的端口了(2)就是将squid的端口改成3128 然后在客户端的也要改下反向代理的端口号 这个看情况而定不冲突就行
二、在做传统解析的时候可能命令都对就是网络不通
在这里插入图片描述
这个时候去检查一下你的配置文件

vim /etc/squid.conf 	##是不是允许访问
 56 http_access allow all
 57 #http_access deny all
 

三、在做透明代理的时候若是加网卡后没有识别出来
去重启时一种方法 不重启可以执行下面的命令

systemctl start networkManager	##开启网络管理器
ifconfig

总结:本实验的网络知识点比较多注意权限 大多数的问题都是在squid的主配置文件中的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值