其他分享
首页 > 其他分享> > Blog.069 Squid 代理服务器的应用

Blog.069 Squid 代理服务器的应用

作者:互联网

本章目录

 

 

 

 

1. Squid代理服务器
  1.1 工作机制
  1.2 代理的基本类型
  1.3 工作模式
  1.4 使用 Squid 代理的优势
2. Squid代理服务器的编译安装及运行
  2.1 安装步骤
3. 搭建传统代理
  3.1 搭建步骤
4. 搭建透明代理
  4.1 搭建步骤
5. ACL 访问控制
  5.1 在配置文件squid.conf中,ACL访问控制的步骤
  5.2 定义访问控制列表
  5.3 ACL访问控制方式
  5.4 ACL规则优先级
  5.5 常用的ACL列表类型
6. 设置 ACL 访问控制
  6.1 设置步骤

 

 

 

 

1. Squid代理服务器

    squid 作为一款服务器代理工具,可以缓存网页对象,减少重复请求,从而达到加快网页访问速度,隐藏客户机真实IP,更为安全。
    Squid主要提供缓存加速、应用层过滤控制的功能。


  1.1 工作机制

    当我们客户机通过squid代理去访问web页面时,指定的代理服务器会先检查自己的缓存,若是缓存中有我们客户机需要的页面,那么squid服务器将直接把缓存中的页面内容返回给客户机
    如果缓存中没有客户端请求的页面,那么squid代理服务器就会向internet发送访问请求,获得返回的web页面后,将网页的数据保存到缓存中并发送给客户机。
    由于客户机的web访问请求实际上是squid代理服务器来代替完成的,所以隐藏了用户的真实IP地址,从而起到一定的保护作用。
    另一方面,squid也可以针对要访问的目标、客户机的地址、访问的时间段进行过滤控制。


  1.2 代理的基本类型


    根据实现的方式不同,基本可以分为传统代理和透明代理两种方式:


  1.3 工作模式

    此类工作模式为三种模式中最简单的构成,对客户端配置较不友好,主要功能为正向代理,加速内网用户的访问速度,减少出口流量。
    (如果搭建公用的代理服务器,用这样方式,需要用户进入其本机的网络设置中,设置搭建了squid服务器的IP和端口)

    此类工作模式配置较为复杂,同样也是实现正向代理需要借助防火墙对端口进行重定向操作。但是对于客户端来说配置较为友好无需进行任何配置即可使用代理功能,主要功能为加速内网用户的访问速度,减少出口流量。
    (如果搭建内网访问外网的代理服务器,建议使用这种,无需到客户端设置代理服务器的IP和端口,自动实现squid代理)

    反向代理模式位于本地WEB服务器和公网之间,处理公网用户发起的请求,并代理至内网服务中,有效减轻后端真是服务器的压力,增加服务器的并发处理能力。


  1.4 使用 Squid 代理的优势


2. Squid代理服务器的编译安装及运行
  2.1 安装步骤

    (1)关闭防火墙和SElinux

1 systemctl stop firewalld
2 systemctl disable firewalld
3 setenforce 0

 

    (2)编译安装Squid

 1 #安装依赖环境
 2 yum -y install gcc gcc-c++ make
 3 #上传软件包squid-3.5.27. tar到/opt目录下
 4 cd /opt
 5 #解压
 6 tar zxvf squid-3.5.27.tar.gz
 7 #配置相关模块
 8 cd squid-3.5.27/
 9 ./configure --prefix=/usr/local/squid \
10 --sysconfdir=/etc \
11 --enable-arp-acl \
12 --enable-linux-netfilter \
13 --enable-linux-tproxy \
14 --enable-async-io=100 \
15 --enable-err-language="Simplify_Chinese" \
16 --enable-underscore \
17 --enable-poll \
18 --enable-gnuregex
19  
20 # 编译安装
21 make && make install
22  
23 -----------------------------------------------
24 ####_上述脚本解释###
25  
26 ./configure --prefix=/usr/local/squid
27 ##安装目录
28 --sysconfdir=/etc/
29 ##单独将配置文件修改到/etc目录下
30 -- enable-arp-acl
31 ##可在ACL中设置通过MAC地址进行管理,防止IP欺骗
32 --enable-1inux-netfilter
33 ##使用内核过滤
34 --enable-linux-tproxy
35 ##支持透明模式
36 --enable-async-io=100
37 ##异步I/O,提升储存性能,值可修改
38 --enable-err-language="Simplify_Chinese"
39 ##错误信息的显示语言
40 --enable-underscore
41 ##允许URL中有下划线
42 -enable-poll
43 ##使用Poll () 模式,提升性能
44 --enable-gnuregex
45 ##使用GNU正则表达式

 

1 ln -s /usr/local/squid/sbin/* /usr/local/sbin
2 ##创建链接文件,优化路径
3 useradd -M -s /sbin/nologin squid
4 ###创建程序用户、组
5 chown -R squid:squid /usr/local/squid/var/
6 ##改变目录属主,此目录用来存放缓存文件

 

    (3)修改Squid的配置文件

 1 vim /etc/squid.conf
 2 ......
 3 -----56行--插入------
 4 http_access allow all         #放在http_access deny all 之前,允许任意客户机使用代理服务,控制规则自上而下匹配
 5 http_access deny all
 6 http_port 3128                 #用来指定代理服务监听的地址和端口(默认的端口号为3128)
 7 -----61行--插入------
 8 cache_effective_user squid     #添加,指定程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功
 9 cache_effective_group squid    #添加,指定账号基本组
10 coredump_dir /usr/local/squid/var/cache/squid   #指定缓存文件目录

 

    (4)Squid 的运行控制

1 #检查配置文件语法是否正确
2 squid -k parse
3  
4 #启动Squid, 第一次启动Squid服务时,会自动初始化缓存目录
5 squid -z   #-z选项用来初始化缓存目录
6 squid      #启动squid 服务
7  
8 netstat -anpt | grep "squid"

 

    (5)创建 Squid 服务脚本

 1 vim /etc/init.d/squid
 2 #!/bin/bash
 3 #chkconfig: 2345 90 25
 4 PID="/usr/local/squid/var/run/squid.pid"
 5 CONF="/etc/squid.conf"
 6 CMD="/usr/local/squid/sbin/squid"
 7  
 8 case "$1" in
 9    start)
10      netstat -natp | grep squid &> /dev/null
11      if [ $? -eq 0 ]
12      then
13        echo "squid is running"
14        else
15        echo "正在启动 squid..."
16        $CMD
17      fi
18    ;;
19    stop)
20      $CMD -k kill &> /dev/null
21      rm -rf $PID &> /dev/null
22    ;;
23    status)
24      [ -f $PID ] &> /dev/null
25         if [ $? -eq 0 ]
26           then
27             netstat -natp | grep squid
28           else
29             echo "squid is not running"
30         fi
31    ;;
32    restart)
33       $0 stop &> /dev/null
34       echo "正在关闭 squid..."
35       $0 start &> /dev/null
36       echo "正在启动 squid..."
37    ;;
38    reload)
39       $CMD -k reconfigure
40    ;;
41    check)
42       $CMD -k parse
43    ;;
44    *)
45       echo "用法:$0{start|stop|status|reload|check|restart}"
46    ;;
47 esac

 

1 ##2345是默认自启动级别,如是 - 代表任何级别都不自启动; 90是启动优先级,25是停止优先级, 优先级范围是0一100,数字越大,优先级越低。
2 
3 chmod +x /etc/init.d/squid
4 chkconfig --add squid
5 chkconfig --level 35 squid on

 

3. 搭建传统代理
  3.1 搭建步骤

    (1)环境准备

    Squid 代理服务器:192.168.229.60
    web服务器: 192.168.229.80
    win10客户端: 192.168.229.200


    (2)修改squid的配置文件

 1 vim /etc/squid.conf
 2 ......
 3 http_access allow all
 4 http_access deny all
 5 http_port 3128
 6 cache_effective_user squid
 7 cache_effective_group squid
 8 ---63行,插入----
 9 cache_mem 64 MB            
10 #指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
11 reply_body_max_size 10 MB          
12 #允许用户下载的最大文件大小,以字节为单位,当下载超过指定大小的Web对象时,浏览器的报错页面中会出现“请求或访问太大”的提示默认设置0表示不进行限制
13 maximum_object_size 4096 KB        
14 #允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户

 

    (3)重启服务

1 service squid restart
2 systemctl restart squid  

 

    (4)修改防火墙规则

1 iptables -F
2 iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
3 iptables -nL INPUT

 

    (5)修改win10客户端,添加代理

1 systemctl stop firewalld.service
2 setenforce 0
3 yum -y install httpd
4 systemctl start httpd
5 netstat -natp | grep 80

 

    (6)在win10客户端访问web服务器进行验证


4. 搭建透明代理
  4.1 搭建步骤

    (1)环境准备

    squid服务器 :双网卡 ens33:192.168.229.60,ens36:12.0.0.1
    web服务器:12.0.0.18(网关为squid代理服务器的ens36)
    Win10客户端:192.168.229.200(网关为squid代理服务器的ens33)


    (2)Squid服务器:双网卡

1 内网ens33: 192.168.229.60  外网ens36: 12.0.0.1
2 
3 cd /etc/sysconfig/network-scripts/
4 cp ifcfg-ens33 ifcfg-ens36
5 vim ifcfg-ens36           #修改IP地址,并注释或者删除DNS与网关
6 systemctl restart network 

 

    (3)修改squid配置文件

1 vim /etc/squid.conf
2 http_access allow all
3 http_access deny all
4 --60行--修改添加提供内网服务的IP地址,和支持透明代理选项transparent
5 http_port 192.168.229.60:3128 transparent
6  
7 systemctl restart squid

 

    (4)squid服务器添加路由转发和iptables规则

 1 #开启路由转发,实现本机中不同网段的地址转发
 2 echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
 3 sysctl -p
 4 <br>#修改防火墙规则
 5 iptables -F
 6 iptables -t nat -F
 7 # 添加防火墙规则(将来源为229网段:80/443端口的流量重定向到3128端口)
 8 iptables -t nat -I PREROUTING -i ens33 -s 192.168.229.0/24 -p tcp --dport 80 -j REDIRECT --to 3128  #用于转发Http协议
 9 iptables -t nat -I PREROUTING -i ens33 -s 192.168.229.0/24 -p tcp --dport 443 -j REDIRECT --to 3128 #用于转发https协议   
10 #如果要进行重启,则需要配置以下规则
11 iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

 

    (5)web服务器

 1 修改IP地址为12.0.0.18,并设置网关为12.0.0.1
 2 并开启httpd服务,之前已安装该服务
 3 
 4 [root@192 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
 5 [root@192 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
 6  
 7 TYPE=Ethernet
 8 PROXY_METHOD=none
 9 BROWSER_ONLY=no
10 BOOTPROTO=static
11 DEFROUTE=yes
12 IPV4_FAILURE_FATAL=no
13 IPV6INIT=yes
14 IPV6_AUTOCONF=yes
15 IPV6_DEFROUTE=yes
16 IPV6_FAILURE_FATAL=no
17 IPV6_ADDR_GEN_MODE=stable-privacy
18 NAME=ens33
19 UUID="4ff14eea-f777-4bc2-b50b-7179db6ba998"
20 DEVICE=ens33
21 ONBOOT=yes
22 IPADDR=12.0.0.18
23 NETMASK=255.255.255.0
24 GATEWAY=12.0.0.1
25 #DNS1=192.168.229.2
26  
27 [root@192 ~]# systemctl restart network
28 [root@localhost ~]# systemctl restart httpd.service   

 

 

    (6)客户端关闭代理并访问web服务器


5. ACL 访问控制

    ACL(Access Control List)访问控制列表,主要用于过滤网络中的流量,是控制访问的一种技术手段。网络设备为了过滤报文,需要配置一系列的匹配条件对报文进行分类,应用在端口上,根据预先设定的策略,对特定端口的流量起到控制作用。
    访问控制列表(ACL)由一组规则组成,在规则中定义允许或拒绝通过路由器的条件
    利用ACL可以对经过路由器的数据包按照设定的规则进行过滤,使数据包有选择的通过路由器,起到防火墙的作用。

    ACL一般只在以下路由器上配置:


  5.1 在配置文件squid.conf中,ACL访问控制的步骤

    通过以下两个步骤来实现:


  5.2 定义访问控制列表

    格式:acl 列表名称 列表类型 列表内容


  5.3 ACL访问控制方式


  5.4 ACL规则优先级

    一个用户访问代理服务器时,Squid会顺序匹配Squid中定义的所有规则列表,一旦匹配成功,立即停止匹配
    所有规则都不匹配时,Squid会使用与最后一条相反的规则


  5.5 常用的ACL列表类型


6. 设置 ACL 访问控制
  6.1 设置步骤

 

    (1)环境准备

    Squid 代理服务器:192.168.229.60
    web服务器: 192.168.229.80
    win10客户端: 192.168.229.200
    使用传统代理方式进行设置ACL访问控制


    (2)定义访问控制列表

 1 方法①:
 2 
 3 vim /etc/squid.conf
 4 ......
 5 acl localhost src 192.168.229.60/32                 #源地址为192.168.229.60
 6 acl MYLAN src 192.168.229.0/24                      #客户机网段
 7 acl destinationhost dst 192.168.229.80/32               #目标地址为192.168.229.80
 8 acl MC20 maxconn 20                         #最大并发连接20
 9 acl PORT port 21                            #目标端口21
10 acl DMBLOCK dstdomain .qq.com                       #目标域,匹配域内所有站点
11 acl BURL url_regex -i ^rtsp:// ^emule://                #以rtsp://.emule://开头的URL,-i表示忽略大小写
12 acl PURL urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$                 #以.mp3、.mp4、.rmvb结尾的URL路径
13 acl WORKTIME time MTWHF 08:30-17:30                 #时间为周一--至周五8:30~17:30,"MTWHF"为每个星期的英文首字母
14  
15 第一条插入:
16 http_access deny localhost

 

 1 方法②:
 2 
 3 mkdir /etc/squid
 4 vim /etc/squid/dest.list
 5 192.168.229.60                               #Squid服务器IP
 6 192.168.200.0/24                             #任意需要的网段
 7  
 8 vim /etc/ squid.conf
 9 .......
10 acl destinationhost dst "/etc/squid/dest.list"                  #调用指定文件中的列表内容
11 http access deny(或allow) destinationhost                #注意,如果是拒绝列表,需要放在http_access allow all前面
12  
13 systemctl restart squid

 

    (3)WEB服务器上安装httpd服务

1 yum install -y httpd
2 systemctl start httpd

 

    (4)Client客户上测试

 

 

 

 

-

 

标签:squid,--,Squid,代理,192.168,代理服务器,Blog.069
来源: https://www.cnblogs.com/cityfell/p/15316688.html