近期遇到了一些手里有点资源的脚本小子,每天都在尝试爆破我的ssh密码:

我简单的统计了一下IP地址所在隶属的组织关系,目测大都是一些少有人维护的公有云主机,被日了之后成了某些脚本小子们手里的肉鸡,来源地大都是国外,不过也不保证是某些人买了国外的肉鸡。
之前有尝试过更改端口号,不过在写脚本的时候通用性不好,毕竟现在规模还太小了,没必要为此写一个cmdb,所以最终决定自行处理一下。
有人推荐使用fail2ban,考虑过,不过由于目前不需要考虑效率问题,而且量不是很大,所以决定先用一个简单的shell脚本来实现。
目前的想法比较简单,通过刚刚截图中的日志,我们可以清晰的看到因为密码错误登录失败的IP地址,那么通过对这些IP地址进行拉取并统计,即可获取每个IP地址尝试错误密码的次数。
所以,我们可以每隔一段时间对这个日志文件进行一次分析,从分析对结果中拉取尝试使用密码登录但是失败了的IP地址的尝试次数,如果超过指定次数,则拉入/etc/hosts.deny。
之后,修改/etc/logrotate.d/syslog, 限定日志切割的周期,比如一周。
这样,之后再有来试机器ssh密码的情况,就可以送他去小黑屋关禁闭了。
咦?你说为啥不添加到iptables里,用防火墙服务来阻断?
那我问你,你见过每时每刻都在进行且无人审批的网络变更么?说白了,自动化运维的前提是有人能进行global级别的handle,而且需要对每一个change进行approval。真的想完全自动化、抛弃manual approval,需要有大量对实验样本才能实现,这个思想叫做AIOPS,几年前的GOPS大会上一直有人在畅想并push这个概念。但是追其本质,其只能在一定程度上尽可能减少ops的工作量、降低运维团队的人员成本,但是不能替代掉整个ops团队和能handle该项目的人员。