问题背景
只要服务器暴露在公网上,SSH 端口扫描和暴力破解几乎是必然发生的。笔者的测试环境服务器,上线第一天就收到了暴力破解告警——日志里充满了来自全球各地的破解尝试,目标账号从 root 到 admin 到 test 到 oracle,无所不包。
暴力破解的原理很简单:攻击者用自动化工具,遍历常见用户名和密码字典,尝试登录 SSH 服务。由于很多运维工程师习惯使用弱密码(如 root/123456、admin/admin),攻击者总有成功的机会。一旦成功,攻击者就会在服务器上植入后门、挖矿程序,或以此为跳板攻击内网其他机器。
这篇文章面向初中级 Linux 运维工程师,系统讲解 SSH 暴力破解的防御手段,从密码策略、公钥认证、fail2ban、端口伪装到入侵检测,逐层加防。每种手段都有具体的配置步骤和验证方法。
第一步:知己知彼——查看攻击日志
在动手加固之前,先看看攻击者的"工作成果"。
1.1 查看 SSH 登录失败记录
# CentOS/RHEL:查看 secure 日志 sudo tail -500 /var/log/secure | grep -i "failed password" # Ubuntu/Debian:查看 auth 日志 sudo tail -500 /var/log/auth.log | grep -i "failed password"
1.2 统计攻击者 IP 和尝试次数
# 从日志中提取攻击者 IP 并统计次数
# CentOS
sudo grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -rn | head -20
# Ubuntu
sudo grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -20
# 如果有公钥认证失败的记录
sudo grep "Publickey" /var/log/auth.log | grep "Failed" | awk '{print $11}' | sort | uniq -c | sort -rn | head -10
1.3 统计被攻击的目标账号
# 查看哪些账号被尝试登录
# CentOS
sudo grep "Failed password" /var/log/secure | awk '{print $9}' | sort | uniq -c | sort -rn | head -20
# Ubuntu
sudo grep "Failed password" /var/log/auth.log | awk '{print $9}' | sort | uniq -c | sort -rn | head -20
1.4 查看是否有成功的登录
# 查看成功的 SSH 登录
# CentOS
sudo grep "Accepted" /var/log/secure | awk '{print $9, $11, $13}'
# Ubuntu
sudo grep "Accepted" /var/log/auth.log | awk '{print $9, $11, $13}'
# 查看最近一次成功登录的时间和来源
# CentOS
sudo last | head -20
# Ubuntu
sudo last | head -20
# 查看 root 登录记录
sudo last root | head -10
# 如果发现陌生 IP 的成功登录记录,需要立即排查
1.5 查看攻击者常用账号字典
从日志中可以看到,攻击者会尝试的常见用户名包括:
root, admin, user, test, guest, oracle, mysql, postgres, ubuntu, centos, debian, www-data, apache, nginx, tomcat, redis, mongodb, postgres, backup, ftp, nagios
结论:如果你的服务器上有这些账号且使用弱密码,基本等于门户大开。
第二步:最彻底的防御——禁用密码登录,改用公钥认证
2.1 原理
密码认证的缺陷:
密码可以被猜测、暴力破解
密码可以被键盘记录器、钓鱼网站窃取
弱密码(123456、password、admin)几乎是秒破
公钥认证的优势:
基于非对称加密,无法被暴力破解
私钥文件即使泄露,也通常有 passphrase 保护
除非攻击者拿到了你的私钥文件,否则无法登录
2.2 生成 SSH 密钥对
# 在你的本地电脑(不是服务器)上执行 # Windows: 使用 PowerShell 或 Git Bash # macOS/Linux: 使用 Terminal ssh-keygen -t ed25519 -C "your_email@example.com" # Generating public/private ed25519 key pair. # Enter file in which to save the key (/home/username/.ssh/id_ed25519): # 直接回车使用默认路径 # Enter passphrase (empty for no passphrase): 输入一个强密码 # Enter same passphrase again: 确认密码 # 如果服务器不支持 ed25519(很老的系统),使用 RSA ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
2.3 将公钥上传到服务器
# 方法一:使用 ssh-copy-id(最简单) ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@# 方法二:手动复制 # 先用密码登录一次(最后一次) cat ~/.ssh/id_ed25519.pub # 复制输出的内容 # 在服务器的 ~/.ssh/authorized_keys 文件中添加这一行 ssh admin@ mkdir -p ~/.ssh chmod 700 ~/.ssh echo " " >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys # 验证 exit
2.4 修改 SSH 配置禁用密码登录
# 编辑 SSH 配置文件 sudo vi /etc/ssh/sshd_config # 确保以下配置存在且未被注释: # 启用公钥认证 PubkeyAuthentication yes # 禁用密码认证 PasswordAuthentication no # 禁用空密码登录 PermitEmptyPasswords no # 禁用 challenge-response 认证(也会绕开密码) ChallengeResponseAuthentication no # 确保 UsePAM 是 yes(Ubuntu 默认) UsePAM yes
2.5 重启 SSH 服务并验证
# 重启 SSH 服务 sudo systemctl restart sshd # 重要:在退出当前 session 前,先测试新登录方式是否正常 # 新开一个终端,不要关闭当前 session,执行: ssh -i ~/.ssh/id_ed25519 admin@
2.6 验证配置是否生效
# 在本地测试:用密码登录应该被拒绝 ssh admin@# 输入密码后应该看到: # Permission denied (publickey,password). # 用公钥登录应该成功 ssh -i ~/.ssh/id_ed25519 admin@ # 应该不需要输入密码即可登录 # 在服务器上查看日志(如果有失败尝试,说明配置可能有问题) sudo tail -20 /var/log/secure | grep sshd
第三步:fail2ban 自动封禁攻击者 IP
即使使用了公钥认证,fail2ban 仍然是必要的防护工具,因为:
服务器上可能还有使用密码认证的服务(如 Web 后台、数据库管理界面)
fail2ban 可以防止 DDoS、扫描等行为
减少攻击流量,保护系统资源
3.1 fail2ban 工作原理
fail2ban 通过监控日志文件,发现短时间内多次登录失败的 IP,自动将其加入防火墙规则封禁。封禁时间可配置,到期后自动解封。
3.2 安装 fail2ban
# CentOS/RHEL(需要 EPEL 源) sudo yum install -y epel-release sudo yum install -y fail2ban # Ubuntu/Debian sudo apt-get install -y fail2ban
3.3 配置 fail2ban
fail2ban 的配置分为两部分:jail.conf(默认配置)和 jail.local(用户自定义配置,优先级更高)。不要修改 jail.conf,直接在 jail.local 中覆盖。
# 创建 jail.local 配置文件 sudo vi /etc/fail2ban/jail.local # 添加以下内容: [DEFAULT] # 封禁 IP 的时间(秒),3600 = 1 小时 bantime = 3600 # 时间窗口(秒),600 = 10 分钟内 findtime = 600 # 最大失败次数,超过这个次数就封禁 maxretry = 5 # 封禁动作(iptables 是默认) banaction = iptables-multiport # 忽略自己的 IP(把运维人员的 IP 加进去,防止把自己封了) ignoreip = 127.0.0.1/8 ::1 192.168.1.100 10.0.0.50 # SSH 防护配置 [sshd] enabled = true # SSH 端口 port = ssh # 日志文件(CentOS) logpath = /var/log/secure # 日志文件(Ubuntu) # logpath = /var/log/auth.log # 过滤规则(在 filter.d/sshd.conf 中定义) filter = sshd # 最大重试次数(覆盖 DEFAULT) maxretry = 3 # 如果 SSH 使用非标准端口,修改 port # port = 2222 # Apache/Nginx 防暴力破解(可选) [apache-auth] enabled = true port = http,https logpath = /var/log/httpd/ssl_error_ssl_log maxretry = 3
3.4 启动并启用 fail2ban
# 启动 fail2ban sudo systemctl start fail2ban # 设置开机自启动 sudo systemctl enable fail2ban # 查看状态 sudo systemctl status fail2ban
3.5 验证 fail2ban 是否工作
# 查看 fail2ban 状态 sudo fail2ban-client status # 查看 SSH 防护状态 sudo fail2ban-client status sshd # 输出示例: # Status for the jail: sshd # |- Filter # | |- Currently failed: 3 # | |- Total failed: 150 # | `- File list: /var/log/secure # `- Actions # |- Currently banned: 2 # |- Total banned: 15 # `- Banned IP list: 23.45.67.89 203.0.113.5 # 查看被封禁的 IP sudo iptables -L f2b-sshd -n # 如果看到 IP 列表,说明 fail2ban 正在工作
3.6 手动测试 fail2ban
注意:测试前确认你的 IP 不在 ignoreip 列表中,否则会被放行
# 从另一台机器(或手机)故意输错密码 3 次 # 应该被封禁 1 小时 # 查看是否被封禁 sudo iptables -L f2b-sshd -n # 如果被封禁了,查看封禁状态 sudo fail2ban-client status sshd # 解封某个 IP(如果误封了自己) sudo fail2ban-client set sshd unbanip# 解封所有 IP(紧急情况) sudo fail2ban-client unban --all
3.7 fail2ban 配置进阶
# 配置邮件通知(当 IP 被封禁时发送邮件) # 在 jail.local 中添加: [DEFAULT] destemail = admin@example.com sender = fail2ban@example.com action = %(action_mwl)s # action_mwl:封禁 + 发送邮件(包含日志) # action_: 只封禁,不发邮件 # 配置更严格的 SSH 防护:5 分钟内 2 次失败就封禁 [sshd] enabled = true port = ssh logpath = /var/log/secure filter = sshd findtime = 300 # 5 分钟 maxretry = 2 # 2 次失败就封禁 bantime = 7200 # 封禁 2 小时 # 配置 fail2ban 的日志级别(调试用) # 编辑 /etc/fail2ban/fail2ban.conf [Definition] loglevel = DEBUG # 重启 fail2ban sudo systemctl restart fail2ban
第四步:修改 SSH 默认端口
SSH 默认监听 22 端口,所有的暴力破解扫描器都会首先扫描 22 端口。改成非标准端口可以减少大量的无效扫描。
4.1 修改 SSH 端口
# 1. 编辑 SSH 配置 sudo vi /etc/ssh/sshd_config # 找到 #Port 22,改为非标准端口(如 2222) Port 2222 # 2. 确保防火墙/安全组已开放新端口 # CentOS (firewalld) sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload # Ubuntu (ufw) sudo ufw allow 2222/tcp # 3. 重启 SSH sudo systemctl restart sshd # 4. 验证:新端口应该能登录 ssh -p 2222 admin@# 5. 确认旧端口不再监听 sudo ss -tunapl | grep :22
4.2 注意事项
# 如果使用了 SELinux,需要额外配置 # CentOS with SELinux enabled sudo yum install -y policycoreutils-python sudo semanage port -a -t ssh_port_t -p tcp 2222 # 如果使用了 firewalld,已经在第 2 步开放了端口 # 如果使用了 iptables,直接添加规则 sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT # 注意:云服务器的安全组也需要同步修改新端口
第五步:限制 SSH 来源 IP
5.1 使用 iptables 限制来源 IP
# 只允许特定 IP 访问 SSH # 先清除现有的 SSH 规则(如果有) sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT # 添加只允许特定 IP 的规则 sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 2222 -j ACCEPT # 如果有多个运维 IP sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 2222 -j ACCEPT sudo iptables -A INPUT -p tcp -s 10.0.0.0/8 --dport 2222 -j ACCEPT # 保存规则 sudo iptables-save > /etc/sysconfig/iptables
5.2 使用 firewalld 限制来源 IP
# 使用 rich rule 限制来源 IP sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="2222" protocol="tcp" accept' # 限制 IP 段 sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="2222" protocol="tcp" accept' # 重新加载 sudo firewall-cmd --reload # 查看规则 sudo firewall-cmd --list-rich-rules
5.3 使用 ufw 限制来源 IP
# 只允许特定 IP 访问 SSH sudo ufw allow from 192.168.1.100 to any port 2222 # 允许 IP 段 sudo ufw allow from 192.168.1.0/24 to any port 2222 # 查看规则 sudo ufw status numbered
第六步:使用双因素认证(2FA)
公钥认证 + 密码认证 + 2FA,是目前最强的 SSH 登录防护。即使攻击者拿到了你的私钥和密码,没有手机上的验证码也无法登录。
6.1 安装 Google Authenticator PAM 模块
# CentOS/RHEL sudo yum install -y google-authenticator # Ubuntu/Debian sudo apt-get install -y libpam-google-authenticator # macOS(如果你用 mac 作为 SSH 客户端需要验证) brew install google-authenticator-libpam
6.2 为用户配置 2FA
# 切换到需要配置 2FA 的用户 su - admin # 运行配置向导 google-authenticator # 交互式问答: # Do you want authentication tokens to be time-based? (y/n) # → y # 会显示一个二维码,用 Google Authenticator 或 Authy 扫描 # (也可以手动输入底部的密钥) # Save the ~/.google_authenticator file? (y/n) # → y # By default, a new token is generated every 30 seconds. # Do you want to disallow multiple uses of the same authentication token? # This limits you to one login about every 30 seconds, but it is useful # if you might get your secret phrase stolen. # → y (同一个 token 只能用一次,防止中间人重放攻击) # By default, tokens are good for 30 seconds. To compensate for possible # time-skew between the client and the server, we allow an extra token # before and after the current time. # Do you want to do so? (y/n) # → y (允许 1 分钟的时间窗口,防止手机时间不准) # If the computer that you are logging into is not hardened enough to # allow for short timeouts, you should add an external rule in # addition to rate-limiting the max number of login attempts. # Do you want to enable the short unlock timeout? (y/n) # → n # Enable login count limit? (y/n) # → y (限制最大尝试次数)
6.3 配置 SSH 使用 PAM 认证
# 编辑 SSH 配置 sudo vi /etc/ssh/sshd_config # 添加/修改: # 启用 challenge-response 认证(用于 PAM) ChallengeResponseAuthentication yes # 确保公钥认证仍然开启 PubkeyAuthentication yes # 重启 SSH sudo systemctl restart sshd
6.4 编辑 PAM 配置启用 Google Authenticator
# 编辑 PAM 的 sshd 配置 sudo vi /etc/pam.d/sshd # 在第一行(auth include password-auth)之前或之后添加: auth required pam_google_authenticator.so nullok # nullok 参数:允许没有配置 2FA 的用户仍然可以用密码登录 # 如果是 Ubuntu,可能是: # auth required pam_google_authenticator.so nullok
6.5 测试 2FA
# 用 SSH 测试 ssh admin@# 应该看到: # Verification code: # Password: # 输入 Google Authenticator 显示的验证码 # 如果配置正确,应该能登录
第七步:入侵检测——发现攻击痕迹
7.1 使用 OSSEC 检测暴力破解
OSSEC 是一个开源的主机入侵检测系统(HIDS),可以检测 SSH 暴力破解、文件篡改、Rootkit 等。
# 安装(CentOS) sudo yum install -y ossec-hids # 安装(Ubuntu) sudo apt-get install -y ossec-hids # OSSEC 配置后可以自动封禁攻击 IP,无需单独配置 fail2ban
7.2 常用入侵检测命令
# 检查是否有用户被添加 cat /etc/passwd | grep -E "test|hack|backup" # 检查是否有新增的 SSH 公钥 cat ~/.ssh/authorized_keys | head -10 # 检查最近执行的命令 history # 检查是否有新的 cron 任务 sudo crontab -l sudo cat /var/spool/cron/root # 检查是否有异常的网络连接 ss -tunapl | grep ESTABLISHED # 检查是否有异常进程 ps aux | grep -iE "xmrig|miner|kinsing|kworkerds|illegal"
第八步:综合防御方案
8.1 推荐的安全加固配置
最小安全方案(适合大多数场景):
公钥认证,禁用密码登录
fail2ban 自动封禁
SSH 端口改为非标准端口
只允许特定 IP 访问 SSH
高安全方案(适合核心服务器):
公钥认证 + 2FA 双因素认证
fail2ban 自动封禁
SSH 端口改为非标准端口
只允许特定 IP 访问 SSH
使用 OSSEC 做入侵检测
所有 SSH 登录触发邮件告警
8.2 完整配置脚本
#!/bin/bash # save as: ssh_security_hardening.sh # 执行前确保你有 VNC/ILO 等备用登录方式 set -e echo "===== SSH 安全加固 =====" # 1. 修改 SSH 端口 SSH_PORT=2222 # 2. 安装 fail2ban if command -v yum &> /dev/null; then sudo yum install -y epel-release sudo yum install -y fail2ban elif command -v apt-get &> /dev/null; then sudo apt-get install -y fail2ban fi # 3. 配置 fail2ban jail.local sudo tee /etc/fail2ban/jail.local > /dev/null </dev/null < /dev/null; then sudo firewall-cmd --permanent --add-port=${SSH_PORT}/tcp # 允许运维 IP(请替换为你的 IP) # sudo firewall-cmd --permanent --add-source= /32 sudo firewall-cmd --reload fi echo "SSH 安全加固完成!" echo "SSH 端口已改为: $SSH_PORT" echo "请用新端口登录测试:ssh -p $SSH_PORT admin@ "
总结
SSH 暴力破解是持续性的安全威胁,但完全可以通过合理的配置防御。推荐的防御优先级:
必须做(阻断最常见的攻击):
禁用密码登录,改用公钥认证 —— 这是最彻底的手段,密码登录关闭后,暴力破解毫无意义
配置 fail2ban —— 自动封禁频繁登录失败的 IP,即使攻击者拿到密码也会被封
强烈推荐(进一步减少攻击面):
修改 SSH 默认端口 —— 减少 90%+ 的扫描流量,降低日志噪音
限制 SSH 来源 IP —— 只允许运维 IP 访问,彻底阻断外部扫描
可选(高安全场景):
双因素认证(2FA) —— 即使私钥泄露,攻击者仍无法登录
入侵检测系统(OSSEC) —— 发现异常行为,主动告警
防御的核心原则:纵深防御,单一手段可能被绕过,但多层叠加后攻击成本会极高。
第九节:日常运维安全检查清单
安全加固不是一劳永逸的事情。配置完成后,还需要建立日常安全巡检机制,持续监控安全状态。
9.1 每日安全巡检脚本
#!/bin/bash
# save as: ssh_security_daily_check.sh
# 配置 cron: 0 9 * * * /usr/local/bin/ssh_security_daily_check.sh
LOG_FILE="/var/log/ssh_security_check.log"
ALERT_EMAIL="admin@example.com"
echo "===== SSH 安全巡检 $(date) =====" >> $LOG_FILE
# 1. 检查 fail2ban 是否运行
FAIL2BAN_STATUS=$(systemctl is-active fail2ban 2>/dev/null)
if [ "$FAIL2BAN_STATUS" != "active" ]; then
echo "[ALERT] fail2ban 未运行!" | tee -a $LOG_FILE
echo "请立即检查:systemctl status fail2ban" | tee -a $LOG_FILE
fi
# 2. 检查最近 SSH 登录失败次数
FAILED_COUNT=$(grep "Failed password" /var/log/secure 2>/dev/null | wc -l)
echo "SSH 登录失败总数: $FAILED_COUNT" >> $LOG_FILE
# 3. 检查是否有成功的陌生 IP 登录
KNOWN_IPS="192.168.1.100 10.0.0.50"
ACCEPTED_LOGINS=$(grep "Accepted" /var/log/secure 2>/dev/null)
for ip in $KNOWN_IPS; do
ACCEPTED_LOGINS=$(echo "$ACCEPTED_LOGINS" | grep -v "$ip")
done
if [ -n "$ACCEPTED_LOGINS" ]; then
echo "[ALERT] 发现未知来源的成功登录!" | tee -a $LOG_FILE
echo "$ACCEPTED_LOGINS" | tee -a $LOG_FILE
echo "$ACCEPTED_LOGINS" | mail -s "SSH 未知登录告警" $ALERT_EMAIL
fi
# 4. 检查 SSH 配置是否有被动过的痕迹
SSHD_CONFIG_MD5=$(md5sum /etc/ssh/sshd_config | awk '{print $1}')
SSHD_CONFIG_MD5_SAVED="<之前记录的md5值>"
if [ "$SSHD_CONFIG_MD5" != "$SSHD_CONFIG_MD5_SAVED" ]; then
echo "[ALERT] sshd_config 文件被修改!" | tee -a $LOG_FILE
fi
# 5. 检查 authorized_keys 是否有新增项
KNOWN_KEYS_COUNT=<之前记录的key数量>
CURRENT_KEYS_COUNT=$(wc -l /root/.ssh/authorized_keys 2>/dev/null | awk '{print $1}')
if [ "$CURRENT_KEYS_COUNT" -gt "$KNOWN_KEYS_COUNT" ]; then
echo "[ALERT] authorized_keys 有新增公钥!" | tee -a $LOG_FILE
fi
# 6. 检查被封禁的 IP 数量
BANNED_IP_COUNT=$(sudo fail2ban-client status sshd | grep "Banned IP" | awk '{print $4}')
echo "当前被封禁 IP 数量: $BANNED_IP_COUNT" >> $LOG_FILE
# 如果被封禁 IP 数量异常高(如超过 100),说明正在遭受攻击
if [ "$BANNED_IP_COUNT" -gt 100 ]; then
echo "[ALERT] 被封禁 IP 数量异常: $BANNED_IP_COUNT" | tee -a $LOG_FILE
fi
echo "" >> $LOG_FILE
9.2 每周安全审计
#!/bin/bash
# save as: ssh_security_weekly_audit.sh
# 配置 cron: 0 3 * * 0 /usr/local/bin/ssh_security_weekly_audit.sh
# 1. 统计本周 SSH 暴力破解统计
echo "===== SSH 暴力破解周报 ====="
echo "统计时间范围: $(date -d '7 days ago' +%Y-%m-%d) 至 $(date +%Y-%m-%d)"
# 统计来源 IP 分布
echo ""
echo "[ 来源 IP TOP 20 ]"
grep "Failed password" /var/log/secure -m 10000 | awk '{print $11}' | sort | uniq -c | sort -rn | head -20
# 统计被尝试的用户名
echo ""
echo "[ 被尝试的用户名 TOP 20 ]"
grep "Failed password" /var/log/secure -m 10000 | awk '{print $9}' | sort | uniq -c | sort -rn | head -20
# 统计总失败次数
TOTAL_FAILED=$(grep "Failed password" /var/log/secure -m 10000 | wc -l)
echo ""
echo "本周登录失败总次数: $TOTAL_FAILED"
# 2. 统计 fail2ban 封禁情况
BANNED_IPS=$(sudo iptables -L f2b-sshd -n | grep "REJECT" | awk '{print $4}' | sort | uniq | wc -l)
echo "本周 fail2ban 新封禁 IP 数: $BANNED_IPS"
# 3. 审计 authorized_keys 变更
echo ""
echo "[ authorized_keys 变更审计 ]"
if [ -f /root/.ssh/authorized_keys ]; then
echo "当前公钥数量: $(wc -l < /root/.ssh/authorized_keys)"
echo "最近修改时间: $(stat -c %y /root/.ssh/authorized_keys)"
fi
# 4. 审计新创建的用户账号
echo ""
echo "[ 本周新建账号审计 ]"
lastlog -b 7 | grep -v "Never" | tail -20
9.3 SSH 安全配置基线文档
每次安全配置变更后,建议更新配置基线文档,方便后续审计和交接:
SSH 安全配置基线(版本:v1.0,日期:2026-04-29) 一、服务配置 - SSH 端口:2222(非标准端口) - SSH 协议版本:2(默认) - 公钥认证:启用 - 密码认证:禁用 - 空密码登录:禁用 - Root 登录:禁用 - X11Forwarding:禁用 - AllowTcpForwarding:禁用 二、访问控制 - 允许登录的用户:admin, deploy - 允许登录的 IP 段:192.168.1.0/24, 10.0.0.0/8 - fail2ban:启用,封禁时间 1 小时,最多 3 次尝试 三、审计日志 - SSH 登录日志:/var/log/secure - 日志保留:90 天 - 集中日志服务器:log-server-ip 四、维护记录 - 2026-04-29:初始加固,修改端口、启用 fail2ban、配置公钥认证 - 2026-04-30:配置 IP 白名单 五、运维联系人 - 运维负责人:张工 138xxxx - 安全负责人:李工 139xxxx
9.4 应急响应流程——发现 SSH 被入侵后怎么办
当日常巡检发现 SSH 被入侵时,按以下流程处置:
阶段一:确认(5 分钟内) 1. 查看 last 命令,确认是否有陌生 IP 登录记录 2. 查看 /var/log/secure,确认登录时间和来源 IP 3. 查看 /root/.bash_history,确认攻击者执行过哪些命令 4. 查看 /root/.ssh/authorized_keys,确认是否有后门公钥 阶段二:止血(15 分钟内) 1. 断开攻击者连接:pkill -kill -t2. 封锁攻击者 IP:iptables -I INPUT -s -j DROP 3. 修改所有可能泄露的密码 4. 如果无法确认攻击路径,先关闭 SSH(systemctl stop sshd) 阶段三:排查 1. 查看攻击者使用的账号和密码(如果密码登录被禁,可能是公钥入侵) 2. 查看攻击者在系统中执行了哪些操作 3. 检查是否有植入后门(cron、SSH authorized_keys、systemd service) 4. 检查是否有横向移动(攻击内网其他机器) 阶段四:修复 1. 删除攻击者植入的所有后门 2. 如果系统被严重入侵,建议重装系统 3. 重新配置 SSH 安全加固 4. 从备份恢复被篡改的文件 阶段五:复盘 1. 输出完整的事件报告 2. 分析攻击路径,更新安全加固方案 3. 补充监控告警规则
最后提醒:任何安全配置变更前,都要确保有备用登录方式(VNC/ILO/云控制台)。最悲惨的情况不是被攻击,而是被自己的防火墙规则挡在外面。
全部0条评论
快来发表一下你的评论吧 !