博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学会Squid之传统代理和透明代理一篇就够了!
阅读量:2026 次
发布时间:2019-04-28

本文共 6852 字,大约阅读时间需要 22 分钟。

文章目录

squid的概念

squid是一种用来缓存Internet数据的软件。接受来自人们需要下载的目标(object)的请求并适当的处理这些请求。也就是说,如果一个人想下载一web界面,他请求squid为他取得这个页面。squid随之连接到远程服务器并向这个页面发出请求。然后,squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时, squid可以简单的从磁盘中读到它,那样数据会立即传输到客户机上。

在这里插入图片描述

一:squid概述

Squid(Squid cache,简称Squid)是Linux系统中最常用的一款开源代理服务软件,可以很好地实现HTTP和FTP,以及DNS查询、SSL等应用的缓存代理,功能十分强大,本篇博客详细介绍了传统代理、透明代理,squid日志分析的配置。squid的官方网站为http://www.squid-cache.org

  • 代理用户向web服务器请求数据并进行缓存,可以过滤流量帮助网络安全。
  • 可以作为代理服务器链中的一环,向上级代理转发数据或直接连接互联网。
  • 可以用在局域网中,使局域网用户通过代理上网。
  • 可以将数据缓存在内存中,同时也缓存DNS查询的结果,还支持非模块化的DNS查询,对失败的请求进行消极缓存。
  • Squid支持SSL,支持ACL访问控制。

1.1:squid代理的作用

  • 代理上网 (传统代理,透明代理)
  • 网站静态页面缓存加速(反向代理)

1.2:缓存代理概述

1.21:Web代理的工作机制

  • 缓存网页对象,减少重复请求
    在这里插入图片描述

二:squid的代理类型

  • 普通代理:需要客户机在浏览器中指定代理服务器的地址、端口;
  • 透明代理:适用于企业的网关主机(共享接入Internet)中,客户机不需要指定代理服务器地址、端口等信息,代理服务器需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理;
  • 反向代理:是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

使用代理的好处

  • 提高Web访问速度
  • 隐藏客户机的真实IP地址
  • 部署简单,可以实现访问控制。

三:squid传统代理的部署

传统代理模式

客户端必须在自己的浏览器里指定服务器的ip地址和监听的端口号,才能通过squid代理服务器上网。**

3.1: 项目介绍

如上图所示,在服务器B上构建Squid代理服务器,允许客户机指定squid代理服务器作为Web代理,访问网站服务器,但禁止通过代理下载超过10MB的文件,超过4MB的文件不进行缓存。

环境介绍

主机 系统 IP地址 主要软件
squid代理服务器 CentoS7.4 192.168.158.10 squid-3.5.27.tar.gz
WEB服务器 CentoS7.4 192.168.158.20 Apache
客户机 win10 192.168.158.60 自带的浏览器
  • 先修改主机名,方便实验效果
[root@localhost ~]# hostnamectl set-hostname squid[root@localhost ~]# su[root@squid ~]# [root@localhost ~]# hostnamectl set-hostname web[root@localhost ~]# su

3.2:部署过程

  • 在squid服务器部署squid服务
tar zxvf squid-3.4.6.tar.gz -C /opt/cd /opt/squid-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
./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提升存储性能,值可修改       --enable-err-language ="Simplify_Chinese" \    ##错误信息的提示语言--enable-underscore \                          ##允许URL中有下划线--enable-poll \                                ##使用 poll() 模式,提升性能--enable-gnuregex                              ##支持GNU正则表达式
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/

3.3:修改配置文件,编写脚本优化服务启动项

vim /etc/squid.conf//增添下句并注释denyhttp_access allow all#http_access deny all  //在端口port下增添三行代码  http_port 3128   cache_effective_user squid                       #添加指定程序用户  cache_effective_group squid                      #添加指定账号基本组coredump_dir /usr/local/squid/var/cache/squid    #内存映像的地址squid -k parse                     #检查配置文件语法squid –k rec                       #重新加载配置文件squid -z                           #初始化缓存目录squid                              #启动服务netstat -ntap | grep 3128          #查看服务是否启动//编写优化脚本cd /etc/init.d/vim squid#!/bin/bash#chkconfig: 2345 90 25PID="/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. . ."               $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...."         $0 start &> /dev/null            echo "正在启动 squid..."	;;      reload)         $CMD -k reconfigure	;;      check)         $CMD -k parse	;;        *)         echo "用法: $0 {start|stop|status|reload|check|restart}"         ;;esacchmod +x squidchkconfig --add squidchkconfig --level 35 squid on     #设置为开机自启动service squid stopservice squid startnetstat -ntap | grep 3128

3.4:设置缓存参数

[root@squid init.d]# vim /etc/squid.confhttp_port 3128      '//下面添加'      cache_mem 64 MB                      //缓存64M的内容reply_body_max_size 10 MB            //禁止下载的超过10MB的文件maximum_object_size 4096 KB          //超过4MB:的文件不进行缓存

3.5:设置防火墙规则

[root@squid init.d]# iptables -F[root@squid init.d]# setenforce 0[root@squid init.d]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT#重载服务[root@squid init.d]# service squid reload[root@squid init.d]# netstat -ntap | grep 3128tcp6       0      0 :::3128                 :::*                    LISTEN      11982

3.6:配置web端和客户端

[root@localhost ~]# su[root@web ~]# systemctl stop firewalld.service [root@web ~]# setenforce 0[root@web ~]# yum install httpd -y[root@web ~]# systemctl start httpd[root@web ~]# netstat -ntap | grep 80tcp6       0      0 :::80                   :::*                    LISTEN      85552/httpd         #查看访问日志是没有东西的[root@web ~]# cat /var/log/httpd/access_log

3.7:打开客户进行配置

在这里插入图片描述

设置客户端代理服务为squid IP
在这里插入图片描述

  • 用win 10客户机访问web

在这里插入图片描述

3.8:查看web端httpd的访问日志

[root@web ~]# cat /var/log/httpd/access_log

客户端192.168.158.60访问192.168.158.10网站服务,成功变为访问 squid代理IP

在这里插入图片描述

四:squid透明代理

  • 客户端不需要指定代理服务器的ip地址和监听端口号,感觉是直接和公网通信,但是必须把网关地址指向代理服务器的内网接口ip地址。
  • 特点:对用户是透明的,即用户意识不到防火墙的存在。常用在服务器集群前端。
  • 要想实现透明模式,防火墙必须在没有IP地址的情况下工作,不需要对其设置IP地址,用户也不知道防火墙的IP地址。
  • 优点:既增加了网络的安全性,又降低了用户管理的复杂程度。

2.1:项目环境

  • squid 透明代理模式必须配置双网卡。
服务器 ip
squid ens33:192.168.158.10(外网)
squid ens37:192.168.100.10
web服务器 192.168.158.20(外网)
client 192.168.100.5

五:透明代理项目操作

实现思路:

  • 开启路由转发功能
  • 开启透明代理
  • 配置防火墙规则

网卡设置

我这里的squid服务器和web服务器的安装就不介绍了。

大家可以看我的上一篇博客,链接:squid代理介绍----传统代理

  • squid服务器添加网卡

在这里插入图片描述

  • 修改IP地址
cd /etc/sysconfig/network-scripts/cp -p ifcfg-ens33 ifcfg-ens37vi ifcfg-ens36  ##修改ens37ip信息BOOTPROTO=static##删除uuid修改33为37IPADDR=192.168.100.10NETMASK=255.255.255.0

在这里插入图片描述

//重启网络服务service network restart    //开启路由转发vim /etc/sysctl.conf  net.ipv4.ip_forward=1sysctl -p   ##加载使之生效

2:web服务器指定静态路由

route add -net 192.168.100.0/24 gw 192.168.158.10

3、开启透明代理

//修改配置文件vim /etc/squid.conf#http_port 3128  #删除添加下面这行,地址为与客户机在同网段的地址http_port 192.168.100.10:3128 transparent     service squid restartnetstat -ntap | grep 3128

4、设置防火墙规则

iptables -F    #清空表缓存iptables -t nat -F//定义规则入口ens36,80端口重定向到3128iptables -t nat -I PREROUTING -i ens37 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128iptables -t nat -I PREROUTING -i ens37 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128//允许3128端口访问iptables -I INPUT -p tcp --dport 3128 -j ACCEPTiptables -t nat -L

5、客户机验证

客户端win10设置IP地址、掩码、网关,打开IE浏览器,输入192.168.158.20(web服务器)同时查看web服务器的日志文件,看到192.168.158.10。

cd /etc/httpd/logs/cat access_log

即squid的ens33网卡开启透明代理服务!在这里插入图片描述

报错

日志的网址一直是client的网址

若配置文件全部都改好,防火墙规则全部设定好,若出现如下服务状态,重启机器
在这里插入图片描述

转载地址:http://rydaf.baihongyu.com/

你可能感兴趣的文章
mybatis generator 修改
查看>>
java分批量插入数据(数据量太大)
查看>>
Oracle 批量插入数据 insert all into 用法
查看>>
Oracle sql批量插入多条数据
查看>>
四行python代码实现oracle数据库dmp文件批量导入
查看>>
List 中subList()方法 使用时注意的问题
查看>>
List.subList()方法的坑 以及 如何截短一个List
查看>>
Java 8中map中删除元素的简单方法
查看>>
Java中如何优雅地删除List中的元素
查看>>
ConcurrentHashMap的特殊之处 (遍历的同时修改)
查看>>
ConcurrentHashMap的数据不一致问题
查看>>
这样规范写代码,同事直呼“666”
查看>>
接口设计技巧和最佳实践
查看>>
对开发人员有用的定律和原则
查看>>
码出高效JAVA代码
查看>>
JAVA安全编码标准
查看>>
我们应该从JAVA集合中学到什么
查看>>
微服务架构之我们应该从Dubbo中学到什么
查看>>
优秀Web开发者必须知道的10件事
查看>>
项目延期原因及应对之道
查看>>