网站搜索

如何在 Linux 中使用 Squid 缓存和 Cisco 路由器控制 Web 流量


网络中的一项重要任务是控制和管理员工的上网流量,有很多解决方案可以处理这个问题,最好的解决方案之一是在 Linux 机器上使用鱿鱼缓存。 Squid 可以检查、限制和缓存从一个网络到另一个网络的网络流量,例如从 LAN 到 Internet。

有几种方法可以将客户端的 Web 请求重定向到 Squid 机器,在本文中,我们将向您展示如何使用 WCCP 协议将 Web 流量从 CISCO 路由器重定向到 Squid 缓存机器。

下图是一个基本场景的示例。

正如你在上图中看到的,所有客户端的网络流量首先进入Cisco路由器(这是他们的默认网关),然后路由器默默地将数据包重定向到squid机器,现在squid可以发挥它的作用,主要作用是缓存网页内容,根据域、时间间隔、IP 地址、文件大小等限制访问。

我们分两个主要步骤回顾这个场景的配置,首先我们应该安装和配置squid和Linux,然后配置路由器以使用WCCP协议将网络流量数据包重定向到squid。

测试环境

在这种情况下,我使用CENTOS 6.5作为我的LINUX服务器,使用Cisco 2691作为我的路由器系统。

Operating System: CENTOS 6.5
Application: Squid
Router: Cisco 2691

第1步:安装Squid缓存

Squid 在 CENTOS 的默认存储库中可用,我们首先使用可爱的 yum 命令安装它,然后启动它们的服务,最后设置自动启动鱿鱼服务。

yum -y install squid
service squid start
chkconfig squid on

第2步:准备Squid缓存

现在我们必须改变centos操作系统的一些默认行为,我们需要启用数据包转发并禁用反向路径过滤器(RPF),我们启用数据包转发让centos充当透明转发器(就像一个透明转发器) 路由器)。

让我更详细地解释一下,当流量进入 centos 时,它有源地址和目标地址,例如,当客户端在他/她的浏览器上输入 www.example.com 时,会生成一个 http 请求数据包,并且它会生成一个 http 请求数据包。具有客户端计算机的源 IP 地址(例如 192.168.1.20)和 example.com 服务器的目标 IP 地址(例如 2.2.2.2)。

因此,当centos收到数据包时,它会检测为错误数据包,因为centos IP地址不是数据包的目标地址,出于安全原因,centos会丢弃该数据包,但我们希望squid以透明模式运行。我们通过启用数据包转发功能将这种情况告诉centos。

接下来我们应该禁用反向路径过滤,让centos接受squid机器无法访问的数据包或没有squid机器同一子网ip地址的数据包。

nano /etc/sysctl.conf
net.ipv4.ip_forward = 1 #set to 1 for enable the packet forwarding feature
net.ipv4.conf.default.rp_filter = 0 # set to 0 for disable the reverse path filter behavior

接下来我们需要在CENTOS机器上创建一个GRE接口,目的是什么?让我解释一下,WCCP协议通过GRE隧道工作,这意味着路由器和Squid之间的语言是GRE,所以centos需要有一个GRE接口来进行解封装 GRE 数据包。

我们应该在“/etc/sysconfig/network-script/ifcfg-gre0”路径中创建GRE接口的配置文件。

ifcfg-gre0配置文件中输入以下代码。

DEVICE=gre0
BOOTPROTO=static
IPADDR=10.0.0.2         #unused ip address in your network
NETMASK=255.255.255.252
ONBOOT=yes
IPV6INIT=no

创建 GRE 接口后,我们需要重新启动网络服务。

service network restart

第三步:配置Squid缓存

我们需要告诉squid接受来自路由器的WCCP数据包。在/etc/squid/squid.conf文件中输入以下代码。

http_port 3128 intercept                 # Define SQUID listening port
wccp2_router 192.168.1.254          #ip address of the router
wccp2_forwarding_method gre
wccp2_return_method gre
wccp2_service standard 0

保存配置文件并重新启动squid服务。

service squid restart

Squid 监听 3128 端口的数据包,但我们数据包的目标端口号是 80,因此将目标端口 80 更改为 3128<,我们需要在CENTOS集成防火墙(名为iptable)上创建NAT规则。

iptables -t nat -A PREROUTING -i gre0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -j MASQUERADE

第 4 步:思科路由器配置

首先我们应该在思科路由器上启用WCCP

R1(config)# ip wccp version 2
Then we must use an ACL for introducing SQUID cache machine to router
R1(config)# ip access-list standard SQUID-MACHINE
R1(config-std-nacl)# permit host 192.168.1.10

接下来,我们为两个不同的目的定义另一个访问列表,首先,我们应该排除通过 WCCP 协议重定向的 SQUID 流量(如果不是,我们就会陷入无限循环!!),其次我们定义我们希望哪些LAN流量通过WCCPSQUID

R1(config)#ip access-list LAN-TRAFFICS
R1(config-ext-nacl)#deny ip host 192.168.1.10 any                            #Prevent SQUID to get in loop
R1(config-ext-nacl)#permit tcp 192.168.1.0 0.0.0.255 any equal www           #define LAN Traffics

创建访问列表后,我们必须在路由器上配置 WCCP 协议。

R1(config)# ip wccp web-cache redirect-list LAN-TRAFFIC group-list SQUID-MACHINE

一切都准备好了最后一步,我们必须告诉路由器它必须使用其 WCCP 配置在哪个/哪些接口中重定向流量。

R1(config)#interface fastEthernet 0/0
R1((config-if)# ip wccp web-cache redirect in

概括

现在是时候将所有命令和文本总结为几行以便更好地理解,根据场景,我们将员工上网数据包(在 TCP 端口 80 上)从 ROUTER(即默认网关)重定向客户端)使用 WCCP 协议发送到鱿鱼缓存机。

所有这些过程都是悄然发生的,客户端无需进行任何额外配置。因此我们可以对 LAN 中的 Web 流量进行控制和设置策略。例如,我们可以在有限的时间内获得网络冲浪访问权限、限制最大下载大小、定义自定义黑名单和白名单、生成互联网活动使用情况的完整报告等。

在这种情况下,有趣的事实之一是,当鱿鱼机器出现故障时,路由器会检测到此问题并停止将数据包重定向到它,这样您就可以享受网络中的零停机时间。

如果您对本文有任何疑问,请通过下面的评论框留言回复。