Linux系统架构-----Squid---传统代理与透明代理

一.Squid概述

  • Squid是一个高性能的代理缓存internet数据的软件,Squid通过接受人们需要下载的目标(object)的请求并且适当地处理这些请求。即如果一个人想要下载一些web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器,并向这个页面发出请求。然后,squid显式地聚集数据到客户端,而且同时复制一份,当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据就会迅速的传输到客户机上。当前的Squid可以处理HTTP、FTP、SSL、WAIS等协议,但是不能处理POP、NNTP、RealAudio以及其他类型的东西
  • Squid的工作机制

  • 当客户机通过squid代理去访问web页面时,指定的代理服务器会检查自己的缓存,若是缓存中有客户机需要的页面,那么squid服务器将直接把缓存中页面内容返回给客户机。如果缓存中没有客户端请求的页面,那么squid代理服务器就会向internet发送访问请求,获得返回的web页面后,将网页的数据库保存到缓存中发送给客户机
  • 由于客户机的web访问请求实际上是squid代理服务器来代替完成的,所以隐藏了用户的真实IP地址,从而起到了一定的保护作用,此外,squid也可以针对要访问的目标、客户机的地址、访问的时间段进行过滤控制
  • 根据实现的方式不同,基本可以分为传统代理和透明代理两种方式
  • 传统代理:也就是普通的代理服务,需要客户端在浏览器、聊天工具等一些程序设置代理服务器的地址和端口,然后才能使用代理来访问网络,这种方式相比较而言比较麻烦,因为客户机还需要手动指定代理服务器,所以一般用于internet环境
  • 透明代理:与传统代理实现的功能是一样,区别在于客户机不需要手动指定代理服务器的地址和端口,而是通过静态路由、防火墙策略将web访问重定向,实际上仍然交给代理服务器来处理,重定向的过程完全是由squid服务器进行的,所以对于客户机来说,甚至不知道自己使用了squid代理服务,因此呢,我们称之为透明模式。透明模式多用于局域网环境,如在Linux网关中启用透明代理,局域网主机无需进行额外的设置就能享受更好的上网速度

二.搭建Squid的传统模式

  • 实验环境
类别IP地址系统软件包
Squid服务器192.168.43.101centos7squid-3.4.6.tar.gz
web服务器192.168.43.102centos7 
客户机192.168.43.103centos7 
  • Squid服务器的配置
1.解压squid软件包
tar xzvf squid-3.4.6.tar.gz -C /opt
2.安装相关软件包
yum install gcc gcc-c++ make -y
3.配置服务模块,编译安装
cd /opt/suqid-3.4.6/
./configure \
--prefix=/usr/local/squid \
--sysconfdir=/etc --enable-arp-acl \
--enable-linux-netfilter \
--enable-linux-tproxy \       //添加透明代理功能
--enable-async-io=100 \
--enable-err-language="Simplify_Chinese" \
--enable-underscore \
--enable-poll \
--enable-gnuregex

make && make install
4.创建软链接,优化服务控制方式
ln -s /usr/local/squid/sbin/squid /usr/local/sbin/
5.创建squid用户
useradd -M -s /sbin/nologin squid
6.修改squid中的var的属性
chowm -R squid.squid /usr/local/squid/var/
7.编辑squid的配置文件
vim /etc/squid.conf

 55 # And finally deny all other access to this proxy
 56 http_access allow all
 57 http_access deny all        //允许所有用户访问
 58 
 59 # Squid normally listens to port 3128
 60 http_port 3128   
 61 cache_mem 64 MB  //指定缓存功能所使用的内存空间大小
 62 reply_body_max_size 10 MB    //允许用户下载的最大文件大小
 63 maximum_object_size 4096 KB    //允许保存到缓存空间的最大对象大小
 64 cache_effective_user squid    //添加指定程序用户
 65 cache_effective_group squid    //添加指定账户基本组
 66 
 67 # Uncomment and adjust the following to add a disk cache directory.
 68 #cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256

8.编辑防火墙规则
iptables -F    //清除所有规则
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT //允许目标端口3128做转发

9.检查语法并且开启服务
squid -k parse    //检查配置文件语法
squid -z          //初始化缓存目录
squid             //启动服务
[root@localhost ~]# netstat -natp | grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      36414/(squid-1)     
[root@localhost ~]# 

10.编辑脚本,优化服务控制方式(service 工具)
vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"

case "$1" in
start)
      netstat -natp | grep squid &> /dev/null
      if [ $? -eq 0 ]
        then
        echo "squid is running"
        else
        echo "正在启动 squid...."
        echo "成功启动"
        $CMD
        fi
        ;;
stop)
        $CMD -k kill &> /dev/null
        rm -rf $PID &> /dev/null
        ;;
status)
         [ -f $PID ] &> /dev/null
           if [ $? -eq 0 ]
             then
              netstat -natp | grep squid
             else
              echo "squid is not running"
           fi
          ;;
restart)
          $0 stop &> /dev/null
           echo "正在关闭 squid..."
           echo "关闭成功"
          $0 start &> /dev/null
           echo "正在启动 squid..."
           echo "启动成功"
          ;;
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    //开机自启
[root@localhost ~]# service squid restart
正在关闭 squid...
关闭成功
正在启动 squid...
启动成功
[root@localhost ~]# 
  • web服务器配置
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start httpd.service 
[root@localhost ~]# netstat -natp | grep 80
tcp        0      0 192.168.43.102:22       192.168.43.1:58000      ESTABLISHED 1372/sshd: root@pts 
tcp6       0      0 :::80                   :::*                    LISTEN      1633/httpd          
  • 客户机的配置

  • 从客户机上访问web服务器

  • 在web服务器上查看日志信息

三.搭建Squid的透明模式

  • 网络拓补图

  • 实验环境
类别IP地址系统软件包
squid服务器

ens33:192.168.43.101/24

ens37:192.168.10.1/24

centos7squid-3.4.6.tar.gz
web服务器192.168.43.102centos7 
客户机192.168.10.1centos7 
  • 配置squid服务器
1.配置网卡
ens33为NAT模式

ens37为仅主机模式
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-ens33 ifcfg-ens37
vim ifcfg-ens37
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens37"
DEVICE="ens37"
ONBOOT="yes"
IPADDR="192.168.10.1"
PREFIX="24"
IPV6_PRIVACY="no"
~                  
service network restart 

[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.101  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 fe80::ba30:ef5e:b59f:4f1c  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ce:5f:24  txqueuelen 1000  (Ethernet)
        RX packets 69255  bytes 75640130 (72.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 37782  bytes 4352077 (4.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.1  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::ece2:7d1e:9841:aaa4  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ce:5f:2e  txqueuelen 1000  (Ethernet)
        RX packets 1939  bytes 165942 (162.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 620  bytes 209636 (204.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 177  bytes 16303 (15.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 177  bytes 16303 (15.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:7a:bf:df  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost ~]# 

2.配置路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p

3.配置squid文件
vim /etc/squid.conf
 59 # Squid normally listens to port 3128
 60 http_port 192.168.10.1:3128 transparent

service squid restart
4.添加防火墙规则
iptables -F    //清空规则
iptables -t nat -F
iptables -t nat -I PREROUTING -i ens37 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens37 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
  • 配置web服务器
yum install httpd -y
route add -net 192.168.10.0/24 gw 192.168.43.101     //添加静态路由
systemctl stop firewalld.service 
setenforce 0
  • 配置客户端,虚拟机处于仅主机模式
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="58caa276-e9d1-4c47-872d-27a4e5015272"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.10.10"
PREFIX="24"
GATEWAY="192.168.10.1"
IPV6_PRIVACY="no"

[root@localhost ~]# service network restart 
Restarting network (via systemctl):                        [  确定  ]
  • 验证服务配置

注:在web服务器中,添加到路由表的静态路由有时间限制

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值