目录

  • 缓存代理概述

  • 代理工作机制

  • 代理基本类型

  • 正向代理实战


squid简介

  Squid作为应用层的服务软件,主要提供缓存加速和应用层过滤控制功能。


代理工作机制

  squid缓存代理---传统代理和透明代理详解_第1张图片

(1)Squid服务器中有缓存

  当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,

则直接将缓存中的页面内容反馈给客户机

(2)Squid服务器中没有缓存

  如果缓存中没有客户机要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,

将网页数据保存到缓存中并发送给客户机


代理基本类型

正向代理

  某台电脑通过一台服务器来上Internet网的方式,其中这台电脑就叫客户机,这台服务器就叫正向代理服务器也就是

通常所说的代理服务器,网站那里不能得到你的真实ip地址。

(1)传统模式

  首先必须在客户机上手动设置代理服务器的地址和端口,然后才能使用代理服务来访问网络。对于网页浏览,

访问网站时域名解析的请求也会发给指定的代理服务器。

(2)透明模式

   提供与传统模式相同的功能和服务,区别在于不需要指定代理服务器的地址和端口而是通过默认路由、

防火墙策略将web访问重定向,实际上仍然交给代理服务器处理。

反向代理

   网站通过一台服务器发布到公网,供用户访问。用户直接访问那台反向代理服务器,然后通过那台服务器访问到网站,

用户无法得到网站的真实IP地址。


正向代理实战

实验安装包:

链接:https://pan.baidu.com/s/1vQyPUzmi2KBrMQTTZBAkjw     密码:lob4


实验过程:

一、squid的编译安装及运行

(1)手工编译安装

1、安装编译环境

yum install gcc gcc-c++ make -y 

2、解压squid包

tar zxf squid-3.4.6 -C /opt

3、手工编译

cd /opt/squid-3.4.6

./configure --prefix=/usr/local/squid \    #指定安装路径

--sysconfdir=/etc \                 #配置地址

--enable-arp-acl \                  #MAC地址管控

--enable-linux-netfilter \            #内核过滤 

--enable-linux-tproxy \              #透明模式开启

--enable-async-io=100 \              #I/O优化

--enable-err-language="Simplify_Chinese" \ #报错以简体中文显示

--enable-underscore \               #允许url中有下划线

--enable-poll \                   #poll开启

--enable-gnuregex                  #支持正则表达式

make && make install

squid缓存代理---传统代理和透明代理详解_第2张图片

(2)优化squid

4、创建软连接

ln -s /usr/local/squid/sbin/* /usr/local/sbin     #使系统可直接识别命令

5、创建管理用户squid

useradd -M -s /sbin/nologin squid 

6、修改目录权限

chown  -R squid.squid /usr/local/squid/var/

(3)squid配置文件 

7、修改配置文件

vim /etc/squid.conf

squid缓存代理---传统代理和透明代理详解_第3张图片    

(4)squid运行控制

8、squid服务启动

squid -k parse           #检查配置文件语法

squid -z                 #初始化缓存目录

squid                    #启动服务

squid缓存代理---传统代理和透明代理详解_第4张图片


补充:此外,可以编写squid启动脚本进行控制

vim /etc/init.d/squid

#!/bin/bash

#chkconfig:2345 90 25

PID="/usr/local/squid/var/run/squid.pid"   #pid文件位置

CONF="/etc/squid.conf"                #配置文件位置           

CMD="/usr/local/squid/sbin/squid"        #命令文件位置    

case "$1" in

        start)

         netstat -ntap | grep squid &>/dev/null

         if [ $? -eq 0 ]                 

         then

           echo "squid is runing"

         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 -ntap | 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           #可以使用service命令操作    

chkconfig --level 35 squid on



二、传统代理:(拓扑如下)

squid缓存代理---传统代理和透明代理详解_第5张图片


实验环境:


主   机 操作系统  IP地址 角色
web服务器 CentOS-7-x86_64 192.168.37.130 http网站服务
squid代理服务器 CentOS-7-x86_64 192.168.37.128 缓存代理服务
客户机client windows7 192.168.37.100 结果测试


(1)配置squid代理服务器

1、修改squid配置文件

vim /etc/squid.conf

squid缓存代理---传统代理和透明代理详解_第6张图片

2、制定防火墙策略,重载squid服务         

iptables -F

setenforce 0

iptables -I INPUT -p tcp --dport 3128 -j ACCEPT     #指定端口3128允许转发

service squid restart

(2)web服务器:搭建httpd网页服务

yum install httpd -y

systemctl stop firewalld.service

setenforce 0

systemctl start httpd.service

(3)客户机测试

 方式一:直接访问web服务器IP地址:在/etc/httpd/logs/access_log 日志中查看

http://192.168.37.130

squid缓存代理---传统代理和透明代理详解_第7张图片 

vim /etc/httpd/logs/access_log

squid缓存代理---传统代理和透明代理详解_第8张图片        

方式二:设置代理服务,再次访问

工具--Internet--连接--局域网设置--代理服务器打勾--输入IP、端口

squid缓存代理---传统代理和透明代理详解_第9张图片


vim /etc/httpd/logs/access_log

squid缓存代理---传统代理和透明代理详解_第10张图片

传统代理实验部分完成!


三、透明代理(拓扑如下)

squid缓存代理---传统代理和透明代理详解_第11张图片

实验环境:

主   机 操作系统  IP地址 角色
web服务器 CentOS-7-x86_64 12.0.0.12 http网站服务
squid代理服务器 CentOS-7-x86_64

ens33:192.168.100.1

ens36:12.0.0.1

缓存代理服务(作网关)
客户机client windows7 192.168.100.10 结果测试

(1)squid服务器配置双网卡,squid作网关

1、 squid的IP:

squid缓存代理---传统代理和透明代理详解_第12张图片

web服务器IP:

squid缓存代理---传统代理和透明代理详解_第13张图片

clientIP:

squid缓存代理---传统代理和透明代理详解_第14张图片

2、开启路由模式

echo "1" > /proc/sys/net/ipv4/ip_forward        #开启路由,可转发

(2)配置squid支持透明模式

vim /etc/squid.conf

4.png

(3)设置防火墙策略

清空防火墙规则

iptables -F

iptables -t nat -F

setenforce 0

对防火墙进行重定向操作,将访问本机的80、443端口重定向到3128端口

iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128

iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128

iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

(4)验证透明代理

http://12.0.0.12

squid缓存代理---传统代理和透明代理详解_第15张图片

vim /etc/httpd/logs/access_log

squid缓存代理---传统代理和透明代理详解_第16张图片

透明代理实验部分完成!