在维护CentOS服务器的日常工作中,安全无疑是重中之重,监控和识别潜在的密码破解尝试是保障系统安全的第一道防线,通过有效地分析系统日志,管理员可以及时发现正在进行的暴力破解攻击、定位攻击源,并采取相应的防御措施,本文将详细介绍在CentOS系统中如何查看和分析密码破解记录,从基础命令到高级技巧,帮助您构建一个更安全的服务器环境。
核心战场:系统日志文件
在CentOS(尤其是6及以下版本)系统中,绝大部分与安全认证相关的事件都会被记录到 /var/log/secure
文件中,而在使用 systemd
的CentOS 7及以上版本中,虽然该文件依然存在并被广泛使用,但更现代的方式是通过 journalctl
来查询 systemd-journald
收集的日志,无论如何,/var/log/secure
仍然是查看SSH、sudo等服务认证活动的首选之地,这个文件忠实地记录了每一次成功或失败的登录尝试,是我们分析密码破解行为的“黑匣子”。
使用基础命令进行初步排查
最直接的方式是使用 grep
、tail
、less
等基础文本处理工具来筛选日志内容。
查看失败的密码登录尝试
暴力破解攻击最显著的特征就是大量的“Failed password”记录,使用以下命令可以快速定位这些记录:grep "Failed password" /var/log/secure
输出结果通常会包含时间戳、主机名、服务名(sshd)、进程ID以及关键信息:尝试登录的用户名、来源IP地址和端口号,通过观察这些记录,您可以初步判断是否存在攻击行为。
查看尝试使用不存在用户名的登录记录
攻击者常常会使用一个常见用户名列表(如admin, test, root等)进行试探,这些记录以“Invalid user”为标志:grep "Invalid user" /var/log/secure
发现大量此类记录,说明攻击者正在进行用户名枚举和猜测。
查看成功的登录记录
为了安全,同样需要关注成功的登录,特别是那些在一系列失败尝试之后突然成功的登录,这极有可能是密码已被攻破的信号。grep "Accepted password" /var/log/secure
结合失败日志,如果发现某个IP在多次失败后成功登录,应立即提高警惕,检查该会话的活动情况,甚至强制断开连接并修改密码。
统计分析,定位攻击源
单个日志条目信息有限,我们需要进行聚合分析来找出最活跃的攻击者,以下是一个经典且高效的命令组合,用于统计尝试破解密码的IP地址及其次数:
grep "Failed password" /var/log/secure | awk '{print $NF}' | sort | uniq -c | sort -nr
让我们分解这个命令链:
grep "Failed password" /var/log/secure
:从日志中筛选出所有密码失败的行。awk '{print $NF}'
:awk
是一个强大的文本处理工具。$NF
代表“最后一个字段”,在这里正好是来源IP地址。sort
:对提取出的IP地址列表进行排序,为下一步去重做准备。uniq -c
:uniq
命令用于报告或忽略重复的行。-c
参数表示在每行旁边显示其连续出现的次数。sort -nr
:对统计结果进行排序。-n
表示按数值排序,-r
表示反向(降序),这样次数最多的IP就会排在最前面。
执行后,您会得到一个清晰的列表,显示哪些IP地址对您的服务器进行了最频繁的密码猜测。
利用专用工具 last
和 lastb
CentOS提供了两个非常方便的命令来查看登录历史:last
和 lastb
。
last
:用于显示最近成功登录的用户列表,它读取/var/log/wtmp
文件。last
通过此命令,您可以查看所有成功的登录记录,包括时间、用户、终端、来源IP和登录时长。
lastb
:专门用于显示最近失败登录的尝试,它读取/var/log/btmp
文件。lastb
这个命令的输出与
last
类似,但内容全是失败的登录尝试,使用lastb | head -n 20
可以快速查看最近的20条失败记录。
这两个工具比直接解析 /var/log/secure
更直观,是快速概览登录状况的得力助手。
实时监控与 journalctl
对于正在进行的攻击,实时监控至关重要。
可以组合使用watch
和tail
命令,每隔几秒刷新一次最新的失败日志:watch "tail -n 20 /var/log/secure | grep 'Failed password'"
在现代CentOS系统中,journalctl
是更强大的工具,您可以实时跟踪sshd
服务的日志:journalctl -u sshd -f
-u sshd
指定了服务单元,-f
参数表示“follow”,类似于tail -f
的实时效果,要筛选失败事件,可以结合grep
:journalctl -u sshd -f | grep "failure"
从被动查看到主动防御
检测到攻击只是第一步,更重要的是采取措施预防。
- 强化密码策略:使用复杂且长度足够的密码,避免使用常见词汇。
- 禁用密码认证,启用密钥对登录:这是最推荐的措施,通过在SSH配置文件(
/etc/ssh/sshd_config
)中设置PasswordAuthentication no
,可以彻底杜绝暴力破解。 - 更改SSH默认端口:将SSH服务从22端口更改为一个不常用的高位端口,可以有效规避大量的自动化扫描脚本。
- 使用自动化封禁工具:安装并配置
fail2ban
或firewalld
的ipset
功能,这类工具能监控系统日志,一旦发现某个IP在短时间内有多次失败尝试,就自动调用防火墙规则将其封禁一段时间。
相关问答 (FAQs)
问题1:我如何区分一次正常的密码输错和恶意的密码破解尝试?
解答:关键在于观察模式和频率,正常的密码输错通常是孤立事件,可能来自一个您信任的IP地址,并且不会频繁发生,而恶意的密码破解(暴力破解)则表现出明显的模式:在短时间内,来自一个或多个IP地址的大量、连续的“Failed password”或“Invalid user”记录,且尝试的用户名通常是常见的系统账户或字典词汇,使用前面提到的统计分析命令,可以很容易地识别出这种高频次的攻击行为。
问题2:除了封禁IP,发现密码破解尝试后,我还能做些什么来加固系统?
解答:封禁IP是应急响应,但根本性的加固更为重要,立即检查所有成功登录的日志,确认没有异常登录,立即为所有相关用户(尤其是root)修改更强壮的密码,长远来看,最有效的措施是全面转向SSH密钥对认证,并彻底禁用密码认证,确保系统及其所有软件包都是最新的,及时修补安全漏洞,并考虑使用端口敲门(Port Knocking)或VPN等更高级的访问控制手段来隐藏您的服务端口。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复