技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 安全 --> 一句话crontab实现防ssh暴力破解

一句话crontab实现防ssh暴力破解

浏览:2596次  出处信息

   将vps在公网上,难免会有居心叵测的人扫描,及时换了非标准的端口,依旧难以避免。因此编写一条Bash命令,放在crontab里,发现坏人立刻封掉ip。

   一句话命令如下:

$ crontab -l
* * * * *  journalctl -u ssh.service --since="24 hours ago" | awk '/Failed password/{if(NF>15){ips[$13]++}else{ips[$11]++}}END{for(ip in ips){if(ips[ip]>3){print ip}}}' | while read ip; do grep $ip$ /etc/hosts.deny > /dev/null || echo "ALL: "$ip | sudo tee -a /etc/hosts.deny ; done

   功能:24小时内输错5次ssh密码的客户端ip,将立刻被添加到 /etc/hosts.deny 文件里做黑名单处理。

   简单解析:

   该条语句可以按三个管道符号进行分割,下面分别讲解。

   管道的第一部分:使用 journalctl 命令查询最近24小时内的登录日志,该命令适用于使用systemd的系统,如果非systemd,可以换成从 /var/log/secure 文件过滤日志。

   管道的第二部分:主要是awk过滤登录失败日志,关键字Failed password。对登录失败的ip地址进行统计,输出失败次数大于3次的ip地址。此处用到了awk的数组功能做统计。

   管道的第三部分:去重,避免重复添加IP到/etc/hosts.deny文件中。使用while语句判断ip地址是否已经在 /etc/hosts.deny中,如果不在,则使用tee命令进行追加。

   该命令不仅实用,而且还很有趣。个人以为十分有学习价值。

建议继续学习:

  1. Linux shell脚本使用while循环执行ssh的注意事项    (阅读:6737)
  2. 在ssh服务里使用chroot    (阅读:4925)
  3. 为什么要用公钥/私钥而不是密码去做SSH身份验证    (阅读:4764)
  4. 懒人连ssh不输密码若干大法    (阅读:4558)
  5. ssh连接超时解决办法    (阅读:4551)
  6. 如何让ssh登录更加安全    (阅读:4557)
  7. ssh命令    (阅读:4289)
  8. SSH无密码登录    (阅读:4343)
  9. ubuntu定时执行任务crontab的使用    (阅读:3744)
  10. 共享会话的ssh连接配置    (阅读:3649)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1