squid代理——传统代理&透明代理

squid代理服务器应用

一、缓存代理的概述

1、web代理的工作机制

  • 缓存网页对象,减少重复请求

​ Squid是一个缓存Internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,减少了向Internet提交重复的Web请求的过程,提高了用户下载网页的速度,隐藏了客户机的真实IP

如下图所示:
在这里插入图片描述

2、代理的基本类型

  • 传统代理:适用于Internet,需明确指定服务端

  • 透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理

3、使用代理的好处

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

二、squid代理安装

百度网盘链接:https://pan.baidu.com/s/1ahZsS5looHk1iBp6DGoXjA
提取码:j0ly

#更改主机名

[root@squid ~]#hostnamectl set-hostname squid

#上传软件包squid-3.5.23.tar到/opt目录下

[root@squid ~]#mkdir /abc
[root@squid ~]#mount.cifs //192.168.100.1/bao /abc
[root@squid ~]#cd /abc/Y2C7
[root@squid ~]#tar zxvf squid-3.5.23.tar.gz -C /opt
[root@squid ~]# cd /opt
[root@localhost opt]# cd squid-3.5.23/
[root@localhost squid-3.5.23]# yum -y install gcc gcc-c++ make pcre pcre-devel zlib-devel	//安装编译器

#编译安装

[root@squid squid-3.5.23]# ./configure --prefix=/usr/local/squid      //安装目录
--sysconfdir=/etc/                   //单独将配置文件修改到/etc目录下
--enable-arp-acl                   //可在ACL中设置通过MAC地址进行管理,防止IP欺骗
--enable-linux-netfilter           //使用内核过滤
--enable-linux-tproxy             //支持透明模式
--enable-async-io=100              //I/O优化。异步I/O,提升储存性能,值可修改
--enable-err-language="Simplify_Chinese"      //错误信息的显示语言,简体中文
--enable-underscore                  //允许URL中有下划线
--enable-poll                       //使用Poll()模式,提升性能
--enable-gnuregex                    //使用GNU正则表达式
[root@squid squid-3.5.23]# make && make install
[root@squid squid-3.5.23]# ln -s /usr/local/squid/sbin/* /usr/local/sbin   //创建链接文件,优化路径
[root@squid squid-3.5.23]# useradd -M -s /sbin/nologin squid      //创建程序用户、组
[root@squid squid-3.5.23]# chown -R squid:squid /usr/local/squid/var/     //改变目录属主,赋权限

===========
如果编译安装出现这个问题:make: *** 没有指明目标并且找不到 makefile。 停止。(此报错centos最小化安装容易出现)
解决方案如下:
上传ncurses-5.6.tar.gz到/opt目录下
[root@squid ~]# cd /opt
[root@squidt opt]# tar zxvf ncurses-5.6.tar.gz
[root@squid opt]# cd ncurses-5.6/
[root@squid ncurses-5.6]# ./configure -prefix=/usr/local -with-shared-without-debug

[root@squid ncurses-5.6]#make && make install

#修改Squid的配置文件

[root@squid ~] vim /etc/squid.conf

在这里插入图片描述

[root@squid ~] squid -k parse                   //检查配置文件
[root@squid ~] squid –k rec                       //重新加载配置文件
[root@squid ~] squid -z                            //初始化缓存目录
[root@squid ~]# squid                              //启动squid服务
[root@squid ~]# netstat -anpt | grep squid          //确认squid服务处于正常监听状态
tcp6       0      0 :::3128                 :::*                    LISTEN      6699/(squid-1)    

#编写Squid服务脚本

[root@squid ~]# vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 35 90 25
#config: /etc/squid.conf
#pidfile: /usr/local/squid/var/run/squid.pid
#Description: Squid - Internet Object Cache

PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"

case "$1" in
        start)
                netstat -utpln | grep squid &>/dev/null
                if [ $? -eq 0 ]
                        then
                                echo "Squid is running"
                else
                        $CMD
                fi
        ;;
        stop)
                $CMD -k kill &>/dev/null
                rm -rf $PID &>/dev/null
        ;;
        status)
                [ -f $PID ] &>/dev/null
                        if [ $? -eq 0 ]
                          then
                                netstat -utpln | 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 "用法:{start | stop | restart | reload | check | status}"
esac

#添加权限并启动测试

[root@squid ~]#chmod +x /etc/init.d/squid
[root@squid ~]#chkconfig --add squid
[root@squid ~]#chkconfig squid on
[root@localhost squid-3.5.23]# service squid restart   ##测试正常
正在关闭Squid...
正在启动Squid...

三、搭建传统代理

在这里插入图片描述

案例:构建squid代理服务器,允许客户机指定squid代理服务器作为Web代理,访问网站服务器,但禁止通过代理下载超过10MB的文件,超过4MB的文件不进行缓存

1、squid代理服务器配置

#修改squid配置文件
在这里插入图片描述

cache_mem 64 MB //指定缓存功能所使用的内存空间大小,便于保持访问较频繁的web对象,容量最好为4的倍数,单位为MB
reply_body_max_size 10 MB //允许用户下载的最大文件大小,以字节为单位。默认位置0表示不进行限制
maximum_object_size 4096 KB //允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接发往用户端

#设置防火墙规则

[root@squid ~]iptables -F   //清空规则
[root@squid ~]iptables -t nat -F
[root@squid ~]# iptables -I INPUT  -p tcp --dport 3128 -j ACCEPT   //允许squid流量通过

[root@squid ~]# service squid reload            //重载squid服务
[root@squid ~]# netstat -anpt | grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      49797/(squid-1) 

2、配置WEB服务器

[root@web ~]# yum -y install httpd
[root@web ~]# echo "welcome to kgc" > /var/www/html/index.html
[root@web ~]# systemctl start httpd

#添加文件,便于后面测试

[root@web html]# cd /var/www/html/
[root@web html]# dd if=/dev/zero of=test1.tgz bs=1M count=11
[root@web html]# dd if=/dev/zero of=test2.tgz bs=1M count=2

3、客户机配置及验证

①代理验证

首先我们先不打开代理服务直接访问web服务器
在这里插入图片描述

也是可以访问的,但是我们可以到web服务器查看日志

[root@web html]# cd /var/log/httpd/
[root@web httpd]# ll
总用量 8
-rw-r--r--. 1 root root 876 3月  17 17:17 access_log
-rw-r--r--. 1 root root 817 3月  17 17:07 error_log
[root@web httpd]# cat access_log 

在这里插入图片描述
看到日志中,是192.168.17.154访问的,也就是我们的win10客户机

#现在我们来在win10客户机中做代理
在这里插入图片描述

#代理设置完成后,记得清空浏览器缓存,然后再次访问
在这里插入图片描述
#然后我们再到web服务器查看日志
可以看到访问者变成了squid服务器(192.168.17.170)
在这里插入图片描述
②缓存服务验证
客户端访问网站
访问http://192.168.17.129/能打开
在这里插入图片描述
访问http://192.168.17.129/test1.tgz 不能打开下载
在这里插入图片描述
访问http://192.168.17.129/test2.tgz 能下载
在这里插入图片描述

四、搭建透明代理

在这里插入图片描述

1、squid代理服务器配置

首先squid服务器先添加网卡,两个网口分别对应客户端及web服务器端
在这里插入图片描述
#开启路由转发功能

[root@squid ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward
[root@squid ~]# sysctl -p		//加载

#测试web服务器ping squid的两个端口

在这里插入图片描述
数据讲究有来有回,所以我们这里需要创建一条静态路由(或者把web服务器的网关改成squid的外网口地址),这里我们采用配置静态路由

[root@web ~]# route add -net 192.168.10.0/24 gw 192.168.17.170

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

#安装squid时已经添加了支持透明模式的功能,所以直接在配置文件中修改网文入口 并设透明模式

[root@squid ~]# vim /etc/squid.conf
http_port 192.168.10.1:3128 transparent

#修改代理服务器防火墙策略----

[root@squid ~]# iptables -F
[root@squid ~]# iptables -t nat -F
[root@squid ~]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to  3128
[root@squid ~]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to  3128
[root@squid ~]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT

2、客户端验证

#我们到客户端(192.168.10.10)进行访问验证

浏览器以及win10系统中的代理统统去掉
在这里插入图片描述

#这时我们浏览器以及win10系统网络设置中并没有设置代理,我们去web服务器查看下日志
在这里插入图片描述
所以客户端直接访问外网服务器地址,squid代理服务器会去代为请求

客户端访问网站
访问http://192.168.17.129/ 能打开
在这里插入图片描述
访问http://192.168.17.129/test1.tgz 不能访问下载
在这里插入图片描述
访问http://192.168.17.129/test2.tgz 能访问下载
在这里插入图片描述

注意:

1、编译安装squid 需要安装编译器 gcc gcc-c++

2、防火墙的问题

3、squid服务器网络不要配置网关,否则路由表有问题(route -n 看路由表)

4、最小化安装缺少工具,使用yum install -y net-tools,安装net-tools

发布了72 篇原创文章 · 获赞 44 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ML908/article/details/104951915