通过swoole毫秒定时器,写脚本防暴力破解

  • Last updated on 2020-05-27
  • 1035
PHP   Swoole   Linux  
一、前言:

使用 lastb 命令,可以查看当前系统登录失败的记录日志,如果很多,那就说明你可能被黑客盯上了。

注意:该教程,是基于swoole的毫秒定时器,因此必须有以下几个条件:

1、php > 7.1

2、安装了swoole 扩展。 Linux 源码编译安装 Swoole 扩展教程

 

二、行动

1、编写脚本,将 ssh 登录失败次数超过 3 次的 ip 直接加入 hosts.deny 文件

/data/sciprt/denyHost.sh

  1. #!/bin/bash
  2. #Denyhosts SHELL SCRIPT
  3. cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"=" $1;}' >/root/denyHost.txt
  4. DEFINE="3"
  5. for i in `cat /root/denyHost.txt`
  6. do
  7. IP=`echo $i|awk -F= '{print $1}'`
  8. NUM=`echo $i|awk -F= '{print $2}'`
  9. if [ $NUM -gt $DEFINE ]
  10. then
  11. ipExists=`grep $IP /etc/hosts.deny |grep -v grep |wc -l`
  12. if [ $ipExists -lt 1 ]
  13. then
  14. echo "sshd:$IP" >> /etc/hosts.deny
  15. fi
  16. fi
  17. done

 
2、创建脚本执行文件 /data/script/denyHost.php

  1. <?php
  2. declare(strict_types = 1);
  3. class DenyHost
  4. {
  5. public function index()
  6. {
  7. $shell = 'sh /data/script/denyHost.sh';
  8. shell_exec($shell);
  9. }
  10. }
  11. swoole_timer_tick(500, function ($timerId) {
  12. (new DenyHost())->index();
  13. });

 
3、添加记录文件

  1. cd ~
  2. touch denyHost.txt

 
4、给予sh脚本权限

  1. cd /data/script
  2. chmod 777 denyHost.sh

 
5、运行php脚本

  1. cd /data/script
  2. php denyHost.php

目前是可以随时ctrl c 打断这个脚本执行的,我们可以在后台运行这个php脚本

  1. nohup php /data/script/denyHost.php &

 
6、如果要结束这个php脚本在后台运行

  1. # 找到这个php脚本的pid
  2. ps -a | grep php
  3. # 返回结果
  4. 381 pts/0 00:00:00 php
  5. kill -9 381

 
说明:这里使用的是swoole的毫秒定时器,较之 linux 自带的 crontab 定时任务,好处在于,swoole 的毫秒定时器最小单位可以是毫秒,而 crontab 最小单位是每分钟,实现防暴力破解并不理想。

 
7、验证效果

  1. cat -n /etc/hoshts.deny

 

 



Top