使用Squid部署代理缓存服务(CentOS 7.4)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Squid部署代理缓存服务(CentOS 7.4)相关的知识,希望对你有一定的参考价值。

使用Squid部署代理缓存服务

正向代理不仅可以让用户使用squid代理服务器上网,还可以基于IP地址、网站关键字、下载文件后缀等实现类似行为管控的功能。

反向代理可以大幅提升网站的访问速度,减轻网站服务器的负载压力。

技术分享图片

  • 虚拟机配置

技术分享图片

  • 服务端IP
[[email protected] ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.16.10  netmask 255.255.255.0  broadcast 192.168.16.255
        inet6 fe80::6bea:7e4d:fd17:8225  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:08:3e:47  txqueuelen 1000  (Ethernet)
        RX packets 6  bytes 726 (726.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 266  bytes 25392 (24.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.157  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::119b:77df:e22:7194  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:08:3e:51  txqueuelen 1000  (Ethernet)
        RX packets 38296  bytes 2498587 (2.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1261  bytes 125135 (122.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 服务端安装squid
[[email protected] ~]# yum install -y squid
[[email protected] ~]# systemctl restart squid
[[email protected] ~]# systemctl enable squid
Created symlink from /etc/systemd/system/multi-user.target.wants/squid.service to /usr/lib/systemd/system/squid.service.
  • 标准正向代理——客户端设置,IE选项设置
C:UsersAdministrator>ping www.baidu.com
Ping 请求找不到主机 www.baidu.com。请检查该名称,然后重试。  #外网不通

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

3128端口号是squid标准正向解析的默认监听端口,设置完成之后依然是无法ping通外网的,但是可以打开网页了

技术分享图片

  • 服务端修改squid配置文件
[[email protected] ~]# vim /etc/squid/squid.conf
http_port 10000  #大约第59行,将默认的3128端口修改为10000
[[email protected] ~]# systemctl restart squid
  • 配置selinux
[[email protected] ~]# semanage port -l | grep squid
squid_port_t                   tcp      3128, 3401, 4827
squid_port_t                   udp      3401, 4827
[[email protected] ~]# semanage port -a -t squid_port_t -p tcp 10000
[[email protected] ~]# systemctl restart squid
  • 客户端修改默认端口号

技术分享图片

修改IE选项中的端口号为10000

技术分享图片

重新打开网页,成功

技术分享图片

  • 透明正向代理——客户端还原IE选项
[[email protected] ~]# iptables -t nat -A POSTROUTING -p udp --dport 53 -o ens37 -j MASQUERADE  #DNS流量转发,端口默认53
[[email protected] ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1  #新增此行,允许Squid服务器转发IPv4数据包
[[email protected] ~]# sysctl -p  #让转发参数立即生效
net.ipv4.ip_forward = 1

客户端网关和DNS设置

网关为192.168.16.10
DNS位114.114.114.114
此时ping www.baidu.com进行测试,仍无法ping通,但是可以返回其公网IP了

C:UsersAdministrator>ping www.baidu.com

正在 Ping www.a.shifen.com [111.13.100.92] 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。

111.13.100.92 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
  • 服务端进行修改squid配置文件
[[email protected] ~]# vim /etc/squid/squid.conf
http_port 3128 transparent  #大约第59行,设置为透明转发
cache_dir ufs /var/spool/squid 100 16 256  #大约第62行,去掉前面的#设置缓存的保存路径
[[email protected] ~]# systemctl stop squid  #先停止squid服务
[[email protected] ~]# squid -k parse  #检查主配置文件是否有错误
2018/08/03 21:49:23| Startup: Initializing Authentication Schemes ...
2018/08/03 21:49:23| Startup: Initialized Authentication Scheme ‘basic‘
2018/08/03 21:49:23| Startup: Initialized Authentication Scheme ‘digest‘
2018/08/03 21:49:23| Startup: Initialized Authentication Scheme ‘negotiate‘
2018/08/03 21:49:23| Startup: Initialized Authentication Scheme ‘ntlm‘
2018/08/03 21:49:23| Startup: Initialized Authentication.
2018/08/03 21:49:23| Processing Configuration File: /etc/squid/squid.conf (depth 0)
2018/08/03 21:49:23| Processing: acl localnet src 10.0.0.0/8    # RFC1918 possible internal network
2018/08/03 21:49:23| Processing: acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
2018/08/03 21:49:23| Processing: acl localnet src 192.168.0.0/16        # RFC1918 possible internal network
2018/08/03 21:49:23| Processing: acl localnet src fc00::/7       # RFC 4193 local private network range
2018/08/03 21:49:23| Processing: acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
2018/08/03 21:49:23| Processing: acl SSL_ports port 443
2018/08/03 21:49:23| Processing: acl Safe_ports port 80         # http
2018/08/03 21:49:23| Processing: acl Safe_ports port 21         # ftp
2018/08/03 21:49:23| Processing: acl Safe_ports port 443                # https
2018/08/03 21:49:23| Processing: acl Safe_ports port 70         # gopher
2018/08/03 21:49:23| Processing: acl Safe_ports port 210                # wais
2018/08/03 21:49:23| Processing: acl Safe_ports port 1025-65535 # unregistered ports
2018/08/03 21:49:23| Processing: acl Safe_ports port 280                # http-mgmt
2018/08/03 21:49:23| Processing: acl Safe_ports port 488                # gss-http
2018/08/03 21:49:23| Processing: acl Safe_ports port 591                # filemaker
2018/08/03 21:49:23| Processing: acl Safe_ports port 777                # multiling http
2018/08/03 21:49:23| Processing: acl CONNECT method CONNECT
2018/08/03 21:49:23| Processing: http_access deny !Safe_ports
2018/08/03 21:49:23| Processing: http_access deny CONNECT !SSL_ports
2018/08/03 21:49:23| Processing: http_access allow localhost manager
2018/08/03 21:49:23| Processing: http_access deny manager
2018/08/03 21:49:23| Processing: http_access allow localnet
2018/08/03 21:49:23| Processing: http_access allow localhost
2018/08/03 21:49:23| Processing: http_access deny all
2018/08/03 21:49:23| Processing: http_port 3128 transparent
2018/08/03 21:49:23| Starting Authentication on port [::]:3128
2018/08/03 21:49:23| Disabling Authentication on port [::]:3128 (interception enabled)
2018/08/03 21:49:23| Processing: cache_dir ufs /var/spool/squid 100 16 256
2018/08/03 21:49:23| Processing: coredump_dir /var/spool/squid
2018/08/03 21:49:23| Processing: refresh_pattern ^ftp:          1440    20%     10080
2018/08/03 21:49:23| Processing: refresh_pattern ^gopher:       1440    0%      1440
2018/08/03 21:49:23| Processing: refresh_pattern -i (/cgi-bin/|?) 0    0%      0
2018/08/03 21:49:23| Processing: refresh_pattern .              0       20%     4320
2018/08/03 21:49:23| Initializing https proxy context
[[email protected] ~]# squid -z  #对Squid服务程序的透明代理技术进行初始化,生成缓存目录
[[email protected] ~]# 2018/08/03 21:50:01 kid1| Set Current Directory to /var/spool/squid
2018/08/03 21:50:01 kid1| Creating missing swap directories
2018/08/03 21:50:01 kid1| /var/spool/squid exists
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/00
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/01
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/02
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/03
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/04
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/05
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/06
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/07
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/08
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/09
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/0A
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/0B
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/0C
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/0D
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/0E
2018/08/03 21:50:01 kid1| Making directories in /var/spool/squid/0F
[[email protected] ~]# iptables -t nat -A PREROUTING  -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128  #把所有客户端主机对网站80端口的请求转发至Squid服务器本地的3128端口上
[[email protected] ~]# iptables -t nat -A POSTROUTING -s 192.168.16.0/24 -o ens33 -j SNAT --to 192.168.10.157  #SNAT数据转发。16.0网段为仅主机模式网段,ens33位仅主机网络端口,10.157为桥接网络端口
[[email protected] ~]# systemctl restart squid

此时客户端可以直接ping通了

C:UsersAdministrator>ping www.wuxier.cn

正在 Ping www.wuxier.cn [182.61.34.191] 具有 32 字节的数据:
来自 182.61.34.191 的回复: 字节=32 时间=34ms TTL=50
来自 182.61.34.191 的回复: 字节=32 时间=34ms TTL=50
来自 182.61.34.191 的回复: 字节=32 时间=35ms TTL=50
来自 182.61.34.191 的回复: 字节=32 时间=35ms TTL=50

182.61.34.191 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 34ms,最长 = 35ms,平均 = 34ms
  • 验证确实是通过代理转发,而不是通过服务器来直接上网

①基于客户端的IP地址
服务端配置squid配置文件

[[email protected] ~]# vim /etc/squid/squid.conf
acl client src 192.168.16.21  #新增此行,允许来源是192.168.16.21的客户端上网
http_access allow client  #大约第31行,新增此行,允许刚才设置的客户端192.168.16.21上网
http_access deny all  #大约第32行,新增此行,拒绝其他客户端上网
[[email protected] ~]# systemctl restart squid  #配置完成后重启服务

从客户端(IP为192.168.16.20)重新打开刚才的网页,提示如下图

技术分享图片

将IP修改为192.168.16.21后,网页恢复正常访问,如下图

技术分享图片

说明我们的网络服务是受到了代理服务的限制

②基于网址关键词
修改squid配置文件

[[email protected] ~]# vim /etc/squid/squid.conf
acl deny_keyword url_regex -i wuxi  #新增此行,acl后的相当于是别名,可以自定义。url_regex代表匹配网址,接参数-i代表拒绝网址中包含此关键词的。或者不用参数-i,直接接特定的网址全名,如http://www.wuxier.cn
 http_access deny deny_keyword  #新增此行
[[email protected] ~]# systemctl restart squid  #配置完成后重启服务

当打开www.wuxier.cn的时候无法访问,因为包含了wuxi;而打开www.51cto.com等不包含wuxi的网址时都可以正常访问。

注意:如果网址时https的是经过加密的则是不受限制的

技术分享图片

③禁止下载带有某些后缀的文件
修改squid配置文件

[[email protected] ~]# vim /etc/squid/squid.conf
acl badfile url_regex -i .mp3$ .rar$  #新增此行,代表转义,$代表以某后缀结尾
http_access deny badfile  #新增此行
[[email protected] ~]# systemctl restart squid  #配置完成后重启服务

当下载.rar压缩包的时候无法下载,如下图(如果是使用迅雷等工具会无法进行限制)

技术分享图片

  • 反向代理

首先找到一个网站源服务器的IP地址,通过ping网站域名得到其公网IP,如果通过公网IP能打开其网站,则符合我们的条件。然后编辑Squid服务程序的主配置文件,把端口号3128修改为网站源服务器的地址和端口号,此时正向解析服务会被暂停(它不能与反向代理服务同时使用)。

修改squid配置文件

[[email protected] ~]# vim /etc/squid/squid.conf
http_port 192.168.10.157:80 vhost  #大约第58行,将原来的http_port 3128修改为此配置。192.168.10.157为本机IP。
cache_peer 58.250.26.38 parent 80 0 originserver  #新增此行。缓存节点的IP地址,58.250.26.38即获取的公网IP,定义为我们的一个父节点,端口号为80,它是一台原始的服务器
[[email protected] ~]# systemctl restart squid  #配置完成后重启服务

当我们访问192.168.10.157的时候就能直接访问刚才公网可以访问的网站了,如下图

技术分享图片

以上是关于使用Squid部署代理缓存服务(CentOS 7.4)的主要内容,如果未能解决你的问题,请参考以下文章

Centos7部署squid代理和缓存服务器

在CentOS7上部署squid缓存服务器及代理功能

红帽7 Squid部署代理服务

Centos7 下 squid安装 以及 传统代理和透明代理的部署

CentOS 7安装squid代理服务器

16 使用Squid部署代理缓存服务