终于考完试啦,加点黑名单玩玩,没有技术含量的水水水
最近一定没人会问,博主你干嘛去了,都一个月没更新博文了。哎,实属无奈啊,我昨天才考完“软件工程”,一直忙着复习来着。提到软件工程,我就想讲个笑话。
有一天,有人夸我,小伙子你挺厉害啊,什么专业的?我说,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
但是,
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两种语法,根据manual,他们的区别是:
limit: connection rate limiting ufw会允许连接到该端口,但是一个IP如果在30秒钟之内尝试6次,那么就暂时封禁。这也就意味着
ufw limit ssh是很必要的
reject:给出拒绝原因而不是deny直接拒绝什么提示都没有。