配置具有受限访问的Squid代理服务器并设置客户端以使用代理 - 第5部分

在本文中,我们将向您展示如何配置Squid代理服务器,以便授予或限制Internet访问,以及如何配置http客户端,或

Linux基金会认证工程师是一个熟练的专业谁拥有安装,管理,并在Linux系统解决网络服务的专业知识,并负责设计,实施和全系统架构的持续维护。

配置Squid代理服务器

Linux基础认证工程师 - 第5部分

Linux基础认证计划简介。

在本系列的第1部分 ,我们介绍了如何安装Squid,Web客户端的代理缓存服务器。 如果您尚未在系统上安装squid,请在继续之前参考该帖子(下面的链接)。

  1. 第1部分 - 安装网络服务和在引导时配置自动启动

在本文中,我们将向您展示如何配置Squid代理服务器以授予或限制Internet访问以及如何配置http客户端或Web浏览器以使用该代理服务器。

我的测试环境设置

Squid服务器
Operating System :	Debian Wheezy 7.5
IP Address 	 :	192.168.0.15
Hostname	 :	dev2.gabrielcanepa.com.ar
客户机1
Operating System :	Ubuntu 12.04
IP Address 	 :	192.168.0.104 
Hostname	 :	ubuntuOS.gabrielcanepa.com.ar
客户机2
Operating System :	CentOS-7.0-1406
IP Address 	 :	192.168.0.17 
Hostname	 :	dev1.gabrielcanepa.com.ar

让我们记住,简单来说,Web代理服务器是一个(或多个)客户端计算机和某个网络资源之间的中介,最常见的是访问因特网。 换句话说,代理服务器在一侧直接连接到因特网(或连接到互联网的路由器),而在另一侧连接到将通过它访问万维网的客户端计算机的网络。

你可能想知道,为什么要在我的网络基础设施中添加另一个软件?

这里是前3个原因:

从以前的请求Squid存储文件,以加快未来的传输 例如,从互联网上假设客户端1下载的CentOS-7.0-1406-x86_64的-DVD.iso。 客户机程序请求访问同一个文件,Squid可以从它的缓存中的文件传输从网上重新下载它代替。 您可以猜到,您可以使用此功能加快在需要频繁更新某些类型的计算机网络中的数据传输。

2. ACL( 访问控制列表 )允许我们限制访问的网站和/或监视每个用户的访问。 例如,您可以根据星期几或时间或域来限制访问。

3. 绕过网络过滤器是通过使用Web代理的使得可以哪些请求被执行并返回所请求的内容到客户端,而不是直接具有到因特网的客户端请求它。

例如,假设您在CLIENT1登录并想通过贵公司的路由器访问www.facebook.com。 由于该网站可以通过您公司的策略被阻止,而是可以连接到Web代理服务器,并将其请求访问www.facebook.com。 然后,通过Web代理服务器再次向您返回远程内容,绕过您公司的路由器阻止策略。

配置squid - 基础

Squid Web代理服务器的访问控制方案由两个不同的组件组成:

  1. ACL元素是用“ACL”,然后代表类型的是针对任何请求事务执行测试开始指令行。
  2. 访问列表规则包括一个允许拒绝操作后跟一个数字ACL元素,以及用于指示什么动作或限制已被强制执行给定的请求。 它们按顺序检查,并且列表搜索一旦其中一个规则匹配就终止。 如果规则有多个ACL元素,它将实现为布尔AND运算(规则的所有ACL元素必须是匹配,才能使规则成为匹配项)。

squid的主配置文件是/etc/squid/squid.conf中 ,这是很长〜5000行,因为它包括了配置指令和文件。 出于这个原因,我们将创建一个只包含配置指令来为我们提供了一个线路的squid.conf新文件,留下了空或注释行。 为此,我们将使用以下命令。

# mv /etc/squid/squid.conf /etc/squid/squid.conf.bkp

接着,

# grep -Eiv '(^#|^$)' /etc/squid/squid.conf.bkp
OR
# grep -ve ^# -ve ^$ /etc/squid/squid.conf.bkp > /etc/squid/squid.conf
备份Squid配置文件

备份Squid配置文件

现在,打开新创建的squid.conf文件,查找(或添加)以下ACL元素和访问列表。

acl localhost src 127.0.0.1/32
acl localnet src 192.168.0.0/24

上面的两行表示ACL元素的使用的一个基本的例子。

  1. 第一个字,ACL,表示这是一个ACL元素指令。
  2. 第二个字, 本地主机localnet的 ,指定指令的名称。
  3. 第三个单词,SRC在这种情况下,是用来表示地址的客户端的IP地址或地址范围,分别一个ACL元素类型。 您可以通过IP(或主机名,如果您已实施某种DNS解析)或网络地址指定单个主机。
  4. 第四个参数是“ ”的指令过滤参数。

下面的两行是访问列表规则,代表一个明确的实现前面提到的ACL指令。 在几句话,他们表明,如果请求来自本地网络(localnet)HTTP应授予访问权限,或从本地主机 具体什么是允许的本地网络或本地主机地址? 答案是:在localhost和localnet指令中指定的。

http_access allow localnet
http_access allow localhost
Squid ACL允许访问

Squid ACL允许访问列表

在这一点上,你可以以应用所有待定变化重新启动Squid

# service squid restart 		[Upstart / sysvinit-based distributions]
# systemctl restart squid.service 	[systemd-based distributions]

然后在本地网络(192.168.0.104在我们的例子)中配置客户端浏览器通过代理访问Internet,如下所示。

在Firefox中

1.进入编辑菜单并选择选项。

2.点击高级 ,然后在网络选项卡上,最后上设置 ...

3.检查手动配置代理并输入代理服务器的IP地址,并在那里监听连接的端口

在Firefox中配置代理

在Firefox中配置代理

需要注意的是默认的,squid在端口3128听,但你可以通过编辑与HTTP_PORT开始访问列表规则覆盖此行为(默认情况下它读取HTTP_PORT 3128)。

4.单击确定以应用更改,你是好去。

验证客户端是否正在访问Internet

您现在可以通过代理验证您的本地网络客户端是否正在访问Internet,如下所示。

1.在您的客户端,打开一个终端和类型,

# ip address show eth0 | grep -Ei '(inet.*eth0)'

这个命令会显示您的客户端(192.168.0.104中下图)的当前IP地址

2.在您的客户端,使用Web浏览器打开任何网站(www.howtoing.com在这种情况下)。

3.在服务器上运行。

# tail -f /var/log/squid/access.log

你会得到通过Squid被服务请求的实时视图。

检查Squid代理浏览

检查代理浏览

限制客户端访问

现在假设您希望明确拒绝访问该特定客户端IP地址,但仍保持对本地网络其余部分的访问。

1.定义一个新的ACL指令如下(我把它命名为ubuntuOS,但你可以将其命名为任何你想要的)。

acl ubuntuOS src 192.168.0.104

2.添加ACL指令到已经到位在localnet访问列表,而是一个感叹号加上前缀它。 这意味着,“ 允许上网匹配在localnet ACL指令,除非该ubuntuOS指令相匹配的客户 。”

http_access allow localnet !ubuntuOS

3.现在我们需要重新启动Squid,以应用更改。 然后,如果我们尝试浏览到任何网站,我们会发现访问被拒绝。

阻止Internet访问

阻止Internet访问

配置squid - 微调

按域和/或按一天中的时间/星期几限制访问

要限制通过域访问Squid,我们将使用一个ACL指令的dstdomain关键字,如下所示。

acl forbidden dstdomain "/etc/squid/forbidden_domains"

forbidden_​​domains是包含我们希望拒绝访问域的纯文本文件。

在Squid中阻止域

阻止访问域

最后,对于不符合上面指令的请求,我们必须授予对squid的访问权限。

http_access allow localnet !forbidden

或者,也许我们只希望允许在一天的某个时间(10:00至11:00)访问这些网站只在周一(M), 周三(W)周五(F)。

acl someDays time MWF 10:00-11:00
http_access allow forbidden someDays
http_access deny forbidden

否则,将阻止对这些域的访问。

通过用户认证限制访问

Squid支持几种认证机制(Basic,NTLM,Digest,SPNEGO和Oauth)和助手(SQL数据库,LDAP,NIS,NCSA等等)。 在本教程中,我们将使用基本身份验证与NCSA。

添加以下行到你/etc/squid/squid.conf中的文件。

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive on
auth_param basic realm Squid proxy-caching web server for Howtoing's LFCE series
acl ncsa proxy_auth REQUIRED
http_access allow ncsa

:在CentOS 7,Squid的NCSA插件可以在/ usr / lib64目录/Squid/ basic_nsca_auth找到,所以在上面这一行相应的改变。

Squid NCSA认证

启用NCSA验证

几个澄清:

  1. 我们需要告诉Squid的身份验证辅助程序通过指定程序的名称(最有可能的,/ usr / lib目录/Squid/ ncsa_auth/ usr / lib64目录/Squid/ basic_nsca_auth),以及任何命令行选项auth_param指令使用( 在/ etc /Squid/ passwd在这种情况下),如果必要的。
  2. / etc /Squid/ passwd文件是通过htpasswd的创建,一个工具,通过文件管理基本身份验证。 它将允许我们添加一个允许使用squid的用户名列表(及其相应的密码)。
  3. credentialsttl三十分钟需要输入你的用户名和密码,每30分钟(可以指定使用小时时间间隔以及)。
  4. CASESENSITIVE表明,用户名和密码区分大小写。
  5. 境界表示将被用于验证Squid身份验证对话框的文本。
  6. 最后,授予访问权限,只有当代理认证(proxy_auth必填 )成功。

运行以下命令来创建文件,并添加用户gacanepa凭证(省略了-c标志,如果该文件已经存在)。

# htpasswd -c /etc/squid/passwd gacanepa
Squid限制用户

限制Squid对用户的访问

在客户端计算机中打开Web浏览器,并尝试浏览到任何给定的站点。

Squid认证配置

启用S​​quid认证

如果认证成功,则准许对所请求的资源的访问。 否则,访问将被拒绝。

使用缓存加速数据传输

Squid的区别特征之一是将从网络请求的资源高速缓存到磁盘以便加速由相同客户端或其他客户端对这些对象的未来请求的可能性。

添加下面的指令在你的squid.conf文件。

cache_dir ufs /var/cache/squid 1000 16 256
maximum_object_size 100 MB
refresh_pattern .*\.(mp4|iso) 2880

对上述指令的一些澄清。

  1. UFS是Squid存储格式。
  2. 在/ var /缓存/Squid就是缓存文件将被存储的顶级目录。 此目录必须存在,并且可由Squid写入(Squid不会为您创建此目录)。
  3. 1000是这个目录下的使用量(MB)。
  4. 图16是第1级的子目录的数目,而256/ var /线轴/Squid内2级子目录的数目。
  5. 所述maximum_object_size指令指定缓存中允许的对象的最大尺寸。
  6. refresh_pattern告诉squid如何处理特定的文件类型(.MP4.ISO在这种情况下)和它应该多久请求的对象存储在高速缓存(2880分钟= 2天)。

在第一和第二2880是下限和上限分别在对象上多久没有明确的到期时间将被视为最近,并因此将被缓存送达,而0%是对象的年龄,因为(时间的百分比最后修改),没有明确的到期时间的每个对象将被认为是最近的。

案例研究:从2个不同的客户端下载.mp4文件并测试缓存

第一个客户端(IP 192.168.0.104)下载次数以2分52秒71 MB .MP4文件。

在Linux中设置Squid缓存

在Squid上启用缓存

第二个客户端(IP 192.168.0.17)下载1.4秒内同一个文件!

验证Squid缓存

验证Squid缓存

这是因为文件是从在第二种情况下, Squid缓存 (通过TCP_HIT / 200表示)提供服务,而不是在第一个实例中,当它是直接从互联网(通过TCP_MISS / 200表示)下载。

运气的关键字,与200 HTTP响应代码一起,表明该文件已成功服务两次,但缓存被击中,分别错过。 当某个请求由于某种原因无法由缓存服务时,Squid会尝试从Internet提供它。

Squid HTTP代码

Squid HTTP代码

结论

在这篇文章中,我们已经讨论了如何建立一个网页Squid缓存代理 您可以使用代理服务器使用选定的条件过滤内容,并且还可以减少延迟(由于相同的传入请求是从缓存提供的,缓存距离客户端而不是实际提供内容的Web服务器更快)数据传输)和网络流量(减少使用的带宽量,如果你支付流量,这将节省您的钱)。

您可能希望参考Squid的网站做进一步的文档(请务必同时检查维基),但不要犹豫,如果您有任何问题或意见,请联系我们。 我们将非常高兴听到你的声音!