2025年7月

目前除了用付费的宝塔防火墙插件之外,其实还有两种方式可以使用免费的Nginx防火墙功能:一个是可以在面板插件里面搜索“防火墙”可以找到第三方的免费防火墙插件,登陆面板安装就可以使用。还有一种方式是开启被隐藏的nginx防火墙模块,下面重点讲下如何开启隐藏的防火墙。

默认的宝塔面板是安装了ngx_lua_waf模块的,在5.9版本中面板集成了这个简易waf防火墙,所以我们可以在5.9版本的nginx中看到过滤器这个功能,并且可以设置。

在宝塔面板后期的版本6.X、7.X中,阉割了很多功能,但宝塔面板还是编译了ngx_lua_waf模块,品自行今天主要说一下如何在宝塔面板7.8.0中开启隐藏的nginx防火墙waf防火墙。

第一步:Nginx配置修改
1、打开宝塔面板,打开左侧“软件商店”,在“已安装”下面找到Nginx,点击后面的“设置”》“配置修改”;
2、找到大约在第 25 行的 #include luawaf.conf;去掉前面的 # 符号(“#”代表注释),保存。
3、保存以后,在上图的Nginx管理里面,选择“服务”重启即可;
4、上面更改完,我们就成功开启了waf防火墙!可以试着访问 http://你的网址/?id=../etc/passwd,页面会弹出提示:
第二步:配置waf防火墙规则
waf防火墙开启以后,我们还需要配置防火墙规则,那么规则在哪里?

打开面板的文件管理,进入 /www/server/nginx/waf 目录,里面的 config.lua 文件就是防火墙的配置文件。每一项的具体含义如下所示:

RulePath=”/www/server/panel/vhost/wafconf/”–waf 详细规则存放目录(一般无需修改)
attacklog =“on”–是否开启攻击日志记录(on 代表开启,off 代表关闭。下同)
logdir =”/www/wwwlogs/waf/”–攻击日志文件存放目录(一般无需修改)
UrlDeny=“on”–是否开启恶意 url 拦截
Redirect=“on”–拦截后是否重定向
CookieMatch=“off”–是否开启恶意Cookie拦截
postMatch=“off”–是否开启 POST 攻击拦截
whiteModule=“on”–是否开启 url 白名单
black_fileExt={“php”,“jsp”}–文件后缀名上传黑名单,如有多个则用英文逗号分隔。如:{“后缀名1”,“后缀名2”,“后缀名3”……}
ipWhitelist={“127.0.0.1”}–白名单 IP,如有多个则用英文逗号分隔。如:{“127.0.0.1”,“127.0.0.2”,“127.0.0.3”……}下同
ipBlocklist={“1.0.0.1”}–黑名单 IP
CCDeny=“off”–是否开启 CC 攻击拦截
CCrate=“300/60”–CC 攻击拦截阈值,单位为秒。”300/60″代表60秒内如果同一个 IP 访问了300次则拉黑

配置文件中,RulePath 项后面对应的文件目录里存放的是具体的防火墙拦截规则。打开这个文件夹/www/server/panel/vhost/wafconf/,可以看到里面有一些无后缀名的规则文件。其中每一个文件的作用如下:
args –GET 参数拦截规则
blockip –无作用
cookie –Cookie拦截规则
denycc –无作用
post –POST 参数拦截规则
returnhtml –被拦截后的提示页面(HTML)
url –url 拦截规则
user-agent –UA 拦截规则
whiteip –无作用
whiteurl –白名单网址
配置文件中除 returnhtml(拦截提示页面)以外,其它的内容都是正则规则的,除非对正则规则的写法比较熟悉,否则就不要随便更改。
完成上述修改后,我们重启Nginx就完成了waf防火墙的开启。

宝塔面板安装回原版7.7后,出现在了申请ssl证书报错:Invalid version. The only valid version for X509Req is 0。

网上找的第一个解决方法
通过宝塔面板的文件,找到文件目录:/www/server/panel/class下面的acme_v2.py文件。
双击文件进入编辑,并通过搜索找到X509Req.set_version(2)代码段 ,将其改为X509Req.set_version(0)
大概在1009行
修改完成之后保存文件,清除面板缓存,并重启宝塔面板。

官方论坛别人提供的第二个解决方法
您好,这个错误通常是由于使用了不兼容的 OpenSSL 版本导致的,X509Req 版本只支持 0。
您可到服务器终端执行以下命令:

btpip install pyOpenSSL==22.1.0
btpip install cffi==1.14
bt 1

一、证书转换
工具地址:https://www.sslshopper.com/ssl-converter.html

简单步骤:

①、选择转换后的格式(Type To Convert To),这里我选择 IIS 专用的 pfx:
请输入图片描述
②、选择后栏位即刻发生改变,这时候需要上传 nginx 下的.pem 和.key2 个证书相关文件,然后输入你自定义的证书密码,最后点击最下面的蓝色按钮(Convert Certificate)即可下载到转换后的 pfx 证书了!
二、导入证书
①、添加证书管理
IIS 服务器->开始->运行->输入 MMC->确定后弹出如下界面->点击文件->选择添加/删除管理单元:
②、下拉左边列表,找到证书并添加:
③、选择计算机账户:
④、跟着向导继续下一步并完成后,刚刚的 MMC 控制界面就可以看到【证书】选项了,如图点开个人选项,并右键证书,在所有任务里面选择导入:
⑤、在弹出的界面的右下角,选择个人信息交换 pfx 格式,并选择刚刚通过在线转换得到的 pfx 证书:
⑥、后面继续跟着向导操作直到导入成功(导入时需要输入之前设置的证书密码),刷新管理界面看到证书即可。
三、分配证书
①、打开 IIS7.0 管理器面板,找到待部署证书的站点,点击“绑定”
②、选择“绑定”->“添加”->“类型选择 https” ->“端口 443” ->“ssl 证书【导入的证书名称】” ->“确定”,SSL 缺省端口为 443 端口,
确定后,就成功了,你可以通过 https 访问该站点测试效果。当然 https 页面里面是不允许出现 http 资源的,否则浏览器会自动拦截。解决方法就是讲这些 http 资源全改成 https 资源或者将 http://.js 改成 ://.js 这种灵活的相对路径,当然前提是这个资源支持 https 协议。

好了,就分享这么多,比较简单的经验,希望能节省不少苦逼的转换和设置时间!

看过IIS日志时间的人都知道,IIS默认情况下记录的时间是格林威治时间,也就是与我们使用的北京时间相差8个小时,这样一来看日志就很不方便。

今天查看IIS的日志,发现日志记录的时间与实际的时间不一致。比如现在时间是中午12点,而日志里记录的最新时间是凌晨4点,其间相差了8个小时。

原因:IIS默认情况下日志使用的格式为W3C,记录的时间是格林威治时间,也就是与我们服务器系统使用的北京时间相差8个小时

解决办法:日志格式改成“IIS格式”。如果一定要使用W3C格式的话,无解,记录的日期一定会差8个小时。(除非每次手动使用Convlog.exe 实用程序把日志文件日期给更正下)

倒是每天日志文件创建的时间可以以系统时间为准。以IIS7为例,打开IIS Manager -> 日志 -> 勾选“使用本地时间进行文件命名和滚动更新” -> “应用”即可。

对html布局而言,传统的960px『或者鄙人常用的980px』宽度在大分辨率显示上显示时左右两边则会留下富余的空白空间,当分辨率达到23寸的1920px时传统的980px宽度网页布局则意味着显示器上的一半宽度的位置被闲置......

考虑到17寸非主流脑残显示器依然占有不少的份额,同时为大分辨率显示器做适当的适配,一种网页宽度自适应布局应运而生,本文所说的宽度自适应仅仅指pc端的宽度自适应。

理论基点:
1、最小尺寸分辨率1024*768(传统17寸显示器),则可以采用940px、960px、或者鄙人常用的980px作为最小宽度
2、1024768之后稍大的分辨率就是1280768了,则可以采用1200px或者1220px作为稍大的网页宽度
3、支持css3、html5的高级浏览器可以利用CSS3 Media Queries让网页在不同分辨率下自动调节布局标签
4、不支持css3、html5的脑残浏览器特别是<=ie8系列则需要用js以及resize事件来控制html的布局标签宽度了
5、宽度自适应需要对每个显示模块进行不同宽度的计算,在做html布局时需要大量的计算与适配。
6、宽度自适应为不同宽度显示器写布局元素时常用的css

.wrap {
 display:none;
}
.wrapBig .xxx {
 width:xxpx;
}
.wrapSmall .xxx {
 width:xxpx;
}

实现方式:

1、高级浏览器方式,通过media Queries直接控制,比如控制宽度的div类名叫wrap,则有如下代码,此代码仅作抛砖引玉

/**max width 980px**/
@media screen and (max-width:1200px) {
 .wrap {
 width:980px;
 }
}
/**max1280px screen***/
@media screen and (min-width:1200px) {
 .wrap {
 width:1200px;
 }
}

稍微解释下:第一段当浏览器的可显示区域宽度小于1200px时就将类名为wrap的宽度设置为980px,当浏览器的可显示区域大于1200px时则将类名为wrap的宽度设置为1200px。css3的media queries可以通过拖拽浏览器窗口大小即时显示效果!

这样在17寸显示器上时就不会在浏览器的下方出现滚动条,而在大于17寸的显示器上时可以让网页布局宽度增大到1200px,显示更多的内容。