Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226420
  • 博文数量: 70
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 440
  • 用 户 组: 普通用户
  • 注册时间: 2015-08-09 09:16
个人简介

淡泊以明志,宁静以致远。

文章分类

全部博文(70)

分类: 网络与安全

2020-09-16 07:15:30

本文通过编写shell脚本,利用ipset(本文不涉及ipset安装)实现功能如下:

root用户最近登录失败的IP,如果登录失败次数达到允许的最大次数(15次)后,判定为入侵ip,将其加入ipset黑名单进行防御。

一、编写如下脚本,命名为:add_ipset_droplist.sh

点击(此处)折叠或打开

  1. #!/bin/bash
  2. # Add bad ip to ipset list droplist.
  3. #
  4. # Define failed login times 定义某个ip下root登录允许的最大失败次数(这里设置的是最多15次):
  5. Max_Failed_Logins=15
  6. #
  7. bad_ip_list=$(mktemp -t bad_ip.XXXXXX)
  8. pam_tally2 --user | gawk '/root/{print $5}' > ${bad_ip_list}
  9. BadIP=$(cat ${bad_ip_list})
  10. #echo "The BadIP is: ${BadIP}"
  11. # local login such as /dev/pts/0 is not in limit. 终端登录不作处理。
  12. sed -n '/pts.[0-9]/w /tmp/ptsisok.nosee' ${bad_ip_list}
  13. ptsisok=$(cat /tmp/ptsisok.nosee | wc -l)
  14. if [ ${ptsisok} -gt 0 ]
  15. then
  16. rm -f /tmp/ptsisok.nosee
  17. #echo "ptsisok is: ${ptsisok} "
  18. BadIP=""
  19. fi
  20. # 删除建立的临时文件
  21. if [ -e /tmp/ptsisok.nosee ]
  22. then
  23. rm -f /tmp/ptsisok.nosee
  24. fi
  25. rm -f $bad_ip_list
  26. # Search lastest 8000 items from /var/log/secure 查看日志记录的最新8000条记录
  27. Failed_Logins=$(tail -8000 /var/log/secure | grep "Failed password for root" | sed -n '/'${BadIP}'/p' | wc -l)
  28. #echo "The Failed_Logins is: ${Failed_Logins}"
  29. #
  30. # 将入侵IP添加到ipset黑名单droplist
  31. if [ ${Failed_Logins} -gt ${Max_Failed_Logins} ]
  32. then
  33. ipset add droplist ${BadIP} 2> /dev/null
  34. service ipset save
  35. fi

注意:以上脚本中,本机的ipset黑名单为:droplist,需将其替换为你自己的ipset黑名单。

二、将脚本移动到 /etc/rc.d/ 目录下,并赋予脚本可执行权限

[root@iqtzs_cn ~]# cp add_ipset_droplist.sh /etc/rc.d/

[root@iqtzs_cn ~]# chmod u+x add_ipset_droplist.sh

三、添加crontab定时任务,设置每3分钟执行一次:

点击(此处)折叠或打开

  1. # 添加crontab定时,执行间隔为3分钟。
  2. [root@iqtzs_cn ~]# vim /etc/crontab
  3. SHELL=/bin/bash
  4. PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
  5. MAILTO=root
  6. # For details see man 4 crontabs
  7. # Example of job definition:
  8. # .---------------- minute (0 - 59)
  9. # | .------------- hour (0 - 23)
  10. # | | .---------- day of month (1 - 31)
  11. # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
  12. # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
  13. # | | | | |
  14. # * * * * * user-name command to be executed
  15. 0/3 * * * * root /etc/rc.d/add_ipset_droplist.sh
0/3 * * * * root /etc/rc.d/add_ipset_droplist.sh 

通过查看日志,可以看到crontab每3分钟执行一次:

[root@iqtzs_cn ~]# tail -50 /var/log/cron | grep add_ipset_droplist.sh
Sep 10 12:55:01 iqtzs_cn CROND[14251]: (root) CMD (/etc/rc.d/add_ipset_droplist.sh)
Sep 10 12:58:01 iqtzs_cn CROND[14805]: (root) CMD (/etc/rc.d/add_ipset_droplist.sh)

至此,每3分钟就会执行一次,会把发现的多次入侵ip加入黑明白拒绝访问,网络安全防御级别提升。经测试,在使用PAM锁定多次登录失败的用户基础上,可以很有效的拒绝恶意IP的SSH暴力破解。

说明:以上操作均在CentOS 7 64位系统上进行。

参考:

  1. Centos7 设置定时任务
阅读(1944) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~