不安分的黑客成天想着暴力破解别人的密码,这个可以从/var/log/secure日志里面看到端倪:
cat /var/log/secure | awk '/Failed/{print $0}' | head -10
需要注意的是,后面的port 51688之类的描述并非我的ssh登录端口,而是这些黑客使用的端口号,这串IP就是黑客使用的IP了,这些登录失败信息会被记录到secure日志里面,是因为黑客已经试探出了我的登录ssh端口号!如果连端口号都不对是不会被记录到这个日志里的。
看下上面的命令,cat读取日志全部内容,awk '/Failed/输出带有Failed的字符串的行,{print $0}打印所有列的信息,所以输出的类似于如下的内容
Oct 4 16:19:56 VM-0-2-centos sshd[2508452]: Failed password for root from 134.122.92.218 port 51942 ssh2
都到了这一步,我就干脆统计了下IP,可以看到IP在倒数第4列(awk中默认以空格为分隔符),NF是awk中内置变量(列数),例如
cat /var/log/secure | awk '/Failed/{print $NF}' | head -5
直接调用NF,输出了最后一列值的内容,所以为了获取倒数第4列内容,可以使用如下代码:
cat /var/log/secure | awk '/Failed/{print $(NF-3)}'
再深入一点,获取每个IP试探的次数:
cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | sort -nr
图片
可以看到试探还是挺多的,闲着无聊,干脆把日期也打印出来看下
cat /var/log/secure | awk '/Failed/{print $1,$2,$(NF-3)}' | sort | uniq -c | sort -nr
这些我目前采取的办法是通过安全组全部拉入小黑屋,但是手动添加太麻烦了,考虑自动化处理。
这里面需要考虑的是如何在云服务器上禁止IP访问指定的端口,防火墙肯定可以,但是得写脚本,由于服务版本为centos 8,所以无法像centos 6、7编辑/etc/hosts.allow and /etc/hosts.deny文件来禁用IP,但是我在参考文章时,发现里面有个评论,说进入到以下文件
vim /etc/pam.d/sshd
添加如下内容,取消掉注释
# account required pam_access.so
就可以使用deny和allow文件了,未验证。
最简单的办法就是安装Fail2Ban,文章参考在下方第二篇。
yum install fail2ban
systemctl enable fail2ban && systemctl start fail2ban
systemctl status fail2ban.service
这个时候就ok了,可以测试下,默认是连续5次密码输入错误就封禁10分钟,测试一下
tail -f /var/log/secure
我们也可以看下配置文件,复制一份.local文件是为了防止fail2ban在升级时会自动覆盖jail.conf文件,将配置的内容写入到local文件中就不会丢失自定义的更改了,fail2ban会自动读取这两种配置文件:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
echo "" > jail.local
vim /etc/fail2ban/jail.local
填入以下代码:
[DEFAULT]
# Ban IP/hosts for 24 hour ( 24h*3600s = 86400s):
bantime = 86400
# An ip address/host is banned if it has generated "maxretry" during the last "findtime" seconds.
findtime = 600
maxretry = 3
# "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban
# will not ban a host which matches an address in this list. Several addresses
# can be defined using space (and/or comma) separator. For example, add your
# static IP address that you always use for login such as 103.1.2.3
#ignoreip = 127.0.0.1/8 ::1 103.1.2.3
# Call iptables to ban IP address
banaction = iptables-multiport
# Enable sshd protection
[sshd]
enabled = true
重启fail2ban之后,可以使用如下命令查看分组
fail2ban-client status
fail2ban-client status sshd
可以看到,黑名单里面已经存在我的IP了(因为已经多次输入密码失败)。
也可以使用如下命令查看黑名单的更多信息:
tail -f /var/log/fail2ban.log
参考:
https://cloudcone.com/docs/article/how-to-restrict-ssh-access-only-to-specific-ips/
# fail2ban
https://www.cyberciti.biz/faq/how-to-protect-ssh-with-fail2ban-on-centos-8/
https://baijiahao.baidu.com/s?id=1668945207293073822&wfr=spider&for=pc