如何使用Squid服务来构建=》传统和透明代理服务器,通俗易懂!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Squid服务来构建=》传统和透明代理服务器,通俗易懂!相关的知识,希望对你有一定的参考价值。

1、缓存代理概述:

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

2、代理的工作机制:

(1)当客户机通过代理来请求web页面时,指定的代理服务器会先检查自己的缓存,若缓存中已有需访问页面,则直接将缓存中的页面内容反馈给客户机

(2)若缓存中没有所需页面,则代理服务器向Internet发送访问请求,当获得返回的web页面后,将网页数据保存到缓存中并发送给客户机

3、代理的基本类型:

(1)传统代理:

需手动设置代理服务器的地址和端口,多见于Internet环境

(2)透明代理:

不需要手动指定代理服务器的地址和端口,多见于局域网环境

注:代理服务器一定有预备的缓存空间,用于存储服务器反馈的数据

一、Squid代理服务器的安装及运行控制

(1)挂载并解压squid软件包
[[email protected] ~]# mount.cifs //192.168.100.1/zdh /abc
Password for [email protected]//192.168.100.1/zdh:  
[[email protected] ~]# cd /abc
[[email protected] abc]# ls
squid-3.5.28.tar.gz
[[email protected] abc]# tar zxvf squid-3.5.28.tar.gz -C /opt
(2)到squid文件路径下执行配置文件
[[email protected] abc]# cd /opt
[[email protected] opt]# ls
rh  squid-3.5.28
[[email protected] opt]# cd squid-3.5.28/
[[email protected] squid-3.5.28]# ls
acinclude     configure     doc      lib          README             tools
aclocal.m4    configure.ac  errors   libltdl      RELEASENOTES.html
bootstrap.sh  contrib       helpers  Makefile.am  scripts
cfgaux        CONTRIBUTORS  icons    Makefile.in  SPONSORS
ChangeLog     COPYING       include  po4a.conf    src
compat        CREDITS       INSTALL  QUICKSTART   test-suite
(3)配置文件项
[[email protected] squid-3.5.28]# ./configure >--prefix=/usr/local/squid      安装目录
> --sysconfdir=/etc             单独将配置文件修改到其它目录
> --enable-arp-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              使用GUN正则表达式
[[email protected] squid-3.5.28]# systemctl stop firewalld.service 
[[email protected] squid-3.5.28]# setenforce 0
[[email protected] squid-3.5.28]# yum install gcc gcc-c++ make -y               安装编译软件包
[[email protected] squid-3.5.28]#make && make install
(4)创建用户并赋予权限
[[email protected] squid-3.5.28]#ln -s /usr/local/squid/sbin/* /usr/local/sbin/  建立软连接
[[email protected] squid-3.5.28]#useradd -M -s /sbin/nologin squid  创建用户,不创建用户家目录,不使用本地环境登录
[[email protected] squid-3.5.28]#chown -R squid.squid /usr/local/squid/var/  赋予属主属组权限
(5)修改squid的配置文件
[[email protected] squid-3.5.28]#vim /etc/squid.conf
cache_effective_user squid        #添加   指定程序用户
cache_effective_group squid       #添加   指定账号基本组
coredump_dir /usr/local/squid/var/cache/squid  //在此行上面你添加以上两条语句
(6)Squid的运行控制
[[email protected] squid-3.5.28]#squid -k parse   //检查配置文件语法

[[email protected] squid-3.5.28]# squid -z   //初始化缓存目录

[[email protected] squid-3.5.28]# squid    //启动服务
(7)使用Squid脚本服务
[[email protected] squid-3.5.28]#cd /etc/init.d
[[email protected] init.d]# vim 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..."
       $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}"
   ;;
esac

[[email protected] init.d]#chmod +x squid  赋予执行权限
[[email protected] init.d]# chkconfig --add squid
[[email protected] init.d]# chkconfig --level 35 squid on                            添加开机自启

这样一来我们就可以通过Squid脚本来启动、停止、重载Squid服务器了,在执行时天机相应的start、stop、reload、restart参数。

二、构建代理服务器

接下来我从两个方面来讲解Squid的配置和使用,分别是传统代理,透明代理。

1、传统代理:

准备条件:

一台squid服务器:192.168.100.129

一台web服务器:192.168.100.130

一台windows客户机:192.168.100.133
(1)squid代理服务器的配置

1、修改squid.conf的配置文件

[[email protected] ~]# vim /etc/squid.conf
cache_mem 64 MB                   #指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB         #允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
maximum_object_size 4096 KB       #允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户

2、在防火墙添加允许策略,这里不要关闭防火墙

[[email protected] ~]# iptables -F   清空防火墙列表
[[email protected] ~]# setenforce 0   关闭网络增强性安全功能
[[email protected] ~]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT

3、重载squid服务,使配置文件生效

[[email protected] ~]# service squid reload
(2)web服务器的代理配置
[[email protected] ~]# yum install httpd -y
[[email protected] ~]# systemctl start httpd
[[email protected] ~]# netstat -antp |grep 80 
tcp6       0      0 :::80                   :::*                    LISTEN      87297/httpd

开启后客户机就可以访问了,但注意,在这里客户机并不是通过代理服务器访问,而是直接访问的web网站,请看!

[[email protected] squid-3.5.28]# cd /etc/httpd/
[[email protected] httpd]# cd logs/
[[email protected] logs]# vim access_log 
192.168.100.133 - - [23/Jul/2018:14:33:45 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.eot? HTTP/1.1" 404 240 "http://192.168.100.130/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"
"access_log" 30L, 9002C

可以看出是客户机直接访问的web服务器,并没有通过代理服务器,下面我们通过代理服务器登录

(3)客户机的代理配置
在IE浏览器中--选择‘工具’--‘intnet选项’--‘intnet选项对话框’--‘连接’--‘局域网(lan)设置’--单击‘局域网设置’按钮--弹出‘局域网设置’对话框

技术分享图片
技术分享图片

下面我们清空浏览器记录,重新访问几次,在web服务器查看访问日志
技术分享图片

技术分享图片

2、透明代理

透明代理提供的服务功能和传统代理是一致的,但其透明的实现是依赖于默认路由和防护墙的重定向策略。因此,更适用于局域网主机服务,而不适合为Internet中的客户机提供服务

准备条件:

一台squid代理服务器,配置双网卡:内网ens33 192.168.100.1 外网:ens36 12.0.0.1

一台web服务器:12.0.0.12

一台windows客户机:192.168.100.133

技术分享图片
作为别人的网关需要帮别人转发数据包

[[email protected] ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

重启虚拟机后需要重新执行防火墙策略

[[email protected] ~]#iptables -F
[[email protected] ~]#iptables -t nat -F
[[email protected] ~]#setenforce 0
(1)配置squid支持透明代理
[[email protected] ~]# vim /etc/squid.conf
http_port 192.168.100.1:3128 transparent
[[email protected] ~]#service squid reload

技术分享图片

(2)设置iptables的重定向策略

[[email protected] ~]#iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128           (redirect 重定向)
[[email protected] ~]#iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128   (443 安全性的超文本传输协议)
[[email protected] ~]#iptables -I INPUT -p tcp --dport 3218 -j ACCEPT

最后再次访问12.0.0.12即可发现是通过网关12.0.0.1访问,这里不再展示。

以上是关于如何使用Squid服务来构建=》传统和透明代理服务器,通俗易懂!的主要内容,如果未能解决你的问题,请参考以下文章

构建Squid代理服务器-传统代理透明代理反向代理

Squid传统代理与透明代理构建

实战Squid 缓存服务器 之 传统代理 + 透明代理

利用Squid构建传统代理及透明代理

CentOS上构建squid传统代理,透明代理(squid3.4.6)

Squid代理服务器(传统代理透明代理)(图文详解)