“在代码的世界里,每一行都是进步的足迹,每一次挑战都是成长的机遇。”

利用 Nginx 配置屏蔽恶意扫描的策略

网站的安全性面临着诸多挑战,其中恶意扫描行为是一个不容忽视的威胁。恶意扫描往往是攻击者试图寻找网站的漏洞、薄弱环节,以便进一步实施入侵、窃取数据或者进行破坏等恶意活动。而通过合理配置 Nginx 服务器,我们可以有效地屏蔽掉很多这类恶意扫描行为,就像利用如下这段配置代码一样:

if ($http_user_agent ~* "Go-http-client/1.1|Custom-AsyncHttpClient|java|python|perl|ruby|curl|bash|echo|uname|base64|decode|md5sum|select|concat|httprequest|httpclient|nmap|scan" ) { return 403; }

 

 

这段 Nginx 配置中的关键在于对 $http_user_agent 这个变量的使用。$http_user_agent 包含了客户端发起请求时所携带的用户代理字符串信息,它能标识出请求是由何种客户端发出的,比如是浏览器、特定的脚本工具还是自动化程序等,如果你的服务只提供网站访问不提供接口对外访问,各语言的工具类http客户端就是一些恶意扫描。这个只能解决部分问题,像伪装成用户或者爬虫agent就需要对访问日志进行分析。

 

在配置中的正则表达式 “Go-http-client/1.1|Custom-AsyncHttpClient|java|python|perl|ruby|curl|bash|echo|uname|base64|decode|md5sum|select|concat|httprequest|httpclient|nmap|scan” 发挥着核心筛选作用。“~*” 操作符表示不区分大小写的匹配。当客户端发起请求时,Nginx 会检查其 $http_user_agent 字符串是否与上述正则表达式中列举的这些内容相匹配。
如果匹配成功,意味着这个请求很可能是来自于一些自动化的扫描工具或者恶意脚本,比如常见的 nmap 是一款网络扫描和探测工具,攻击者常利用它来扫描网站开放的端口、服务等信息;像 base64、decode 这类可能出现在一些试图对数据进行非法解码操作的脚本中;而各种编程语言相关的标识(如 java、python 等)若在不正常的场景下出现,也有可能是有人利用对应语言编写的恶意扫描程序在发起请求。一旦匹配,Nginx 就会直接返回 403 Forbidden 状态码,禁止这个请求访问网站,从而从入口处就阻断了潜在的恶意扫描行为。

Write your comment Here