服务器SSH登录失败尝试频繁发生,直接原因是攻击者通过暴力破解手段试图入侵系统。CentOS运维中,我们通过配置SSH告警和自动封禁机制来应对:实时监控登录日志,一旦发现异常尝试立即触发邮件或钉钉告警,并借助fail2ban工具自动封锁可疑IP地址。具体操作包括修改sshd_config强化认证、部署日志分析脚本、设置防火墙规则,以及利用crontab定时报告。下面将分步骤详解配置方法。

一、SSH登录失败监控与告警配置

首先,我们需要监控/var/log/secure日志文件,它记录了所有SSH登录尝试。通过编写Shell脚本分析"Failed password"关键字,我们可以实时捕捉失败事件。创建一个脚本/opt/ssh_monitor.sh,内容如下:

#!/bin/bash
LOG_FILE="/var/log/secure"
ALERT_EMAIL="admin@yourdomain.com"
TEMP_LOG="/tmp/ssh_failed.tmp"

# 分析最近5分钟内的失败登录
grep "Failed password" $LOG_FILE | awk -v d1="$(date --date='5 minutes ago' '+%b %e %H:%M')" \
  -v d2="$(date '+%b %e %H:%M')" '$0 > d1 && $0 < d2' > $TEMP_LOG

FAIL_COUNT=$(wc -l < $TEMP_LOG)
if [ $FAIL_COUNT -gt 10 ]; then
    echo "警报:过去5分钟内检测到 $FAIL_COUNT 次SSH登录失败尝试!" | \
    mail -s "SSH登录异常警报" $ALERT_EMAIL
    # 可扩展为发送钉钉/企业微信消息
fi

脚本每5分钟检查一次失败登录次数,超过10次即触发邮件告警。使用crontab定时执行:*/5 * * * * root /opt/ssh_monitor.sh。同时,建议启用SSH双因素认证,修改/etc/ssh/sshd_config:将PasswordAuthentication设为no,并启用PubkeyAuthentication yes

二、使用fail2ban自动封禁恶意IP

fail2ban是自动封禁IP的关键工具。安装命令:yum install epel-release -y && yum install fail2ban -y。创建自定义配置文件/etc/fail2ban/jail.local:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 5
bantime = 3600
findtime = 600
action = iptables[name=SSH, port=ssh, protocol=tcp]

此配置表示:10分钟内同一IP失败5次,则封禁1小时。启动服务:systemctl start fail2ban && systemctl enable fail2ban。可通过fail2ban-client status sshd查看封禁列表。对于云服务器,建议配合云厂商的防火墙API,实现更彻底的IP封锁。

三、强化防火墙与系统层防护

除了fail2ban,我们应直接配置防火墙规则。使用firewalld或iptables限制SSH端口访问:仅允许可信IP段。例如,firewalld命令:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept',然后拒绝其他IP。同时,修改SSH端口为非标准端口(如2222)可减少扫描:编辑sshd_config中的Port 2222。注意,更改端口后需更新防火墙和SELinux规则:semanage port -a -t ssh_port_t -p tcp 2222

四、日志聚合与可视化分析

对于多台服务器,集中管理日志更高效。部署ELK栈(Elasticsearch、Logstash、Kibana)或轻量级方案如Loki+Promtail。配置Logstash管道,过滤secure日志中的失败事件,并设置Kibana仪表板展示实时攻击地图。这不仅能提供历史趋势分析,还能识别攻击模式,例如来自特定国家IP的密集尝试。此外,可用Prometheus监控SSH服务状态,配合Grafana设置阈值告警。

五、进阶防护策略与自动化响应

当基础防护不足时,考虑以下进阶措施:

1. 设置基于时间的访问控制,例如仅工作日允许SSH登录;

2. 集成威胁情报API,自动封禁已知恶意IP列表;

3. 使用脚本自动备份封禁记录,并分析攻击来源。示例脚本片段:

#!/bin/bash
# 提取被封禁IP并生成报告
fail2ban-client status sshd | grep "IP list" | awk '{print $4}' | \
while read IP; do
    whois $IP | grep -i "country\|netname" >> /var/log/ssh_attack_report.log
done

定期审计SSH密钥和用户权限,禁用root远程登录,并采用端口敲门(port knocking)技术隐藏SSH端口。这些方法叠加使用,可构建纵深防御体系。

六、恢复与应急处理流程

若发生误封或需紧急解封IP,执行:fail2ban-client set sshd unbanip 192.168.1.100。同时,保持一个备用管理通道(如控制台VNC或预留白名单IP),避免锁死自己。建议每周审查封禁日志,清理过期记录,并调整防护阈值。关键是要形成文档化流程,确保团队任何成员都能快速响应。

总结而言,CentOS下SSH登录防护需多层次结合:从实时告警、自动封禁到日志分析和防火墙强化。通过上述配置,不仅能有效阻断暴力破解,还能提升整体安全水位。务必定期测试防护规则,并保持系统更新,以应对不断演进的攻击手法。