土豆不好吃

利用ufw或者Nginx拉黑对xmlrpc.php的暴力破解

文章目录[显示]
这篇文章在 2018年07月18日16:19:52 更新了哦~

终于考完试啦,加点黑名单玩玩,没有技术含量的水水水   

最近一定没人会问,博主你干嘛去了,都一个月没更新博文了。哎,实属无奈啊,我昨天才考完“软件工程”,一直忙着复习来着。提到软件工程,我就想讲个笑话。

有一天,有人夸我,小伙子你挺厉害啊,什么专业的?我说,SE的。他问,SE是啥?我说,是Shit Eating啦;
又有一天,有人问我,你这专业都学啥啊?我说,CS啊。他很惊讶,天天打游戏?我说,不,是Create Shit啊。

此笑话如此无情的讽刺了中国高校的软工教育和所谓“软件工程”。

虽说这一科考完了,但还是剩下很多待考的东东...还全都是背的。但至少在现在的这个空档,让我水水博文吧!

目前的一个小小的问题就是,总是有人暴力破解后台,其中包括对xmlrpc.php的,也有wp-login.php的。对于xmlrpc的破解,只能在日志里看到;wp-login.php有插件可以帮忙处理。

我就先手动处理下吧,备忘。

xmlrpc.php是什么

XML-RPC 是 WordPress 用于第三方客户端(如 WordPress iPhone 和安卓客户端,Windows Live Writer 等)的 API 接口,还可以用于 pingbacks 和 trackbacks 端口,作为站点之间的通讯桥梁。

简而言之,当你使用Word的文件-共享-发布至博客将你的文章发布到WordPress的时候,就会使用到这个文件。

xmlrpc.php的风险

这东东,很危险的——暴力破解嘛,还没有验证码什么的。

应对措施

稍微搜索一下便知,好多办法啊。直接删掉,000权限,禁用掉rpc服务,改个别人猜不到的名字,等等。

但是呢,我就想小小的做一个蜜罐——我的黑名单已经饥渴难耐了。

然而我并不太会shell脚本,实在无能为力写一个自动分析日志并加黑名单的脚本啊……还不想用插件,所以只能偶尔手动玩了。


GitHub上搜索到了一些脚本,传送门

处理办法

揪出来大量post xmlrpc.php的IP

grep -a 'xmlrpc.php' dmesg.app.log | awk '{print $1}'

之后我们需要把这个IP里出现次数最多的那几个找出来,然后判断是不是自己所为。

这个我暂时没找到好的办法——但是可以确定的是shell脚本可以很方便的做到这点,C++ STL中的count()也很方便。

#利用正则表达式去除重复行
(^.*\n)(?=\1)
#查询某个IP在日志中出现次数
grep -o '123.206.87.223' dmesg.app.log |wc –l
#去除重复行
sort -k2n file | uniq > a.out

封禁手段

1. Nginx黑名单

vim /usr/local/nginx/conf/blackip.conf

然后把IP(或者是CIDR表示法)放到黑名单里吧

deny 1.2.3.4;
deny 1.2.3.4/16;

修改nginx配置文件,将blackip.conf包含到配置文件之中

vim /usr/local/nginx/conf/nginx.conf
include blackip.conf;

然后保存退出

之后重启nginx或者重新加载配置,黑名单即生效。

#重启nginx,以下三选一
service nginx restart
systemctl restart nginx.service
/etc/init.d/nginx restart
#重载配置
nginx -s reload

 

2.ufw封禁

ufw就是umcomplicated firewall,是Ubuntu上的基于iptables的防火墙,使用起来比较方便,不像iptables规则那么变态……

来看看基本用法吧,也是我的配置方法

#默认入网规则全部拒绝
ufw default deny
#允许22号、TCP/UDP协议、从任何位置入网请求
ufw allow 22
#允许SSH协议、从任何位置入网请求
ufw allow ssh
ufw allow http
ufw allow https
#启用防火墙
ufw enable
#显示防火墙状态和规则数字
ufw status numbered
#删除2号规则
ufw delete 2
#阻止192.168.1.5对所有端口的入网请求
ufw deny from 192.168.1.5 to any
#阻止192.168.1.5对所有443(HTTPS)的入网请求
ufw deny from 192.168.1.5 to any port 443
#查看ufw日志
 less /var/log/ufw.log
#重置ufw
ufw reset
一定要注意,如果你是通过SSH连接到服务器的,请第一步就添加ssh对应端口的入网请求(默认是22)

但是,
ufw这家伙有点逗。我先ufw default deny将默认规则改成禁止入网,再添加http,https,ssh的入网规则,为了测试效果就把自己的IP给deny了,刷新网站发现没效果啊!查了些资料,发现ufw是规则匹配模式,从上匹配到下,匹配到符合规则的就停止,而后加的规则是在下面的,必然就被无视了。所以,那该怎么办呢?
聪明的你一定想到了,那插入规则到第一行不就得了。

#禁止14.3.20.228访问443,插入规则到第一行。
ufw insert 1 deny from 14.3.20.228 to any port 443
小提示:deny,reject,limit区别
除了deny,还有reject和limit两种语法,根据manual,他们的区别是:
limit: connection rate limiting ufw会允许连接到该端口,但是一个IP如果在30秒钟之内尝试6次,那么就暂时封禁。这也就意味着
ufw limit ssh是很必要的
reject:给出拒绝原因而不是deny直接拒绝什么提示都没有。

文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/semi-auto-blacklist.html
退出移动版