Orange的运维学习日记–18.Linux sshd安全实践
文章目录
- Orange的运维学习日记--18.Linux sshd安全实践
- 场景模拟
- sshd配置
- 需求:
- 参数表格:
- MOTD警告
- 定期备份SSH密钥与配置
- 登录防护:fail2ban
- 测试与日志
场景模拟
你是某金融科技公司的Linux运维工程师,负责维护核心生产服务器集群。近期公司安全审计发现,SSH服务存在以下风险:
- 暴力破解攻击频繁(平均每天尝试1000+次)
- 部分服务器仍使用默认22端口
- 所有服务器未启用双因素认证
- 未限制 SSH访问源IP
- 部分服务器仍允许root直接登录
sshd配置
需求:
- 将 SSH 默认端口
22
修改为2222
- 禁用 root 直接登录
- 禁用密码认证,仅保留密钥认证
- 禁止空口令的 SSH 密钥
- 设置登录超时为
120
秒 - 禁用 DNS 反向解析
参数表格:
参数 | 值 | 对应需求 |
---|---|---|
Port | 2222 | 修改默认端口 |
PermitRootLogin | no | 禁用 root 直接登录 |
PasswordAuthentication | no | 禁用密码认证 |
PermitEmptyPasswords | no | 禁止空口令的密钥 |
LoginGraceTime | 120 | 登录超时 120 秒 |
UseDNS | no | 禁用 DNS 反向解析 |
sudo vim /etc/ssh/sshd_config
Port 2222
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
LoginGraceTime 120
UseDNS no
sudo systemctl restart sshd
MOTD警告
sudo bash -c "echo '授权访问将被记录并追究法律责任' >> /etc/motd"
登录效果:
定期备份SSH密钥与配置
- 编写备份脚本
sudo vim /usr/local/bin/backup_ssh.sh
参考脚本1–未按用户分类
#!/bin/bash
TARGET_DIR=/secure_backups/ssh_$(date +%F)
mkdir -p "$TARGET_DIR"
cp /etc/ssh/sshd_config "$TARGET_DIR/"
cp -r /root/.ssh "$TARGET_DIR/"
find /home -maxdepth 2 -type d -name ".ssh" -exec cp -r {} "$TARGET_DIR/" \;
参考脚本2–按用户分别存储
#!/bin/bash# 备份根目录与当天日期
BACKUP_ROOT=/secure_backups/ssh_$(date +%F)
mkdir -p "$BACKUP_ROOT"# 1. 备份 SSH 配置文件
cp /etc/ssh/sshd_config "$BACKUP_ROOT/"# 2. 备份 root 用户的 .ssh
if [ -d /root/.ssh ]; thenmkdir -p "$BACKUP_ROOT/root"cp -a /root/.ssh "$BACKUP_ROOT/root/"
fi# 3. 按用户分别备份 /home 下的 .ssh
for homedir in /home/*; do[ -d "$homedir/.ssh" ] || continueuser=$(basename "$homedir")mkdir -p "$BACKUP_ROOT/$user"cp -a "$homedir/.ssh" "$BACKUP_ROOT/$user/"
done
- 配置权限
sudo chmod +x /usr/local/bin/backup_ssh.sh
- 测试脚本
sudo /usr/local/bin/backup_ssh.sh
- 设定定时任务
sudo bash -c "echo '0 0 * * * root /usr/local/bin/backup_ssh.sh' > /etc/cron.d/backup_ssh"
- 第1个字段(分钟):0
- 第2个字段(小时):0
- 第3个字段(日):*(每天)
- 第4个字段(月):*(每月)
- 第5个字段(星期):*(每周)
效果:每天凌晨 00:00,系统以root身份执行
/usr/local/bin/backup_ssh.sh
登录防护:fail2ban
安装并配置 fail2ban,自动屏蔽恶意的 SSH 登录尝试。
# 安装(CentOS/RHEL)
sudo yum install -y fail2ban# 或(Debian/Ubuntu)
sudo apt-get install -y fail2ban
在 /etc/fail2ban/jail.local
添加或修改以下内容:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/secure
maxretry = 5
bantime = 600
findtime = 600
- enabled:启用 sshd 监控
- port:与 SSHD 配置中一致
- maxretry:最大失败尝试次数
- bantime:封禁时长(秒)
- findtime:统计失败窗口(秒)
# 启动并设置开机自启
sudo systemctl enable --now fail2ban# 查看 SSHD jail 状态
sudo fail2ban-client status sshd
测试与日志
- 人为输入错误密码超过
maxretry
,再观察 IP 是否被封 - 日志位置:
/var/log/fail2ban.log