云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

域名注册_mysql清空数据库所有表_企业0元试用

小七 141 0

我们如何制定防火墙规则

最近,我们推出了防火墙规则,这是一个新功能,它允许您构造针对HTTP请求执行复杂匹配的表达式,然后选择如何处理该流量。当然,作为防火墙功能,您可以阻止流量。我们在防火墙规则中支持的表达式以及对应用顺序的强大控制允许复杂的新行为。在在这篇博客文章中,我讲述了Cloudflare的页面规则机制以及防火墙规则是如何形成的。在此过程中,我将了解导致我们在中构建新匹配引擎的技术选择铁锈,铁锈Cloudflare FirewallCloudflare的演进为web应用程序提供了两种类型的防火墙,一种是WAF形式的受管防火墙,我们在其中为您编写和维护规则,以及一个可配置的防火墙,您可以在其中编写和维护规则。在本文中,我们将关注可配置的防火墙。一个最早的Cloudflare防火墙功能之一是IP访问规则。它可以追溯到Cloudflare防火墙的最早版本,并允许您阻止来自特定IP的流量地址:如有要求IP等于203.0.113.1然后阻止请求,攻击者和垃圾邮件发送者经常从给定的网络发起攻击我们还引入了ASN匹配c能力:如有要求那么IP属于ASN 64496阻止请求我们还允许阻止由CIDR符号定义的地址范围,当IP太具体,ASN也太具体时宽:如有要求IP在203.0.113.0/24范围内,那么阻塞请求阻塞并不是您可能需要的唯一操作,其他操作也是如此可用:Allowlist=不应用其他防火墙规则并允许请求pass this part of the firewallChallenge=发出一个验证码,如果这是通过的,则允许请求,否则拒绝。这将用于确定请求是否来自人工操作员JavaScript challenge=发出一个自动JavaScript质询,如果该请求被传递,则允许请求。这将用于确定请求是否来自简单的无状态bot(可能是wget或curl脚本)Block=deny requestCloudflare也有页面规则。页面规则允许您匹配完整的uri,然后执行诸如重定向之类的操作,或者提高可以被认为是防火墙的安全级别功能:如果需要URI匹配/nullroute,然后重定向到在HTTP报头中添加了GeoIP信息,防火墙被扩展到包括如果有要求IP地址源于county GB,然后是CAPTCHA,2014年之前Cloudflare中存在上述所有请求,然后在2016年,我们开始确定最常见的防火墙功能(根据客户支持票证和付费客户的反馈),并提供自助解决方案。根据分析,我们在2016年末增加了三项新功能:速率限制、用户代理规则和区域封锁。同时Cloudflare自动停止非常大的拒绝服务攻击,速率限制允许客户停止他们真正关心的较小的攻击,但这些攻击的容量足够低,因此Cloudflare的DDoS防御能力没有做到这一点应用。如果请求方法是POST,请求URI匹配/wp admin/索引.php响应状态码是403,在15分钟内会出现3个以上这样的请求阻塞2小时的流量用户代理规则很简单:如果请求用户代理是"假用户代理",那么验证请求区域锁定,但是这是第一个默认的拒绝功能。Cloudflare防火墙可以被认为是"允许所有流量,除非存在阻止它的规则"。区域锁定则相反,"对于给定的URI,阻止所有流量,除非存在允许它的规则"。区域锁定允许客户阻止对除少数IP地址或IP范围之外的所有公共网站的访问。例如,许多客户希望对登台网站的访问仅限于他们的office IP地址。如果请求URI匹配https://staging.example.com/并在203.0.113.0/24中请求IP,然后最终阻止请求,企业客户还可以联系Cloudflare,并在WAF中为他们创建真正的定制规则引擎。看到了吗问题防火墙很好的解决了简单的问题,但是它不能完全满足我们的需求顾客。每个人所有的防火墙功能都针对单一属性,接口和实现反映了这一点。虽然Cloudflare防火墙在每个问题出现时都能解决一个问题,但这些都不能协同工作。2017年末,您可以将防火墙功能总结为:您可以根据任何标准阻止任何攻击流量,只要您只选择其中之一:IPCIDRASNCountryUser AgentURIWe看到了问题,但如何解决它?我们把防火墙规则一分为二方法:查找匹配字符串模式匹配查找匹配包括IP、CIDR、ASN、国家和用户代理规则。我们将在我们的全球分布式密钥/值数据存储Quicksilver中创建一个密钥,并将该操作存储在值:键=专区::203.0.113.1块值=请求时网站接收到时,我们查看发出请求的客户端的IP地址,构造密钥并执行查找。如果存储区中存在密钥,那么该值将告诉我们要执行的操作,在本例中,如果客户端IP为203.0.113.1,那么我们将阻止请求。查找搭配是工作的乐趣,它是O(1)复杂性,这意味着单个请求将只对IP规则执行一次查找,而不管客户有多少个IP规则。虽然大多数客户都有一些规则,但有些客户有成百上千的规则(通常是通过将fail2ban或类似的方法与Cloudflare API调用结合起来自动创建的),当您只查找单个值时,查找非常有效。如果您需要组合IP和用户代理,我们将需要生成将这些值组合在一起的密钥。这会极大地增加所需的关键点数量发布.String模式匹配发生在需要URI匹配的地方。对于我们的页面规则特性,这意味着将所有页面规则组合成一个正则表达式,我们将在处理请求。如果页面规则的顺序是:Match*/wp admin/索引.php然后阻止然后匹配*/xmlrpc.php文件然后这些块被转换成:^(?)?(?:.*/wp管理员/索引.php))|(?(?:.*/xmlrpc.php文件))$是的,你读得对。每个页面规则按执行顺序附加到一个正则表达式,命名组用作所需的重载行动。这个效果令人惊讶,正则表达式匹配可以简单而快速,尤其是当正则表达式与单个值(如URI)匹配时,但是一旦你想匹配URI加上一个IP范围,如何扩展就变得不那么明显了这个。这个是我们所拥有的,一组非常有效的特性,如果您想要匹配一个请求的单个属性。该实现还意味着,这些特性中没有一个可以简单地扩展为一次包含多个属性。我们还需要一些其他的东西,一种快速计算请求是否与可能包含多个属性以及模式匹配的规则相匹配的解决方案。随着时间的推移,Cloudflare工程师撰写了内部文章,探讨新的匹配引擎如何工作。每个工程师首先想到的是匹配必须是一个表达式。这些想法遵循了一种类似的方法,我们将在JSON中构造一个表达式,作为表达式语言的DSL(领域特定语言)。这个DSL可以描述匹配一个请求,UI可以呈现这一点,后端可以进行处理是的。很早提案如下:{"和":[{"等于"{"主机":网站"}},"或":[{"正则表达式":{"路径":"^(?"?:.*/wp管理员/索引.php)$"}}{"正则表达式":{"路径":"^(?"?: .*/xmlrpc.php文件)$"}}]]}JSON描述了一个表达式,计算机可以很容易地将其转换为应用规则,但是人们发现这很难阅读和工作和…一样我们不希望在仪表板中显示这样的JSON,我们考虑如何为UI总结它:如果request host等于网站和(请求路径匹配^(?)?:.*/wp管理员/索引.php)$或请求路径匹配^(?:.*/xmlrpc.php文件)$)于是顿悟了。作为工程师,我们以前见过类似的表达式语言,所以我可以向您介绍我们的老朋友Wireshark®。Wireshark是一种网络协议分析器。要使用它,您必须运行数据包捕获来记录来自捕获设备(通常是网卡)的网络流量。然后将其作为.pcap文件保存到磁盘中,随后在Wireshark GUI中打开该文件。Wireshark图形用户界面有一个显示过滤器输入框,当您填写一个显示过滤器时,GUI将分析保存的数据包捕获,以便确定哪些数据包与表达式匹配,然后在桂。但是我们不需要这么做。事实上,对于我们的场景,这种方法不起作用,因为我们有一个防火墙,需要作为HTTP请求处理的一部分实时做出决策,而不是通过包捕获过程。用于Cloudflare,我们希望使用类似表达式语言的东西,它是Wireshark显示过滤器,但是没有捕获和分离因为我们可能希望在每个请求中执行此操作数千次,而不会引起注意延迟。如果我们能够使用Wireshark风格的表达式语言,然后我们可以将上面的JSON封装表达式简化为:http.host情商"www.example.com网站"以及(http.request.path~"wp admin/index\.php"或http.request.path~ "xmlrpc.php文件)这是人类可读,机器可解析,简洁。它也得益于与Wireshark高度相似。对于习惯于在调查攻击时与Wireshark合作的安全工程师来说,它提供了从调查工具到缓解措施的一定程度的可移植性引擎。到我们需要将请求的属性收集到一个简单的数据str中