《Squid中文权威指南》续(五)
作者:社会逼我爱上Money_717 | 来源:互联网 | 2017-09-03 21:34
《Squid中文权威指南》续(五)--Linux企业应用-Linux服务器应用信息,下面是详情阅读。
反斜杠对这个"."进行转义。该正则表达式匹配以.jpg 结尾的任意字符串。假如你不使用^或$字符,正则表达式的行为就象标准子串搜索。它们匹配在字符串里任何位置出现的单词或词组。
对所有的squid 正则表达式类,你可以使用大小写敏感的选项。匹配是默认大小写敏感的。为了大小写不敏感,在ACL 类型后面使用-i 选项。例如:
acl Foo url_regex -i ^http://www
6.1.1.5 TCP 端口号
使用对象:port,myport
该类型是相对的。值是个别的端口号或端口范围。回想一下TCP 端口号是16 位值,这样它的值必须大于0 和小于65536。如下是一些示例:
acl Foo port 123
acl Bar port 1-1024
6.1.1.6 自主系统号
使用对象:src_as,dst_as
Internet 路由器使用自主系统(AS)号来创建路由表。基本上,某个AS 号指向被同一组织管理的IP 网络范围。例如,我的ISP 分配了如下网络块:134.116.0.0/16, 137.41.0.0/16, 206.168.0.0/16,和其他更多。在Internet 路由表里,这些网络被公布为属于AS 3404。当路由器转发包时,它们典型的选择经过最少AS 的路径。假如这些对你不重要,请不必关注它们。AS 基础的ACL 仅仅被网络gurus 使用。
如下是基于AS 的类型如何工作的:当squid 首先启动时,它发送一条特殊的查询到某个whois 服务器。查询语句基本是:“告诉我哪个IP 网络属于该AS 号”。这样的信息被RADB收集和管理。一旦Squid 接受到IP 网络列表,它相似的将它们作为IP 基础的ACL 对待。
基于AS 的类型仅仅在ISP 将他们的RADB 信息保持与日更新时才工作良好。某些ISP更新RADB 比其他人做得更好;而许多根本不更新它。请注意squid 仅仅在启动或者reconfigure 时才将AS 号转换为网络地址。假如ISP 更新了它的RADB 接口,除非你重启或者重配置squid,squid 不会知道这个改变。
另外的情况是,在你的squid 启动时,RADB可能不可到达。假如Squid 不能联系上RADB服务器,它从访问控制配置里删除AS 接口。默认的whois 服务器是whois.ra.net,对许多用户来说太遥远了而不可信赖。
6.1.2 ACL 类型
现在我们能把焦点放在ACL 类型自身上。我在这里按照重要性的降序来列举它们。
6.1.2.1 src
IP 地址在访问控制元素里是最普遍使用的。大部分站点使用IP 地址来控制客户允许或不允许访问Squid。src 类型指客户源IP 地址。也就是说,当src ACL 出现在访问控制列表里时,squid 将它与发布请求的客户IP 地址进行比较。
正常情况下你允许来自内网中主机的请求,并阻塞其他的。例如,假如你的单位使用192.168.0.0 子网,你可以这样指定ACL:
acl MyNetwork src 192.168.0.0
假如你有许多子网,你能在同一个acl 行里面列举它们:
acl MyNetwork src 192.168.0.0 10.0.1.0/24 10.0.5.0/24 172.16.0.0/12
squid 有许多其他ACL 类型用以检查客户地址。srcdomain 类型比较客户的完整可验证域名。它要求反向DNS 查询,这可能会延缓处理该请求。srcdom_regex ACL 是类似的,但它允许你使用正则表达式来匹配域名。最后,src_as 类型比较客户的AS 号。
6.1.2.2 dst
dst 类型指向原始服务器(目标)IP 地址。在某些情况下,你能使用该类型来阻止你的用户访问特定web 站点。然而,在使用dst ACL 时你须谨慎。大部分squid 接受到的请求有原始服务器主机名。例如:
GET http://www.web-cache.com/ HTTP/1.0
这里,www.web-cache.com 是主机名。当访问列表规则包含了dst 元素时,squid 必须找到该主机名的IP 地址。假如squid 的IP 缓存包含了该主机名的有效接口,这条ACL 被立即检测。否则,在DNS 查询忙碌时,squid 会延缓处理该请求。这对某些请求来说会造成延时。
为了避免延时,你该尽可能的使用dstdomain ACL 类型来代替dst。
如下是简单的dst ACL 示例:
acl AdServers dst 1.2.3.0/24
请注意,dst ACL 存在的问题是,你试图允许或拒绝访问的原始服务器可能会改变它的IP 地址。假如你不关心这样的改变,那就不必麻烦去升级squid.conf。你可以在acl 行里放上主机名,但那样会延缓启动速度。假如你的ACL 需要许多主机名,你也许该预处理配置文件,将主机名转换成IP 地址。
6.1.2.3 myip
myip 类型指Squid 的IP 地址,它被客户连接。当你在squid 机上运行netstat -n 时,你见到它们位于本地地址列。大部分squid 安装不使用该类型。通常所有的客户连接到同一个IP 地址,所以该ACL元素仅仅当系统有多个IP 地址时才有用。
为了理解myip为何有用,考虑某个有两个子网的公司网络。在子网1的用户是程序员和工程师。子网2包括会计,市场和其他管理部门。这样情况下的squid 有三个网络接口:一个连接子网1,一个连接子网2,第三个连接到外部因特网。
当正确的配置时,所有在子网1 的用户连接到squid 位于该子网的IP 地址,类似的,子网2 的用户连接到squid 的第二个IP 地址。这样你就可以给予子网1 的技术部员工完全的访问权,然而限制管理部门的员工仅仅能访问工作相关的站点。
ACL 可能如下:
acl Eng myip 172.16.1.5
acl Admin myip 172.16.2.5
然而请注意,使用该机制你必须特别小心,阻止来自某个子网的用户连接squid 位于另一子网的IP 地址。否则,在会计和市场子网的聪明的用户,能够通过技术部子网进行连接,从而绕过你的限制。
6.1.2.4 dstdomain
在某些情况下,你发现基于名字的访问控制非常有用。你可以使用它们去阻塞对某些站点的访问,去控制squid 如何转发请求,以及让某些响应不可缓存。dstdomain 之所以非常有用,是因为它检查请求url 里的主机名。
然而首先我想申明如下两行的不同:
acl A dst www.squid-cache.org
acl B dstdomain www.squid-cache.org
A 实际上是IP 地址ACL。当Squid 解析配置文件时,它查询www.squid-cache.org 的IP地址,并将它们存在内存里。它不保存名字。假如在squid 运行时IP 地址改变了,squid 会继续使用旧的地址。
然而dstdomain ACL 以域名形式存储,并非IP 地址。当squid 检查ACL B 时,它对URL的主机名部分使用字符串比较功能。在该情形下,它并不真正关心是否www.squid-cache.org
的IP 地址改变了。
使用dstdomain ACL 的主要问题是某些URL 使用IP 地址代替主机名。假如你的目标是使用dstdomain ACL 来阻塞对某些站点的访问,聪明的用户能手工查询站点的IP 地址,然后将它们放在URL 里。例如,下面的2 行URL 带来同样的页面:
http://www.squid-cache.org/docs/FAQ/
http://206.168.0.9/docs/FAQ/
第一行能被dstdomain ACL 轻易匹配,但第二行不能。这样,假如你依靠dstdomain ACL,你也该同样阻塞所有使用IP 地址代替主机名的请求。请见6.3.8 章节。
6.1.2.5 srcdomain
srcdomain ACL 也有点麻烦。它要求对每个客户IP 地址进行所谓的反向DNS 查询。技术上,squid 请求对该地址的DNS PTR 记录。DNS 的响应--完整可验证域名(FQDN)--是squid匹配ACL 值的东西。(请参考O'Reilly's DNS and BIND 找到更多关于DNS PTR 记录的信息)使用dst ACL,FQDN 查询会导致延时。请求会被延缓处理直到FQDN 响应返回。FQDN响应被缓存下来,所以srcdomain 查询通常仅在客户首次请求时延时。
不幸的是,srcdomain 查询有时不能工作。许多组织并没有保持他们的反向查询数据库与日更新。假如某地址没有PTR 记录,ACL 检查失败。在该情形下,请求可能会延时非常长时间(例如2 分钟)直到DNS 查询超时。假如你使用srcdomain ACL,请确认你自己的DNS in-addr.arpa 区域配置正确并且在工作中。假如这样,你可以使用如下的ACL:
acl LocalHosts srcdomain .users.example.com
6.1.2.6 port
你很可能想使用port ACL 来限制对某些原始服务器端口号的访问。就像我即将讲到的,squid 其实不连接到某些服务,例如email 和IRC 服务。port ACL 允许你定义单独的端口或端口范围。例如:
acl HTTPports port 80 8000-8010 8080
HTTP 在设计上与其他协议类似,例如SMTP。这意味着聪明的用户通过转发email 消息到SMTP 服务器能欺骗squid。Email 转发是垃圾邮件的主要原因之一,我们必须处理它们。历史上,垃圾邮件有真正的邮件服务器。然而近来,越来越多的垃圾邮件制造者使用开放HTTP 代理来隐藏他们的踪迹。你肯定不想Squid
推荐阅读
-
篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ...
[详细]
蜡笔小新 2023-12-14 09:50:34
-
本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ...
[详细]
蜡笔小新 2023-12-14 12:43:39
-
-
本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ...
[详细]
蜡笔小新 2023-12-14 17:15:19
-
本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ...
[详细]
蜡笔小新 2023-12-14 14:54:09
-
这篇文章讲述了一个35岁程序员连续被两家公司裁掉的故事,他在遭遇中年危机后成功入职事业单位,并分享了入职后的福利。文章探讨了程序员在互联网行业中的竞争力下降的原因。 ...
[详细]
蜡笔小新 2023-12-14 12:47:21
-
本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ...
[详细]
蜡笔小新 2023-12-14 12:05:06
-
本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ...
[详细]
蜡笔小新 2023-12-14 11:22:08
-
本文介绍了Python版Protobuf的安装和使用方法,包括版本选择、编译配置、示例代码等内容。通过学习本教程,您将了解如何在Python中使用Protobuf进行数据序列化和反序列化操作,以及相关的注意事项和技巧。 ...
[详细]
蜡笔小新 2023-12-14 09:27:58
-
本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ...
[详细]
蜡笔小新 2023-12-13 17:45:15
-
本文介绍了2019年上半年内蒙古计算机软考考试的报名通知和考试时间。考试报名时间为3月1日至3月23日,考试时间为2019年5月25日。考试分为高级、中级和初级三个级别,涵盖了多个专业资格。报名采取网上报名和网上缴费的方式进行,报考人员可登录内蒙古人事考试信息网进行报名。详细内容请点击查看。 ...
[详细]
蜡笔小新 2023-12-13 16:22:51
-
转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎 ...
[详细]
蜡笔小新 2023-12-13 16:11:00
-
本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ...
[详细]
蜡笔小新 2023-12-13 13:44:16
-
闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ...
[详细]
蜡笔小新 2023-12-13 10:46:54
-
本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ...
[详细]
蜡笔小新 2023-12-13 10:00:57
-
本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ...
[详细]
蜡笔小新 2023-12-12 20:56:55
-
社会逼我爱上Money_717
这个家伙很懒,什么也没留下!