nginx屏蔽指定用戶瀏覽器的方法

字號+ 編輯: 种花家 修訂: 种花家 來源: 原创 2023-09-20 我要說兩句(1)

Nginx受到惡意DDOS攻擊時, 經常會發現有一群很有特點的UA來訪問, 有效屏蔽UA(也就是瀏覽器), 幫助服務器減輕負荷。

什么是UA? 就是User Agent的简称, 学名为用户代理, 说白了就是用户上网用的浏览器软件。例如谷歌浏览器、火狐浏览器、IE浏览器。他们在访问nginx时, 会在head头里面掺入一段声明自身浏览器属性的文字。当然某些黑客在使用软件坑我们的时候, 也会搞一套类似的声明出来。

30f967d414af6b04b9bfd2cb733601de.jpeg

另外有一些小白写的采集爬虫、攻击器也会有空的UA声明出现, 知道这方面现象, 有助于我们快速判断和解决问题。

nginx各个配置文件的位置

首先要学会如何定位nginx配置文件的位置, 一般的nginx都会习惯性的安装到/usr/local/nginx, 如果是这样的话, 配置文件就应该放到对应的conf目录里, 位置就在/usr/local/nginx/conf/nginx.conf

但有的同学不是这样放网站配置文件的, 而是放到conf下vhost或者vshots目录下的xxx.xxx.com.conf这样的, 分别以.conf扩展名结尾的配置文档里。

为了方便管理,我们在conf文件夹下, 先新建一个专门用来屏蔽非法UA的文档, 命名为bad_ua.conf, 那么它的路径就是/usr/local/nginx/conf/bad_ua.conf

拦截非法UA的代码

我们需要用到一个nginx变量叫$http_user_agent, 模糊拦截时, 用约等号"~", 代码如下

if ($http_user_agent ~ (Alexa\ Toolbar|Sogou\ web|Semrushbot|Scrapy|Curl|HttpClient)) {
    return 404;
}

注意, 有些黑客在攻击时会在工具里添加参数, 冒充搜狗搜索引擎之类的爬虫UA, 此时, 如果你想封掉这个UA, 中间需要输入空格, 怎么办? 用转义符反斜杠"\"加在空格前面, 便于nginx识别到。其他类似括号、横杠也是一样加上这个反斜线转义符"\"。

用awk命令来分析频繁访问主机的UA排行

这是一个代码案例, 假设我们要分析最新的一万次访问记录, 且nginx access日志打开, 路径为/usr/local/nginx/logs/access.log的前提下, 输入以下shell命令来分析出到底是什么UA在拼命访问nginx:

tail -n 10000 /usr/local/nginx/logs/access.log | awk -F\" '{A[$(NF-1)]++}END{for(k in A)print A[k],k}' | sort -n | tail

更多的awk命令在这里: https://www.wkwkk.com/articles/a5151995cf1f85c6.html

将拦截配置脚本引入nginx配置文件

上文提到了配置脚本被命名为bad_ua.conf, 放到conf目录下了, 那么只需要在相应网站配置位置下写一段代码就可以了:

include bad_ua.conf

一般都写在root /home/wwwroot/xxxx类似的配置语句下面。

最后别忘了重启nginx, 假设nginx主程序位置在/usr/local/nginx/sbin/nginx, 那么命令应该是

/usr/local/nginx/sbin/nginx -s reload

重启完毕后拦截配置功能方才正式生效。

閲完此文,您的感想如何?
  • 有用

    9

  • 沒用

    2

  • 開心

    3

  • 憤怒

    2

  • 可憐

    2

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: PHP+JS聊天群

相關課文
  • Linux系統下word文档轉成pdf的辦法

  • ubuntu和debian安裝nginx或者tengine報錯, 找不到pcre依賴庫的解決辦法

  • linux終耑下借助awk命令查詢篩出網站access.log日志裡的統計信息

  • 常見的web中間件請求返回狀態碼

我要說說
網上賓友點評
1 樓 IP 113.86.239.253 的嘉賓 说道 : 1656518419
求联系方式