使用Squid部署代理缓存服务

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

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

  • 虚拟机配置
  • 服务端IP
[root@mail ~]# 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,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
[root@mail ~]# yum install -y squid
[root@mail ~]# systemctl restart squid
[root@mail ~]# systemctl enable squid
Created symlink from /etc/systemd/system/multi-user.target.wants/squid.service to /usr/lib/systemd/system/squid.service.
  • 标准正向代理——客户端设置,IE选项设置
C:\Users\Administrator>ping www.baidu.com
Ping 请求找不到主机 www.baidu.com。请检查该名称,然后重试。  #外网不通


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

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

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

重新打开网页,成功

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

客户端网关和DNS设置

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

C:\Users\Administrator>ping www.baidu.com

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

111.13.100.92 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
  • 服务端进行修改squid配置文件
[root@mail ~]# vim /etc/squid/squid.conf
http_port 3128 transparent  #大约第59行,设置为透明转发
cache_dir ufs /var/spool/squid 100 16 256  #大约第62行,去掉前面的#设置缓存的保存路径
[root@mail ~]# systemctl stop squid  #先停止squid服务
[root@mail ~]# 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
[root@mail ~]# squid -z  #对Squid服务程序的透明代理技术进行初始化,生成缓存目录
[root@mail ~]# 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
[root@mail ~]# iptables -t nat -A PREROUTING  -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128  #把所有客户端主机对网站80端口的请求转发至Squid服务器本地的3128端口上
[root@mail ~]# 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为桥接网络端口
[root@mail ~]# systemctl restart squid

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

C:\Users\Administrator>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配置文件

[root@mail ~]# 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行,新增此行,拒绝其他客户端上网
[root@mail ~]# systemctl restart squid  #配置完成后重启服务

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

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

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

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

[root@mail ~]# 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  #新增此行
[root@mail ~]# systemctl restart squid  #配置完成后重启服务

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

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

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

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

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

  • 反向代理

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

修改squid配置文件

[root@mail ~]# 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,它是一台原始的服务器
[root@mail ~]# systemctl restart squid  #配置完成后重启服务

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

使用Squid部署代理缓存服务CentOS 7.4的更多相关文章

  1. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. 详解前端HTML5几种存储方式的总结

    本篇文章主要介绍了前端HTML5几种存储方式的总结 ,主要包括本地存储localstorage,本地存储sessionstorage,离线缓存(application cache),Web SQL,IndexedDB。有兴趣的可以了解一下。

  3. ios – NSURLRequest产生与HTTP代理客户端不同的结果

    我也从iOS设备和模拟器也收到失败的消息.UPDATE删除NSURLRequest缓存,如here推荐,但仍然无法正常工作.和here.UPDATE试图删除所有凭据,如here,但没有帮助,没有发现任何凭据.解决方法看起来当您收到HTTP302和新的位置网址时,iOS会通过此URL自动获取页面,因此我猜您的响应实际上是重定向页面的HTML内容.请验证.更新:

  4. ios – 绕过http响应头缓存控制:如何设置缓存过期?

    来自服务器的所有http响应都带有标题,通知我们的应用程序不缓存响应:因此,如果您使用默认缓存策略“NSURLRequestUseProtocolCachePolicy”进行NSUrlRequests,则应用程序将始终从服务器加载数据.然而,我们需要缓存响应,明显的解决办法是将这些头设置为一段时间,例如(在后端),设置为10秒.但是我对解决方案感兴趣,如何绕过此策略并缓存每个请求10秒.为此,您需

  5. ios – 如何设置NSURLRequest缓存过期?

    我使用AFNetworking,需要在一个响应中缓存数据几分钟.所以我在应用程序委托中设置NSUrlCache,然后在我的请求中设置它:如何设置到期日期:如果数据在超过n分钟前加载,请从服务器询问响应,而不是从磁盘?

  6. ios – UITextFieldDelegate vs UITextField控件事件

    处理编辑开始或编辑结束的相同问题.它可以通过适当的委托方法或适当的事件来完成.如果控件事件可以进行必要的工作,那么textField代理是什么?

  7. swift详解之十一------------协议、委托(代理)模式

    协议、委托(代理)模式注:本小节总结协议以及依靠协议实现委托,这将在以后经常被使用。很简单的例子说明下,在协议中用static在实现类里可以用static或者class在协议中使用mutating变异方法。然后他就一共实现了两个协议,一个sayHello一个hmtl的这时候这两个方法就都可以用了当然我们的协议也是可以继承的。

  8. Swift 委托/代理设计模式

    Swift中的委托/代理模式与object-c的代理模式基本一致。代理模式的基本思想就是将我需要来完成的工作交给(委托给)另一个有我所规定的做这项工作能力的人来处理。代理模式的实现需借助于我们上一篇文章所讲的协议。比如说我找到了玛雅房屋让他们去帮我租租房。我只需要告诉他们我要一个大致什么位置,多大,什么类型,价格范围等,他们就可以帮我去租房。玛雅房屋就是接受委托的对象,因为他有满足我要求的能力。

  9. Swift实现委托代理的N种方式

    首先理清概念,delegate只是一种模式理念,不是具体方法。OK1.extension继承法:赋予某根类扩展“空方法”,使其子类继承后可重写成为代理。就要你成为我的奴隶2.protocal协议法:只要实现了指定protocal即可成为代理下蛋的鸡就是好鸡3.闭包+Tuple代理:swift中方法也是firstclassvalue这不是人,这不是妖,这是人妖4.继承NSObject使用methodForSelector,使用OC中NSObject提供的的“反射”机制完成调用无耻下作的典范

  10. Swift:界面传值大全

    声明了代理属性之后,我们需要在处理界面跳转(返回)的方法中处理协议传值的逻辑了。

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部