跳到主要内容

教你一招使用防火墙屏蔽UA(User Agent)网络攻击

前些时日,有人恶意攻击本网站和服务器,开始时节奏较缓慢,重启下服务器即可,后来可不得了,进入服务器后台都无法进,只能停止网站,一启动运行网站,服务器秒蹦,然后,重启服务器第一件事就是停止网站,查看日志,发现服务器的数据库被频繁调用、网络层数据满载、应用层调用CPU和内容也满载的原因是有人利用本网站的Wordpress 搜索功能,频繁执行搜索,有多频繁呢,大致计算每秒几千上万个请求进来吧,不秒蹦才怪。

MGSH-1-Ali-被攻击屏幕截图 2022-08-27 182211

事情发生的结点很有意义,先对服务器进行了各种补丁修复,没能解决问题,怀疑是阿里服务器被攻击没防住部分转移到该服务器上了,打电话问阿里是不是有这种可能,于是增加了阿里防火墙,开始变的稳定了,又问阿里怎么加了防火墙就没啥事了,却看不到攻击数据,得,这确实说不过去了,于是又开始不稳定,然后还是看不到数据。

后来发现阿里防火前基础版费用一年下来也不低,也挡不住攻击,如果按照其高端套餐下来,这一年费用可不少。于是,选择了宝塔面板的企业级/专业级宝塔防火墙。虽然配置上没有人帮忙(或得花钱),毕竟工具可以使用。基于问题的复杂性,找人帮忙也只能在复杂问题中获得部分帮助,于是米国生活自己来研究问题,解决问题,本文从UA说起。

UA User Agent定义

用户代理(User Agent,简称 UA),是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

网络攻击UA分析

从IP统计上来看,大量的IP来自郑州,且郑州电信、郑州联通,以及北京移动。之前的IP封掉之后,近期又新增了陕西阿里云等。

网络攻击IP 2022-09-09 195118 网络攻击IP2 2022-09-09 195118

来自阿里云IP搜索攻击-2022-09-09 200643

阿里云IP攻击详情 2022-09-09 200722

URL源码2022-09-09 200859

URL解码 2022-09-09 200931

左青龙,右白虎,心不正,业不勤,以看上去是在做推广的方式,实际上在实施纯粹攻击的目的。

UA数据下载

通过宝塔面板可以购买专业企业版防火墙,根据系列工具分析下载Excel表格,会用到Excel综合排序、筛选、删除重复数据、条件格式-重复数据飘红等功能,进行UA数据的详细分析。

Linux Android 5 2022-09-09 202712

UA正则表达式

在进行http协议批量数据处理的过程中,正则表达式是经常用到的一个工具,在国外有很多成熟的网站工具,国内在正则表达式使用上,确实很难在身边、平台等找到精通正则表达式的人才,实为遗憾,下面米国生活将通过自己的实战和学习分享UA的正则表达式的用法,可用于防火墙配置。

UA值:

Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Mobile Safari/537.36

以上UA使用正则表达式精准匹配为:

^Mozilla\/5\.0.\(Linux\;.Android.5\.0\;.SM\-G900P.Build\/LRX21T\).AppleWebKit\/537\.36\ (KHTML\,.like.Gecko\).Chrome\/92\.0\.4515\.159.Mobile.Safari\/537\.36

用法说明:

先把输入法切换为英文半角状态,这玩意是西方老美研发并制定的规则,为了更准确的理解,以下说明不加标点符号

^表示正则表达式要开始了的字符

\表示转义字符 每一个符号字符前都要用\进行转义才能保持原来的属性

.表示一个字符位置 原字符中的.字符需要用\进行转义 转义后的格式为\. 而原字符串中的空格需要用.替换 表示是一个字符 如果不用.替换 或许要其他正则表达式的符号进行表示 不建议初学者使用太多方式 以上方式简单且准确

精准匹配的含义,就是完全匹配,一个字符不差,就是只针对此UA进行正则正则表达式进行转换,差一个字符都不生效。就好比米国生活做的品牌营销的精准营销服务一样,对品牌词进行优化,只提高品牌词的美誉度和品牌声量。

以上UA使用正则表达式模糊匹配为:

^Mozilla\/5\.0.\(Linux\;.Android.5\.0\;.*Chrome.*Safari\/537\.36

其中.*表示任意匹配任何字符,任意匹配任何次数,模糊匹配表达的是Mozilla 5.0 使用Linux 安卓 5.0 Chrome浏览器 苹果Safari 537 36版本内核的,这样范围就宽了许多,现在安卓已经不是5.0这么低了,另外安卓使用苹果浏览器在普通用户来看,几乎无法实现,只有技术操作、假数据才能实现,所以,屏蔽此技术攻击并不影响真实用户访问网站。

以上说明已经很清楚的表达了如何使用正则表达式对UA进行使用,不再举例,米国生活官网仍在受着攻击,避免攻击者发现此预防方法,持续改变数据,导致让米国生活不停地修改防护策略,这种PK,没有意义,劳民伤财。

使用AI/GPT生成正则表达式

有了AI直接把User Agent告诉AI,让其生成正则表达式即可。效率老高了。

米国生活:把以下字符串用正则表达式表示 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36

AI:

这个字符串可以用以下正则表达式表示:原字符串:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 正则表达式:
^Mozilla\/5\.0 \((Windows NT 6.1; WOW64)\).(AppleWebKit\/537\.36 \(KHTML, like Gecko\)) (Chrome\/86.0.4240.198) (Safari\/537.36)*它的意思是:
^Mozilla\/5\.0 \((Windows NT 6.1; WOW64)\) 匹配 Mozilla/5.0 (Windows NT 6.1; WOW64)
.(AppleWebKit\/537\.36 \(KHTML, like Gecko\))匹配任意字符+AppleWebKit/537.36 (KHTML, like Gecko)
(Chrome\/86.0.4240.198)匹配 Chrome/86.0.4240.198
(Safari\/537.36)匹配Safari/537.36
*匹配0次或多次前面的字符代码实现:
python
import re

ua = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' 
pattern = r'^Mozilla\/5\.0 \((Windows NT 6.1; WOW64)\).(AppleWebKit\/537\.36 \(KHTML, like Gecko\)) (Chrome\/86.0.4240.198) (Safari\/537.36)*'

match = re.match(pattern, ua)
if match:
    print('Regex matches!')  
else: 
    print('Regex does not match!')
# Regex matches!
继续练习正则表达式,这是一个强大且高频使用的技能。提出更多的UA字符串,一起学习和掌握正则知识!我会提供对应的正则表达式和代码实现,一步步解释正则表达式的构成和语法,帮助你进一步理解和运用。请继续提问,一起学习! 

模糊匹配在米国生活网络营销、品牌营销方案中,属于公域营销范围,就是在一个更大的范围内筛选自己的客户。

其他防护方式

除了使用防火墙对User Agent进行屏蔽外,还需要使用多种方法进行综合的防护,如,IP、URL、POST、GET、URI、Cookies、Header等,诸如米国生活官网开始仅仅是来自郑州的IP猛烈攻击,限制郑州IP之后,同样的攻击方式又转移到了其他地区IP,这时候对方攻击是主动的,如果不用UA等其他方式限制,只做IP防护是不够的。

Mozilla/5.0 (Linux; Android 10; HLK-AL00 Build/HONORHLK-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/97.0.4692.98 Mobile Safari/537.36 T7/13.33 BDOS/1.0 (HarmonyOS 2.2.0) SP-engine/2.71.0 baiduboxapp/13.33.5.11 (Baidu; P1 10) NABar/1.0 这是攻击我服务器的UA,用政策表达式表示这个UA:

Mozilla\/5\.0 \(Linux; Android 10; HLK-AL00 Build\/HONORHLK-AL00; wv\) AppleWebKit\/537\.36 \(KHTML, like Gecko\) Version\/4\.0 Chrome\/97\.0\.4692\.98 Mobile Safari\/537\.36 T7\/13\.33 BDOS\/1\.0 \(HarmonyOS 2\.2\.0\) SP-engine\/2\.71\.0 baiduboxapp\/13\.33\.5\.11 \(Baidu; P1 10\) NABar\/1\.0

如果您使用的是Nginx,可以在配置文件中添加以下代码:

if ($http_user_agent ~* "Mozilla\/5\.0 \(Linux; Android 10; HLK-AL00 Build\/HONORHLK-AL00; wv\) AppleWebKit\/537\.36 \(KHTML, like Gecko\) Version\/4\.0 Chrome\/97\.0\.4692\.98 Mobile Safari\/537\.36 T7\/13\.33 BDOS\/1\.0 \(HarmonyOS 2\.2\.0\) SP-engine\/2\.71\.0 baiduboxapp\/13\.33\.5\.11 \(Baidu; P1 10\) NABar\/1\.0") {
    return 403;
}

这将阻止具有该特定UA的请求访问您的服务器。注意,正则表达式可能需要根据您的实际需求进行调整。

如果您使用的是 Apache 服务器,您可以在 .htaccess 文件中添加以下规则:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5\.0\s\(Linux;\sAndroid\s10;\sHLK-AL00\sBuild/HONORHLK-AL00;\swv\)\sAppleWebKit/537\.36\s\(KHTML,\slike\sGecko\)\sVersion/4\.0\sChrome/97\.0\.4692\.98\sMobile\sSafari/537\.36\sT7/13\.33\sBDOS/1\.0\s\(HarmonyOS\s2\.2\.0\)\sSP-engine/2\.71\.0\sbaiduboxapp/13\.33\.5\.11\s\(Baidu;\sP1\s10\)\sNABar/1\.0$ [NC]
RewriteRule .* - [F]

这将阻止具有匹配 User-Agent 的请求访问您的服务器。请注意,这个规则可能会误拦截一些合法的用户,因此在实际应用中需要谨慎使用。

返回顶部