登录
  • 人们都希望被别人需要 却往往事与愿违
  • 我每天都自问: '如果今天是我生命的最后一天, 我还会做今天打算做的事情吗?@史蒂夫·乔布斯

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

建站运维 Benny小土豆 8199次浏览 2410字 8个评论
文章目录[显示]
这篇文章在 2018年07月18日16:19:52 更新了哦~

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

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

有一天,有人夸我,小伙子你挺厉害啊,什么专业的?我说,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
喜欢 (3)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论(代码和日志请使用Pastebin或Gist)
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(8)个小伙伴在吐槽
  1. 第一眼看成gfw, 233333. 话说fw从来都是 iptablesfire/firewalld, 感觉firewalld更容易使用些
    23332016-06-25 14:51 回复
    • 哈哈哈我也想说我自己也看错好多次,像我这种小白(兔),写iptables规则会死的?
      Benny小土豆2016-06-25 15:06 回复
      • 我也觉得iptables的规则好难,所以一般都是用firewalldfire,不到万不得已,是不会用iptables的说,虽然iptables真的好强大
        23332016-06-25 16:01 回复
        • 是啊,规则太复杂,所以有很多比较友好的基于它的“前端”
          Benny小土豆2016-06-25 16:26
  2. 1、配合fail2ban加正则表达式更好用; 2、我得去看看我博客……
    落格博客2016-06-25 13:46 回复
    • 我的正则只停留在[a-z]的水平,你的博客怎么啦?
      Benny小土豆2016-06-25 13:49 回复
      • ……我没有查过这个的暴力破解……
        落格博客2016-06-25 13:54 回复
        • 要注意自己的IP哟:-O
          Benny小土豆2016-06-25 13:57