IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

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

昔我往矣 2022-06-19 18:15:01 累计浏览 4,751 次
本机暂存

   将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. 绿盟科技《APT组织研究年鉴》(2026 版)正式发布 (2026-06-16 20:21:10)
  2. 【已复现】Linux内核Fragnesia权限提升漏洞(CVE-2026-46300) (2026-06-15 10:53:58)
  3. 企业文档安全最佳实践(二):给文档上“身份证”——手动标密与智能自动标密 (2026-06-12 17:18:33)

查看更多 安全 文章 →

建议继续学习

  1. Bash的模式和配置文件加载 (累计阅读 24,405)
  2. 高效Linux用户需要了解的命令行技能 (累计阅读 12,823)
  3. linux 建立两台机器的信任关系 (累计阅读 11,481)
  4. 利用脚本分析日志并利用snmp自定义OID,再通过cacti画图 (累计阅读 10,066)
  5. linux中设置alias永久生效 (累计阅读 9,604)
  6. Bash脚本15分钟进阶教程 (累计阅读 9,055)
  7. sshd+chrome+switchsharp翻墙 (累计阅读 8,784)
  8. 你可能不知道的Shell (累计阅读 8,311)
  9. Linux shell脚本使用while循环执行ssh的注意事项 (累计阅读 8,186)
  10. Bash 小技巧:给目录加上书签,快速切换目录 (累计阅读 8,080)