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 设置步骤
squid 作为一款服务器代理工具,可以缓存网页对象,减少重复请求,从而达到加快网页访问速度,隐藏客户机真实IP,更为安全。
Squid主要提供缓存加速、应用层过滤控制的功能。
- 代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址
- 将获得的网页数据(静态 web元素)保存到缓存中并发给客户机,以便下次请求相同的数据时快速响应
当我们客户机通过squid代理去访问web页面时,指定的代理服务器会先检查自己的缓存,若是缓存中有我们客户机需要的页面,那么squid服务器将直接把缓存中的页面内容返回给客户机
如果缓存中没有客户端请求的页面,那么squid代理服务器就会向internet发送访问请求,获得返回的web页面后,将网页的数据保存到缓存中并发送给客户机。
由于客户机的web访问请求实际上是squid代理服务器来代替完成的,所以隐藏了用户的真实IP地址,从而起到一定的保护作用。
另一方面,squid也可以针对要访问的目标、客户机的地址、访问的时间段进行过滤控制。
- 传统代理:适用于internet,需在客户机指定代理服务器的地址和端口
- 透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将web访问重定向给代理服务器处理
- 反向代理:如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的web服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存(静态)在本地,供下一个请求者使用
根据实现的方式不同,基本可以分为传统代理和透明代理两种方式:
- 传统代理:也就是普通的代理服务,需要我们客户端在浏览器、聊天工具等一些程序中设置代理服务器的地址和端口,然后才能使用代理来访问网络,这种方式相比较而言比较麻烦,因为客户机还需手动指定代理服务器,所以一般用于Internet环境。
- 透明代理:与传统代理实现的功能是一样的,区别在于客户机不需要手动指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将web访问重定向,实际上仍然交给代理服务器来处理,重定向的过程完全是由squid服务器进行的,所以对于客户机来说,甚至不知道自己使用了squid代理服务,因此呢,我们称之为透明模式。
- 透明代理多用于局域网环境,如在Linux网关中启用透明代理后,局域网主机无须进行额外设置就能享受更好的上网速度。
- 传统模式:
此类工作模式为三种模式中最简单的构成,对客户端配置较不友好,主要功能为正向代理,加速内网用户的访问速度,减少出口流量。
(如果搭建公用的代理服务器,用这样方式,需要用户进入其本机的网络设置中,设置搭建了squid服务器的IP和端口)
- 透明模式:
此类工作模式配置较为复杂,同样也是实现正向代理需要借助防火墙对端口进行重定向操作。但是对于客户端来说配置较为友好无需进行任何配置即可使用代理功能,主要功能为加速内网用户的访问速度,减少出口流量。
(如果搭建内网访问外网的代理服务器,建议使用这种,无需到客户端设置代理服务器的IP和端口,自动实现squid代理)
- 反向代理模式:
反向代理模式位于本地WEB服务器和公网之间,处理公网用户发起的请求,并代理至内网服务中,有效减轻后端真是服务器的压力,增加服务器的并发处理能力。
- 提高web访问速度
- 隐藏客户机的真实IP地址
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
(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服务器进行验证
(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服务器
ACL(Access Control List)访问控制列表,主要用于过滤网络中的流量,是控制访问的一种技术手段。网络设备为了过滤报文,需要配置一系列的匹配条件对报文进行分类,应用在端口上,根据预先设定的策略,对特定端口的流量起到控制作用。
访问控制列表(ACL)由一组规则组成,在规则中定义允许或拒绝通过路由器的条件
利用ACL可以对经过路由器的数据包按照设定的规则进行过滤,使数据包有选择的通过路由器,起到防火墙的作用。
ACL一般只在以下路由器上配置:
- 内部网和外部网的边界路由器。
- 两个功能网络交界的路由器。
5.1 在配置文件squid.conf中,ACL访问控制的步骤
通过以下两个步骤来实现:
- 使用acl配置项定义需要控制的条件
- 通过http_access配 置项对已定义的列表做“允许"或“拒绝”访问的控制
格式:acl 列表名称 列表类型 列表内容
- 列表名称: 名称自定义,相当于给acl起个名字
- 列表类型: 必须使用squid预定义的值,对应不同类别的控制条件
- 列表内容: 是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格为分
- 隔,为“或"的关系)
- 根据源地址、目标URL、文件类型等定义列表
- acl 列表名称 列表类型 列表内容…
- 针对已定义的acl列表进行限制
- http_access allow或deny列表名称…
一个用户访问代理服务器时,Squid会顺序匹配Squid中定义的所有规则列表,一旦匹配成功,立即停止匹配
所有规则都不匹配时,Squid会使用与最后一条相反的规则
- src →>源地址
- dst >自标地址
- port→>端口
- dstdomain>目标域
- time →>访问时间
- maxconn →最大并发连接
- ourl_regex→目标URL地址
- Urlpath_regex→整个目标URL路径
(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