lnmp一键开启waf及使用 Fail2Ban防护

试用了阿里云香港的轻量服务器之后,赶紧确实是一个不错的选择,因此,决定把网站给迁移过来。以前都是用的oneinstack安装包,这是因为军哥的lnmp如果使用mysql5.6以上的话就必须要内存2G衣裳,这次用的就是2G的,所以还是使用lnmp一键安装包比较舒心。和one的区别是,one很多的事项在编译环境的时候已经弄好了,而lnmp需要西西的打磨,这也是一个好事,毕竟服务器不同,弄的规则也不尽一样。闲言少续,开始正体。

lnmp开启waf的方法

LNMP一键安装包从1.5开始增加了lua支持的选项,可以通过修改lnmp.conf中Enable_Nginx_Lua后的参数为 y 来启用lua,如果没安装lnmp,修改lnmp.conf后保存,安装完lnmp就是支持lua的,如果已经安装好lnmp,也是按前面修改lnmp.conf,然后lnmp安装包目录下 ./upgrade.sh nginx 升级nginx,输入当前 nginx 版本号或更新的nginx版本号,升级完成就是支持lua的了。

下载安装ngx_lua_waf:

wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip -O ngx_lua_waf.zip

unzip ngx_lua_waf.zip

mv ngx_lua_waf-master /usr/local/nginx/conf/waf

nginx上设置并启用ngx_lua_waf

编辑 /usr/local/nginx/conf/nginx.conf 在 server_tokens off; 下面添加如下代码:

lua_package_path “/usr/local/nginx/conf/waf/?.lua”;

lua_shared_dict limit 10m;

init_by_lua_file /usr/local/nginx/conf/waf/init.lua;

修改完成保存

如果要想在某个虚拟主机启用ngx_lua_waf可以修改对应虚拟主机的server段,在该server段中 root 网站目录行下面添加如下代码:

access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;

修改完成保存

测试nginx配置文件: /usr/local/nginx/sbin/nginx -t

重载nginx配置生效: /usr/local/nginx/sbin/nginx -s reload

如果测试和重载都没报错就已经生效。

可以通过访问 http://域名/test.php?id=../etc/passwd 来测试

lnmp一键开启waf及使用 Fail2Ban防护

提示:您的请求带有>不合法参数,已被网站管理员设置拦截!说明已经正确设置

ngx_lua_waf配置文件位置:/usr/local/nginx/conf/waf/config.lua

使用 Fail2Ban防护网站及服务器

Fail2Ban 是一种入侵防御软件框架,可以保护计算机服务器免受暴力攻击。它以 Python 编程语言编写,能够在 POSIX 系统上运行,该系统具有本地安装的数据包控制系统或防火墙的接口,例如 iptables 或 TCP Wrapper。

所以要想使用Fail2Ban,就必须让服务器识别来源的真实IP地址,而不是套的cdn的地址。

套用CDN后获取来源的真实IP的方法

在nginx.conf内的http下增加:

自定义一个日志格式

log_format main '$http_x_forwarded_for - $remote_user [$time_local] '

‘”$request” $status $body_bytes_sent ‘

‘”$http_referer” “$http_user_agent”‘;

然后修改access_log /home/wwwlogs/xxxx.log; 为access_log /home/wwwlogs/xxxx.log main;

nginx-t 检查无误后,service nginx restart,现在在看日志文件,里面的地址就是真正的来源地址了。

使用 Fail2Ban 保护 Nginx、WordPress

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Fail2Ban 会自动读取 .local 文件的配置,然后再增量地读取 conf 配置,这样就避免了更新它时你辛辛苦苦写好的配置被覆盖掉了。

然后我们就来编辑 Fail2Ban 的配置

vim /etc/fail2ban/jail.local

首先是在 [DEFAULT] 字段下,我们可以改变一些行为参数,比如这样修改(多余的没有提到的配置就保留默认,不要理会即可):

bantime = 3600 #默认是 10 分钟,这个是说要 ban 多久,我们改长一点#下面这两个是说在多长时间内失败多少次就被屏蔽,#比如这个是在 3600 秒内失败 6 次就被屏蔽findtime = 3600 maxretry = 6

接下来就是添加我们的监狱配置了,默认配置信息中并没有内置 Nginx ,只有 Apache:

[nginx-http-auth]# HTTP 验证防暴力破解enabled  = truefilter  = nginx-http-auth port    = http,https logpath  = /var/log/nginx/error.log  [nginx-badbots]#屏蔽恶意爬虫enabled  = trueport    = http,https filter  = nginx-badbots logpath  = /var/log/nginx/access.log maxretry = 2 [nginx-nohome]#避免恶意请求网站目录结构enabled  = trueport    = http,https filter  = nginx-nohome logpath  = /var/log/nginx/access.log maxretry = 2 [nginx-noproxy]#避免 nginx 被他人用于反向代理enabled  = trueport    = http,https filter  = nginx-noproxy logpath  = /var/log/nginx/access.log maxretry = 2[wp-login]#防范 WordPress 暴力破解登录请求enabled = trueport = http,https filter = wp-login maxretry = 10findtime = 60bantime = 43600logpath  = /var/log/nginx/access.log [xmlrpc]#防止 WordPress 受到 xmlrpc.php CC 攻击enabled = trueport = http,https filter = xmlrpc logpath  = /var/log/nginx/access.log bantime = 43600maxretry = 1findtime  = 5

注意这里的配置都是基于 Nginx 的日志的,所以你必须要允许 Nginx 记录日志,有些管理员为了性能考量会关闭日志,这样我们这篇文章也就失去了意义。

上述配置中 logpath 是指日志文件的路径的(如:/var/log/nginx/access.log),需要注意的是这里可以指定多个日志文件的,具体格式如下:

logpath  = /home/wwwlogs/access.log           /home/wwwlogs/www.1111.com.log           /home/wwwlogs/www.2222.tech.log           /home/wwwlogs/service.3333.com.log           /home/wwwlogs/eat.4444.com.log

每个日志文件需要回车换行(空格直接去掉了,所以可以放心用空格对齐)才能识别到哦!

另,在配置 Fail2Ban 之前,你就应该先安装好 Nginx,否则 Fail2Ban 读不到 Nginx 的日志,会报错。

设置好了要启用的监狱,接下来就是给监狱创建规则了:

cd /etc/fail2ban/filter.d

在这个目录下,存放这所有规则文件,一个配置名一个文件,有多少个文件就有多少个规则,这些规则被上文中监狱配置里 filter 字段调用。

vim nginx-http-auth.conf

这个规则是存在的,我们在规则中加一行配置,来过滤除了账号密码错误外,空白账号或者密码的错误:

[Definition]

failregex = ^ [error] \d+#\d+: \\d+ user “\S+”:? (password mismatch|was not found in “.”), client: <HOST>, server: \S+, request: “\S+ \S+ HTTP/\d+.\d+”, host: “\S+”\s*$

^ [error] \d+#\d+: \\d+ no user/password was provided for basic authentication, client: <HOST>, server: \S+, request: “\S+ \S+ HTTP/\d+.\d+”, host: “\S+”\s$

ignoreregex =

添加的是加粗的那一行。

cp apache-badbots.conf nginx-badbots.conf

过滤爬虫的规则是有现成的,所以我们只需要改个名就可以了;

vim nginx-nohome.conf

这是过滤获取目录的:

[Definition]

failregex = ^<HOST> -.GET ./~.*

ignoreregex =

vim nginx-noproxy.conf

这是过滤反代的:

[Definition]

failregex = ^<HOST> –.GET http.

ignoreregex =

vim wp-login.conf

这是防止 WordPress 受到 xmlrpc.php 请求的 CC 攻击:

[Definition]

failregex = ^<HOST> -. /wp-login.php. HTTP/1..“

ignoreregex =

vim xmlrpc.conf

防范 WordPress 暴力破解登录请求

[Definition]

failregex = ^<HOST> -.*POST .*xmlrpc.php.*

ignoreregex =

跋涉者提示

很多网站上面的代码都不正确,是因为,高亮代码不知道怎么会屏蔽这个语法,造成错误,本文已经更正,放心的使用。

做完上述配置之后,就可以重启

service fail2ban restart

这时你可以通过命令 fail2ban-client status 来查看,不出意外,应该类似这样:

fail2ban-client status 或者:/usr/local/python/bin/fail2ban-client status

Status

|- Number of jail: 7

`- Jail list: nginx-badbots, nginx-http-auth, nginx-nohome, nginx-noproxy, sshd, wp-login, xmlrpc

至此,Fail2Ban 保护 Nginx、WordPress 基本算是完成了,至少跋涉者目前需要的安全策略都完成了,平时可以观察一下 Fail2Ban 的日志文件来观察 Fail2Ban 的防御效果,如:

tail -f /var/log/fail2ban.logiptables --list -n

用 Fail2Ban屏蔽无效的404请求

借助 Fail2Ban 可以筛选出发送这些请求的 IP 地址来进行拦截屏蔽处理,根据日志中返回 404 的记录制定 Fail2Ban 监狱规则命名为 nginx-not-found.conf,具体内容如下:

vim /etc/fail2ban/filter.d/nginx-not-found.conf

打开编辑 nginx-not-found.conf 监狱规则文件,注意一定要在/etc/fail2ban/filter.d/目录内哦。

[Definition] failregex = ^<HOST>.*"(GET|POST).*" (404|444|403|400) .*$ ignoreregex =

保存退出。

再打开编辑 jail.local 启用这个监狱规则。

vim /etc/fail2ban/jail.local

添加下面的代码到 jail.local 里即可。同样的,注意 jail.local 文件的目录哦。

[nginxno404]#处理 nginx 下的恶意 404 结果扫描enabled = trueport = http,https filter = nginx-not-found action = iptables[name=nginxno404, port=http, protocol=tcp] #Fail2Ban 要监控的站点日志文件,大家可以根据自己站点来灵活调整。logpath  = /home/wwwlogs/access.log bantime = 3600 #默认是屏蔽 IP 地址 10 分钟 #下面这两个是说 60 秒内 5 次 404 失败请求就开始屏蔽这个 IP 地址findtime = 60maxretry = 5

保存退出。

重新启动 Fail2Ban:

systemctl restart fail2ban.service

看下日志:

lnmp一键开启waf及使用 Fail2Ban防护

nginxno404已经开始生效,并且Ban了一个ip,14.204.69.48

lnmp一键开启waf及使用 Fail2Ban防护

看一下iptables的记录,如上图,已经拒绝这个IP的访问了

本文参考了落格部落明月登楼博客里的一些文章,在此表示感谢

Read more

开箱|媳妇的华为 Watch Fit 4

开箱|媳妇的华为 Watch Fit 4

媳妇前段时间去南京学习,回来跟我说起一件事:她的同学戴的手表居然能直接接打电话。她说起的时候眼神里有点心动。她平常其实不太喜欢戴这些东西,更结婚没多久的时候,说想要一块手表,也就戴了一段时间,就收藏了起来了。前几年给她买了一只荣耀手环 7,她戴过一阵子,后来也不戴了。 之所以现在又提出来,大概是和她最近工作有关,最近她们科新开了中医护理门诊,有不少患者是冲着她的刮痧来的,所以有时候满手都是刮痧油的情况下,有电话进来的时候,再取手机确实也不太方便。 于是我在京东上搜了一下。没想到就发现了华为 Watch Fit 4 ——白色的表带,颜值简洁大方,价格也不算离谱,不到 800 块钱(如果有国补的情况下,还能便宜不少)。几乎一下就戳中了她的需求,于是毫不犹豫下单。 开箱过程 快递很快,盒子不大,正面是手表的渲染图。拆开之后,里面的东西也很简单: * 手表本体 * 白色硅胶表带(已经装好) * 充电线 * 使用说明书 说实话,这条 充电线还挺让我惊艳的。磁吸式的圆形接口,

By laoliu
粮票里的父爱

粮票里的父爱

前几天在博客群里闲聊,话题莫名其妙地扯到了粮票。我随口说了一句:“当年我爸把全国的粮票攒着不舍得用,说是为了给我和我哥上大学的时候用。”阿均半开玩笑地说:“整理一下这个故事吧,也挺有意思的。”我心里一动,其实不久前还听我爸抱怨呢:“当年给你们攒的粮票,其实也没怎么用上。” 说到粮票,很多年轻人可能都没见过。上世纪八九十年代,粮食和一些生活用品都是按票供应的。手里有粮票才能买粮,没有就只能干着急。那时候的粮票分两种:地方粮票和全国性粮票。地方粮票只能在本地用,而全国性的粮票可以全国通用,更珍贵。 我爸攒的,就是全国粮票。他考虑到我和我哥上大学,不一定会留在甘肃,怕我们去外地没粮票买粮,饿肚子。他省吃俭用,把这些全国粮票默默积攒起来,为我们未来的温饱留着。想象他每天回家,把一张张小票叠好放进抽屉里,那画面真是朴素又让人心安。 求学的道路上,其实父母一直在鼓励我们。父亲看到单位新分来的大学生待遇非常好,意识到知识和学历的重要性;同时,我们家从祖辈开始都没有什么学问,所以望子成龙的期望特别重。放假的时候,除非是集中性的农活,比如收种庄稼、施肥这些有时效的农活,平常的象除草这些活儿都不让我

By laoliu
物必自腐,而后虫生

物必自腐,而后虫生

前几天朋友送了一箱黄桃,一次性吃不了那么多,慢慢的桃子就有点发软,这两天吃桃子的时候,屡屡遇到外表鲜亮,啃两口发现里面已经变质的桃子。这不由的让我想起了一句忘了从哪里看到的话——“物必自腐,而后虫生”。 查了一下资料,出处应该是苏轼的《范增论》。苏轼借楚汉相争,感叹项羽失天下并非因为范增未被重用,而是因为项羽自己内部的问题。于是写道:“物必先腐也,而后虫生之;人必先疑也,而后谗入之。”意思是,万物的败坏,必然从自身腐烂开始,外来的虫子不过是乘虚而入;人的失败,往往是自己心中先起疑念,外来的谗言才有了可乘之机。桃子如此,世间又何尝不是? 一颗桃子,即便外皮光鲜,若果肉先行腐坏,虫子自然会滋生。虫并不是腐烂的原因,而是腐烂的结果。真正决定一颗桃子命运的,不在于外表多么饱满,而在于内里是否坚实清新。 历史上的王朝也是如此。唐宋明清,无不曾强盛一时,但当内部积弊滋生、腐化蔓延时,再坚固的城池也难以自保。外敌入侵只是导火索,真正的根源是自身的腐朽。 组织亦然。一个团队,如果内部保持团结向上,足以抵御风雨;

By laoliu
茶与菩提:慢下来的时光

茶与菩提:慢下来的时光

周末收拾店内的东西,无意中翻出一个纸袋。打开一看,里面是半块普洱茶饼。这块茶饼是媳妇她表哥送的。刚拿到手时,我兴致勃勃地撬下一点泡来喝。慢慢地,三两次、五六次,一块完整的茶饼就被消耗掉了一半。后来是因为茶壶被摔坏了,改用玻璃杯泡绿茶,也就放在那了。都说普洱茶的妙处,就在于它“越陈越香”。这两年,它是不是也在悄悄发生着变化呢? 茶汤里的岁月 普洱分为生普和熟普。生普茶汤清亮,滋味苦涩中带着一丝清甜,回甘悠长,那是岁月的原味,直接而真切。熟普则是经过人工发酵,褪去了青涩,变得醇厚温润。茶汤红浓明亮,入口顺滑,带着独特的陈香,仿佛一位历尽风霜的长者,沉稳而内敛。我这一块,是熟普。撬下一点,用开水冲泡,茶汤渐渐转为红褐色,透着微微的枣香。轻轻啜一口,醇厚顺滑,温润入喉。这不只是一杯茶,更是一段被遗忘的时光。 菩提的光泽 喝茶的时候,瞥见了柜子里的那一串星月菩提。那是2015年买的,这些年不知不觉间,

By laoliu