想要比别人跑的快,还得 Squid 替你代 ———— 部署Squid代理服务器 —— 正向代理(传统代理、透明代理) ---- 你值得一看!

Squid介绍

  • squid服务程序是一款在Unix系统中最为流行的高性能代理服务软件,通常会被当作网站的前置缓存服务,用于替代用户向网站服务器请求页面数据并将请求数据存储在服务器缓存空间中,以便提高用户访问页面的速度,减少等待时间,提升体验感。

使用Squid的好处

  • 提高Web页面的访问速度
  • 提高用户访问数据的安全性
  • 通过ACL访问控制,针对源IP、目的地IP、域名、URL、访问时间、单一最大连接数限制访问行为,或通过外部程序验证访问者(proxy_auth)
  • 网页内容篡改,可根据需求篡改网站内容。
  • 网站头部篡改,可根据需求篡改请求头部。
  • 可针对不同的域名或url配置不同的缓存规则

Squid代理类型

正向代理

  • 传统代理
    1、代理方式:通过在浏览器中设置代理服务器的ip地址和端口来实现代理

    2、原理:用户在访问目标服务器时,因为浏览器中设置了代理服务器,相当于是直接访问的代理服务器,再由代理服务器去访问目标浏览器;这时代理服务器会缓存下用户的请求,接着代理服务器在去请求目标服务器,目标服务器接收到请求后返回请求的web时,代理服务依然会缓存这个回复放web内容数据,以便下次用户在访问相同的请求时,代理服务器会直接将这个请求相对应的web数据信息传输给用户而不必再次向目标请求数据,达到提升访问速度的效果。

  • 透明代理
    1、透明代理,是相对于普通代理服务而言,客户端不需要做任何和代理服务器相关的设置,对用户而言,感觉不到代理服务器的存在,所以称之为透明代理,即把代理服务器部署在核心的上网出口,当用户上网浏览页面时,会交给代理服务器向外请求,如果结合iptables可以实现代理+网关+内容过滤+流量安全控制等完整的上网解决方案。

    2、原理:用户A发送一个访问请求到防火墙,由防火墙将该用户的访问请求转发给Squid,squid再先检查自身缓存中有无该用户请求的访问内容;如果没有,则请求目标服务器,获取该用户的访问内容,再放回给用户的同时,在自身缓存保留一份记录以备下次调用,当用户B发送一个和用户A相同的请求到防火墙时,由防火墙转发该用户请求到squid,squid检查到自身缓存发现有相同的内容,直接将该内容放回给用户B。而无需再次去访问请求的服务器

反向代理

  • 反向代理
    1、反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外表现为一个服务器。

    2、原理:squid做反向代理服务器,通常工作在一个服务器集群的前端,在用户看来,squid服务器就是他所要访问的服务器,而实际意义上,squid只是接受用户的请求,同时将用户请求转发给内部真正的WEB服务器,如果squid本身有用户要访问的内容,则squid直接将数据返回给用户,起到了缓存数据的作用,减少了后端服务器的压力。

部署 Squid 正向代理

传统代理

传统代理部署规划

一台centos 7.4版本的Linux系统 squid代理服务器       ip:20.0.0.101
一台 centos 7.4版本的Linux系统 web服务器       ip:20.0.0.102

squid 软件安装包 : squid-3.4.6.tar.gz

环境:关闭防火墙、核心防护;
systemctl stop firewalld
setenforce 0

传统代理部署

  • 在主机 20.0.0.101(squid)
1、修改主机名
hostnamectl set-hostname squid

2、将 squid-3.4.6.tar.gz 软件安装包上传至root家目录并解压
tar zxvf squid-3.4.6.tar.gz
cd squid-3.4.6/

3、编译安装功能模块
yum -y install gcc gcc-c++ make           

./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 -j4
make install


4、优化指令
ln -s /usr/local/squid/sbin/* /usr/local/sbin/

5、指定squid用户不能通过shell登录系统
useradd -M -s /sbin/nologin squid

6、授权
chown -R squid.squid /usr/local/squid/var


7、修改主配置文件(分配缓存空间)
vi /etc/squid.conf

 56 #http_access deny all         ####将56行这条默认拒绝所有注释掉,添加下面的允许所有
      http_access allow all

 60 http_port 3128             ####60行端口下 添加下面两行 指定用户和组用户
     cache_effective_user squid
     cache_effective_group squid


8、测试语法是否正确
squid -k parse

9、初始化squid
squid -z

显示:
[root@squid squid]# 2020/10/30 14:06:25 kid1| Set Current Directory to /usr/local/squid/var/cache/squid
2020/10/30 14:06:25 kid1| Creating missing swap directories
2020/10/30 14:06:25 kid1| No cache_dir stores are configured.


10、开启squid并过滤端口查看是否开启
squid

netstat -anpt | grep 3128
tcp6       0      0 :::3128                 :::*                    LISTEN      88724/(squid-1)



11、添加到 service 中管理并测试
cd /etc/init.d

vi 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 -ntap | grep squid &> /dev/null
        if [ $? -eq 0 ]
        then
        echo "squid is running"
        else
        echo "正在启动 squid...." 
        $CMD
        echo "启动完成!"
         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
            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|reload|status|check|restart}"
         ;;
esac


chmod +x /etc/init.d/squid
chkconfig --add squid
service squid stop
netstat -anpt | grep 3128
service squid start
netstat -anpt | grep 3128
  • 安装传统代理服务器
修改主配置文件:
vim /etc/squid.conf

http_port 3128               ####这行下添加下面三行
cache_mem 64 MB           ###指定缓存功能所使用的内存空间大小
reply_body_max_size 10 MB            ###允许用户下载的最大文件大小,以字节为单位
maximum_object_size 4096 KB          ###允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接发往用户端

重新确认:
iptables -F
setenforce 0
iptables -I INPUT -p tcp  --dport 3128 -j ACCEPT
service squid reload
  • 在主机 20.0.0.102(web)
1、修改主机名
hostnamectl set-hostname web

2、安装 apache 服务并启动
yum -y install httpd
systemctl start httpd

3、检查端口是否开启
netstat -anpt | grep 80

4、用真机登录(20.0.0.102)httpd产生日志信息

5、查看日志,可以看到登录地址为真机地址(20.0.0.252)
cat /var/log/httpd/access_log

6、在真机网页中设置代理地址(谷歌)
右上角点击设置 ----> 左侧功能栏点击高级 ----> 点击系统 ---->点击打开您计算机的代理设置
手动设置代理 ----> 打开使用代理服务器 ----> 输入代理服务器 squid 的IP地址、端口

再次真机登录 httpd(20.0.0.1027、查看 web服务器(20.0.0.102)的日志文件,可以看到登录地址变为了代理服务器地址(20.0.0.101)
cat /var/log/httpd/access_log

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

透明代理

透明代理部署规划

1、在传统代理之前操作的基础上
2、squid服务器 20.0.0.101 上,新增一张网卡 ens36 并设置成网关  192.168.100.1
3、添加一台 windows 系统的客户端  ip :192.168.100.10

透明代理部署

  • 在 squid 服务器上
1、设置网关
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-ens33 ifcfg-ens36

vi ifcfg-ens36
~
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.100.1
NETMASK=255.255.255.0
~    

systemctl restart netwark         


2、开启路由转发
vi /etc/sysctl.conf
net.ipv4.ip_forward=1           ###末尾添加路由转发功能


sysctl -p              ####加载配置


3、修改主配置文件(支持透明模式)
vim /etc/squid.conf

修改60行: http_port 192.168.100.1:3128 transparent              ####添加网关地址及transparent 支持透明模式

service squid restart


4、添加防火墙策略
iptables -F                    ###清空防火墙规则
iptables -t nat -F                 ###清空防火墙表
iptables -t nat -L                  ###查看防火墙表

iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp  --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp  --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

netstat -anpt | grep 3128
  • 在 web 服务器上
1、添加静态路由
route add -net 192.168.100.0/24 gw 20.0.0.101

2、先去windows 客户端登录httpd,在来web服务器上查看httpd的日志文件
cat /var/log/httpd/access_log

显示的直接是代理服务器的IP地址,也就是说并不需要去浏览器上设置代理服务器地址,这也是透明代理和传统代理的区别。
  • 在 windos系统的客户端
1、设置ip地址(更改网络适配器)
192.168.100.10/24    192.168.100.1

2、在浏览器上登录httpd,产生日志信息,然后去web服务器上查看日志信息

在这里插入图片描述

———————————————————————————————————

部署 Squid代理服务 的 正向代理到此结束,下篇将会更新 Squid代理服务 的 反向代理

感谢浏览~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值