当前位置:论坛首页 > Linux面板 > Linux面板教程

宝塔Nginx网站防火墙使用说明

发表在 Linux面板2021-8-9 17:06   [复制链接] 81 101972

简介

        一直都有用户建议我们开发木马扫描,木马清理模块,但我们认为与其亡羊补牢,不如直接在源头上阻止站点被挂马的事情发生,《宝塔网站防火墙》是基于nginx/apache模块开发的一套应用层防火墙,能有效阻止大部分渗透攻击,且提供高度自由的规则自定义功能,为站点加一道铜墙铁壁,目前宝塔官网、官方论坛已经成为《宝塔网站防火墙》的首个用户,效果良好。

使用场景:
1.遭受CC攻击、部分流量攻击的用户
2.遭受SQL注入、XSS/XSRF之类的渗透攻击的用
3.遭受恶意上传脚本、webshell等危险行为的用户
4.希望屏蔽境内或境外地区访问自己网站的用户
5.希望通过UA、IP黑白名单管理网站访问规则的用户
6.希望可视化管理网站防御规则的用户
7.希望实时展示防火墙拦截状态的用户
8.适合想要查看攻击来源、被攻击的URI、保护的目录,但又不会看的用户
9.适合网站不需要某些蜘蛛来访,但又不会禁止的用户
10.适合网站被扫描器恶意扫描,但又不会禁止的用户
11.适合网站发文章不想要某些敏感词出现,但又不会设置的用户
12.应用场景包含所有动态网站

兼容性:仅支持主程序Nginx1.18以上的版本使用,如果低于此版本请更换至更高版本。另外,需要LuaJIT组件的支持,安装Nginx时请使用编译安装模式,如果您已经安装的Nginx并非编译安装,请在业务不忙时重新编译安装后再安装Nginx防火墙。

注意:
1、请根据自己的网站环境 选择是支持Nginx还是支持Apache的防火墙
2、如果您不了解正则表达式,请不要随意修改防火墙自带规则


宝塔nginx网站防火墙01.png

简介01.png

快速预览(仅是图片展示,后文有更详细的插件使用说明)


概览01.png
攻击列表01.png
全局设置01.png
站点设置01.png

安装步骤如下:

登录宝塔面板-->软件商店-->【关键词搜索:Nginx防火墙】或【点击专业版插件】-->网站监控报表-->安装

安装.png


插件使用快速入门:
【概览】
插件安装后可直接点击宝塔面板左侧【防火墙】按钮,即可访问新版防火墙的管理页面。
启动后它展示的默认页是概览页,它将展示的内容有总拦截次数、24小时拦截次数、CC拦截次数以及保护天数。在第二第三栏中更有封锁IP列表、攻击地图、7天拦截趋势图、今日网站拦截TOP5与防御动态展示。
概览页互动操作如下
1.封锁IP列表、攻击地图下攻击IP排行榜、防御动态鼠标滑轮滚动查看;
2.攻击IP排行榜点击IP可直接将IP加入黑名单;
3.防御动态某一条目点击详情可查看拦截的具体信息。

概览02.png

【攻击列表】
攻击报表页面将展示保护类型前10万条的数据、攻击IP排行榜、攻击IP报表、被攻击的URI报表与拦截搜索功能。
攻击列表页互动操作如下
1.鼠标移动到保护类型页可显示各类型的数值;
2.点击攻击IP排行榜的IP可直接将IP加入黑名单;
3.在IP报表、URI报表、拦截搜索项中切换。

攻击列表-IP报表01.png

IP报表
此项功能有:显示所有攻击者的真实IP,可直接点击IP或详情,从而查看该IP对哪些URI进行了攻击。每个URL后面还可以查看URI访问的详情与HTTP。

IP报表-详情.png

URI报表
此项功能有:显示所有被攻击的URI列表,可直接点击URI或详情,从而查看该URI被攻击的详细情况。

URI报表-详情.png

拦截搜索
此项功能有:可选择所有站点或单个站点搜索包含IP、URI、URL或时间类型的搜索。
注意:如果当前拦截信息为/111.php?uid=1,则URi为/111.php,URL为/111.php?uid=1
例:
  1. 攻击URL如下:
  2. /upload/admin.php?upload=aaa
  3. 那么搜索的URI就是/upload/admin.php
  4. 搜索的URL就是/upload/admin.php?upload=aaa</font></font></font>
复制代码
拦截搜索.png

【全局设置】
全局设置页面将展示防火墙的所有功能,可在此设置全局规则、各种类型的黑白名单、响应状态码等。当前页面支持导入导出防火墙的配置(仅支持Nginx防火墙内的规则导入导出),恢复默认防火墙配置、模拟攻击测试等。
开始前请详细阅读下列提示,非常重要、非常重要、非常重要。
继承:全局设置将在站点配置中自动继承为默认值,现有站点不受全局设置的影响,新增站点才会直接自动继承的应用全局设置。
优先级:IP白名单> IP黑名单 > UA白名单> UA黑名单> URL关键词拦截 > URL白名单 > URL黑名单 > 禁止境外> 禁止境内> > 非浏览器拦截> User-Agent > CC防御 > Cookie > URI过滤 > URL参数 > Thinkphp防御> POST > 网站自定义防御


全局设置01.png

CC防御
互动操作:设置响应代码、开关防御状态、初始化规则。
注意:全局CC设置的是初始值,新添加站点时将继承,对现有站点无效,已经存在被攻击现象的站点前往站点配置即可。

CC防御01.png

规则说明:
1.标准模式与增强模式:默认为标准模式,网站正常使用时建议使用标准模式,避免收录时出现问题,增强模式中有人机校验方式设置。

2.请求类型有4种拦截方式,分为URL带参数、URL不带参数、IP、IP+UA
2.1.URL带参数(适用于绝大场景防御效果一般)
    例如:设置了URL带参数60秒周期60次频率,此刻Nginx防火墙做出的动作是某个IP在60秒内累计请求同一个URL(带参数)超过60次就会触发拦截。
    例如:/index.php/index/login?username=admin,那么他的是代表整个URI去计算的(/index.php/index/login?username=admin),也就是URL不变的情况下去请求这个URL就会触发拦截。
2.2.URL不带参数(不适用于Thinkphp默认路由)
    例如:设置了URL不带参数60秒周期60次频率,此刻Nginx防火墙做出的动作是某个IP60秒内累计请求同一URL(不带参数)超过60次就会触发拦截。
    例如:/index.php/index/login?username=admin,那么Nginx防火墙会用URI去计算(/index.php/index/login),也就是URL(不带参数)不变的情况下去请求这个URL才会触发拦截。
2.3.IP(受到大量攻击的时候适用)
    例如:某个IP60秒周期内访问服务器内所有网站的总次数超过60次的频率将会触发拦截,建议在受到攻击的时候开启。注意:不建议一直开启!
2.4.IP+UA(适用于API接口)
    例如:某个IP+UA60秒周期内访问服务器内所有网站的总次数超过60次频率将会触发拦截。注意:建议不要开启,只适用于API网站!


3.周期、频率、封锁时间:xx秒周期内累计请求同一URL超过xx次频率,触发CC防御,封锁此IPxx秒,所有时间取1天,最长不会超过86400秒。
例如:60秒周期内累计请求同一URL超过180次频率,触发CC防御,封锁此IP300秒。
注意:IP封锁不等于拉黑名单,需要加黑名单需自行点击添加。请不要设置过于严格的CC规则,以免影响正常用户体验。


4.增强模式-人机校验:可设置自动开启/一直开启,自动开启可设置触发条件,例如60秒被访问600次触发开启人机校验。人机校验有4种校验方式,分为跳转验证、验证码验证、人机验证、滑动验证,只是验证方式不同,看个人喜好开启哪种,如果开启后无法正常显示,手动重启nginx主程序即可。

恶意容忍度
某一IP对网站进行了多少次的恶意请求后,nginx防火墙将进行对该IP的封锁。这不同于CC防御,恶意请求有可能是SQL注入、XSS等恶意传参、CC,当此IP的访问行为达到了设置的阈值,nginx防火墙就会做出封锁动作。
举例:192.168.1.10这个IP对www.bt.cn网站60秒进行了10次恶意攻击(包含SQL注入、XSS),触发了防火墙设置的阈值,此时防火墙将会对192.168.1.10进行拦截。
注意:全局应用:全局设置当前恶意容忍规则,且覆盖当前全部站点的恶意容忍规则。

IP黑白名单
设置后,所有规则对IP白名单无效,IP白名单前文提到位居规则顶端。IP黑名单设置后既在nginx防火墙禁止此IP访问所有网站。
建议使用场景:自己的服务器间互动、公司内测试、公司的其他服务器IP、需要测试的服务器IP等加入IP白名单(如果没有需求就不用设置IP白名单)。IP黑名单使用场景可以禁止某个或某个段的IP访问、某个段的蜘蛛爬虫,将需要拉黑的IP添加进入即可。

URL黑白名单
设置后,只要是关于添加的URL请求,都是进行URL黑白名单过滤,白名单设置后该URL将会失去大部分防御规则。
注意格式:例如误拦截的url如下: /index/index/aaa.php?id=eradasa&adas,只需要填写它的URL,不需要添加它的参数。
有添加URL黑白名单的需求是,操作如下:^/index/index/aaa.php,只需要添加^/index/index/aaa.php到URL黑白名单即可。

UA黑白名单
设置后,UA白名单查询到关键词直接跳过任何拦截,UA黑白名单初始化阶段在客户端UA中查找关键词,谨慎使用。UA白名单默认为空,没有就一直保持空即可。建议使用场景:例如可以禁用Google蜘蛛的UA到黑名单中,可以禁止某个浏览器UA访问,例如safari等。

非浏览器拦截
拦截非浏览器请求,通过UA判断是否是爬虫,此功能不会拦截真实的蜘蛛爬虫。
建议使用场景:此开关将应用所有网站,建议开启。另外如果使用了微信小程序外部调用,建议关闭此功能,因为微信那边验证网站也是非浏览器行为。

HTTP请求过滤
可选择过滤的请求类型、请求头过滤、语义分析开关等。
请求类型包含:POST、GET、OPTIONS、DELETE等;如果您只想允许POST和GET类型使用,其他的都不要,除了POST和GET其他的都关闭即可。
请求头包含:origin、content-type、accept、user-agent、cookie等;请求头过滤是过滤的请求头的字段长度。
例如:请求头中的cookie头部只能500字节以内,那么超过这个长度就被视为恶意的请求触发拦截。
语义分析开关:POST传参XSS防御、POST传参SQL注入防御、GET传参XSS防御、GET传参SQL注入防御。
建议使用场景:默认既全部开启,不建议关闭、不建议关闭、不建议关闭

GET(GET-URL)、POST、UA(User-Agent)过滤、Cookie过滤、常见扫描器
GET-参数过滤 --> 对GET类型的参数进行过滤
GET-URL过滤 --> 对URI 进行过滤
User-Agent过滤--> 对客户端的UA进行过滤
POST过滤-->对POST传递的参数进行过滤
Cookie过滤--> 对客户端传递的Cookie进行过滤
常见扫描器-->对已知的扫描器进行封锁

建议:保持默认即可,不建议修改;需要自定义规则时,建议添加新的规则,不建议改动原来的,全部支持正则表达式。

GET(GET-URL)
GET参数和GET-URL的区别
例如:/index.php?id=1&id2=1,id=1&id2=1是过滤的参数和值,index.php是URI。
那么GET参数过滤只会取GET传递的参数,进行判断是否是恶意的参数;而GET-URL这块主要拦截的是一个备份文件被非法下载、sql文件被下载等。

UA(User-Agent)过滤
这里是对用户的恶意UA 进行了拦截,例如拦截go的UA直接填入go即可,支持正则。

POST、Cookie过滤、常见扫描器
这里是对POST的传递参数、用户提交的Cookie进行过滤,常见扫描器是对扫描器的特征去匹配。

禁止境内外访问
字面意思,设置后可禁止境内或境外访问,用户可自行点击设置设置IP,境外IP库可同步云端。
注意:不建议两个都开启,两个都开启后只能本地访问。

From-data协议、HTTP包、蜘蛛池、URL关键词拦截、违禁词拦截、API接口防御
Webshell查杀-->动态查杀webshell
From-data协议-->针对文件上传格式传输数据进行规范
蜘蛛池--->蜘蛛IP进行整合
URL关键词拦截-->针对URL某些关键词进行拦截(不记录日志)
违禁词拦截-->针对用户传递的文字进行拦截,例如用户发帖的违禁词进行拦截
API接口防御-->针对已经加入白名单的接口进行单独防御


From-data协议
协议是multipart传输数据的一种格式规范,不符合规范的将会触发拦截。

HTTP包
默认拦截的HTTP日志只会记录1M 之内的记录,如果超过1M的HTTP包默认不会记录,如果您在日志中发现了大于1M的包希望记录它,您可以开启此功能。
注意:此功能默认关闭。

蜘蛛池
云端有存储百度、谷歌、360、搜狗、雅虎、必应、头条的蜘蛛池,除了这些,用户可以对蜘蛛池自行增删蜘蛛。

API接口防御
API防御指的是部分API在白名单的情况下有需要对某些接口进行CC防御,API书写格式例如:^/api/getuserinfo$,写法需注意一定得用^开头和$结尾。

模拟攻击
模拟攻击为:模拟黑客进行SQL注入获取数据库权限,不会影响业务的正常运行。
如果您的IP在IP白名单中测试则无效果。
如需测试其他的网站可使用(http://网站域名/?id=/etc/passwd)进行攻击。
返回拦截信息则表示拦截成功,如发现未拦截,建议更新至最新版。

导出导入配置
仅导出全局配置(CC配置、恶意容忍度配置、IP黑白名单、UA黑白名单、URL黑白名单、敏感文字替换、URL关键词拦截),不包含站点配置。
GET、POST、URL、UA、Cookie仅导出响应码和开关状态,不包含内部规则。
建议使用复制或下载按钮,选中复制有可能遗漏密钥,导致导入或导出时失败。

恢复默认配置
将会清除所有配置、恢复到默认配置、包括URL黑白名单、IP黑白名单等所有规则项。

【站点设置】
站点设置页面将所有已有站点展示在此,可在此设置页面对某一个网站进行单独的规则设置。此页可直接对GET、POST、UA、Cookie、禁止境内外、CDN、CC防御以及主防御开关进行设置。
站点设置01.png

批量操作互动如下:开关Get拦截、开关Post拦截、开关UA操作、开关CC防御、开关Cookie拦截、开关禁国外拦截、开关禁国内拦截、开关CDN拦截、开关状态。

CDN选项
开启了云WFA,比如阿里云、云锁之类的第三方安全软件,需要开启CDN选项。兼容阿里云、又拍云、Cloud Flare、阿里云WAF、和其他的CDN。
另外,对于百度云CDN兼容方案如下:CDN设置-->开启兼容百度CDN-->即可获取百度云CDN传递过来的客户端真实IP。
注意:当网站部署了CDN之后,一定得开启CDN按钮,不然会拦截CDN的节点IP。

拦截记录
此页面将展示某个站点今日、昨日、近7天、近30天或自定义时间的拦截记录。
互动操作如下:
1.用户可点击IP加入IP黑名单;
2.用户可点击误报,将URL加入URL白名单;(慎点,确定需要点才点)
3.用户可查看请求的详情以及HTTP原文。

拦截日志01.png

【设置】
禁止执行PHP的URL:禁止指定的URL运行PHP脚本
禁止访问的URL:禁止访问指定的URL
禁止扩展名:禁止访问指定的扩展名
禁止上传的文件类型:禁止上传指定的文件类型

受保护的URL
通过自定义参数加密URL地址,参数错误将被拦截。
支持正则表达式,可用于保护网站后台地址,API接口等非公众URI地址不被渗透,参数名与参数值对大小写敏感,设置受保护的URL,访问该URL时必需带有指定的参数名和参数值,否则将被防火墙拦截。
假设URI地址:^/admin/admin.php,参数名:test,参数值:bt.cn
正确的访问方式:/admin/admin.php?test=bt.cn

URL专用过滤
为特定URL地址设置过滤规则,可用于加强登录入口、回帖评论等接口的保护,快速修补第三方程序安全漏洞,参数名与参数值对大小写敏感。
注意:本过滤器同时作用于GET和POST参数。

防盗链
防盗链设置,默认允许资源被直接访问,即不限制HTTP_REFERER为空的请求,多个URL后缀与域名请使用英文状态下的逗号(,)隔开,如:png,jpeg,zip,js
当触发防盗链时,将直接返回404状态。

【木马查杀】
此页功能为:当前扫描内容为疑似木马文件,扫描方式基于当前规则库,可自行添加扫描规则。
扫描出来的文件,都需要使用宝塔检测与第三方检测来检测当前文件是否有问题,如有一方检测为webshell文件,请立即删除此问题。
另外需要特别注意:最终决定权在用户手上,可能当前的规则误报了您的文件,规则是死的人是活的,您需要自行检查文件代码是否真的有问题,如无问题,请点击误报。
木马查杀01.png

【封锁记录】
此页面将展示每个站点的封锁记录,记录了有时间、IP、站点、封锁的原因、封锁时常等。
用户可互动操作如下
1.对拦截记录点击误报;
2.对拦截的IP进行拉黑;
3.解封当前拦截;
4.可查看拦截详情和HTTP请求;5.用户可选择每页展示多少条记录。
封锁记录.png

【操作日志】
此页面记录所有Nginx防火墙的功能性操作,比如设置CC规则、给某个IP添加了黑白名单、URL黑白名单等等,所有操作记录都会记录在此。
操作记录.png
使用道具 举报 只看该作者 回复
发表于 2021-10-13 19:19:49 | 显示全部楼层
请问可以屏蔽指定省或者市的访问不?
使用道具 举报 回复 支持 反对
发表于 2021-10-14 10:42:15 | 显示全部楼层
宝塔用户_bogbye 发表于 2021-10-13 19:19
请问可以屏蔽指定省或者市的访问不?

目前暂不支持,后期会加入国内各地区的访问限制优化
使用道具 举报 回复 支持 反对
发表于 2021-10-14 16:46:22 | 显示全部楼层
带端口域名怎么配置?
使用道具 举报 回复 支持 反对
发表于 2021-10-14 16:47:48 | 显示全部楼层
raityou 发表于 2021-10-14 16:46
带端口域名怎么配置?

具体什么需求呢?带端口的与默认80是一样的,直接使用即可,不需要配置
使用道具 举报 回复 支持 反对
发表于 2021-10-14 16:55:41 | 显示全部楼层
比如我现在用的是域名加端口号访问网站的,www.baidu.com:8082,防火墙里面没有我这个域名,因为我是用openresty,直接在config配置文件配置的。这防火墙要怎么配置
使用道具 举报 回复 支持 反对
发表于 2021-10-14 17:38:38 | 显示全部楼层
raityou 发表于 2021-10-14 16:55
比如我现在用的是域名加端口号访问网站的,www.baidu.com:8082,防火墙里面没有我这个域名,因为我是用openr ...

需要在面板-网站页面添加的网站才能监控到,其他地方的都不行
使用道具 举报 回复 支持 反对
发表于 2021-10-14 17:38:45 | 显示全部楼层
堡塔安全赤井秀一 发表于 2021-10-14 16:47
具体什么需求呢?带端口的与默认80是一样的,直接使用即可,不需要配置

比如我现在用的是域名加端口号访问网站的,www.baidu.com:8082,防火墙里面没有我这个域名,因为我是用openresty,直接在config配置文件配置的。这防火墙要怎么配置
使用道具 举报 回复 支持 反对
发表于 2021-10-14 17:40:24 | 显示全部楼层
raityou 发表于 2021-10-14 17:38
比如我现在用的是域名加端口号访问网站的,www.baidu.com:8082,防火墙里面没有我这个域名,因为我是用ope ...

需要在面板-网站页面添加的网站才能监控到,其他地方的都不行
使用道具 举报 回复 支持 反对
发表于 2021-10-14 18:09:25 | 显示全部楼层
堡塔安全赤井秀一 发表于 2021-10-14 17:40
需要在面板-网站页面添加的网站才能监控到,其他地方的都不行

安装后 nignx重启报错,http://res3.yunzhzhu.com/uploads/20211014/Fhh-Xe1Ck02p8rXmw3Ft_BfeREEr.png
使用道具 举报 回复 支持 反对
发表于 2021-10-14 18:11:18 | 显示全部楼层
堡塔安全赤井秀一 发表于 2021-10-14 17:40
需要在面板-网站页面添加的网站才能监控到,其他地方的都不行

代理转发上的nginx能安装这个吗
使用道具 举报 回复 支持 反对
发表于 2021-10-14 18:17:25 | 显示全部楼层
raityou 发表于 2021-10-14 18:09
安装后 nignx重启报错,http://res3.yunzhzhu.com/uploads/20211014/Fhh-Xe1Ck02p8rXmw3Ft_BfeREEr.png ...

卸载nginx,卸载nginx防火墙,重新编译安装nginx1.18以上的版本,nginx防火墙需要luajit组件支持
使用道具 举报 回复 支持 反对
发表于 2021-10-14 18:26:03 | 显示全部楼层
堡塔安全赤井秀一 发表于 2021-10-14 18:17
卸载nginx,卸载nginx防火墙,重新编译安装nginx1.18以上的版本,nginx防火墙需要luajit组件支持 ...

Nginx openresty-1.19.9.1 可以用【Nginx防火墙】吗?
使用道具 举报 回复 支持 反对
发表于 2021-10-15 09:54:18 | 显示全部楼层
raityou 发表于 2021-10-14 18:26
Nginx openresty-1.19.9.1 可以用【Nginx防火墙】吗?

可以,安装后再安装nginx防火墙即可
使用道具 举报 回复 支持 反对
发表于 2021-10-30 15:42:29 | 显示全部楼层
请问:如果购买这个防火墙,怎样安装,还有LuaJIT组件在哪里下载啊,第一次到这里咨询,请帮助详细说明一下,本人一看到黑乎乎的安装程序界面就脑袋立刻发晕。
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

企业版年付运维跟进群

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急问题处理

论坛响应时间:10分钟

问题处理方式:1对1处理(优先)

工作时间:白班:9:00 - 18:00

工作时间:晚班:18:00 - 24:00

立即付费处理

工作时间:09:00至24:00

快速回复 返回顶部 返回列表