当前位置: 首页 > news >正文

Orange的运维学习日记--18.Linux sshd安全实践

Orange的运维学习日记–18.Linux sshd安全实践

文章目录

  • Orange的运维学习日记--18.Linux sshd安全实践
    • 场景模拟
    • sshd配置
      • 需求:
      • 参数表格:
    • MOTD警告
    • 定期备份SSH密钥与配置
    • 登录防护:fail2ban
      • 测试与日志

场景模拟

你是某金融科技公司的Linux运维工程师,负责维护核心生产服务器集群。近期公司安全审计发现,SSH服务存在以下风险:

  1. 暴力破解攻击频繁(平均每天尝试1000+次)
  2. 部分服务器仍使用默认22端口
  3. 所有服务器未启用双因素认证
  4. 未限制 SSH访问源IP
  5. 部分服务器仍允许root直接登录

sshd配置

需求:

  • 将 SSH 默认端口 22 修改为 2222
  • 禁用 root 直接登录
  • 禁用密码认证,仅保留密钥认证
  • 禁止空口令的 SSH 密钥
  • 设置登录超时为 120
  • 禁用 DNS 反向解析

参数表格:

参数对应需求
Port2222修改默认端口
PermitRootLoginno禁用 root 直接登录
PasswordAuthenticationno禁用密码认证
PermitEmptyPasswordsno禁止空口令的密钥
LoginGraceTime120登录超时 120 秒
UseDNSno禁用 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密钥与配置

  1. 编写备份脚本
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
  1. 配置权限
sudo chmod +x /usr/local/bin/backup_ssh.sh
  1. 测试脚本
sudo /usr/local/bin/backup_ssh.sh
  1. 设定定时任务
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
http://www.dtcms.com/a/305912.html

相关文章:

  • CUDA编程9 - 卷积实践
  • String模拟实现的补充说明
  • 工业计算机ARM-如何实现工业数字化升级EC100!
  • QT跨平台应用程序开发框架(13)—— 绘图API
  • Linux设备驱动架构相关文章
  • @Scope(value = WebApplicationContext.SCOPE_REQUEST)和@Scope(“prototype“)区别
  • SQL 连接类型示例:内连接与外连接
  • 分布式系统:一致性
  • 二叉树(全)
  • InspireFace SDK gRPC 开发详细指导
  • 大厂主力双塔模型实践与线上服务
  • 嵌入式——C语言:内存管理、位运算符、构造数据类型(共用体、枚举)
  • NVIDIA Isaac平台推动医疗AI机器人发展研究
  • 【LeetCode 热题 100】33. 搜索旋转排序数组——(解法二)一次二分
  • ragflow 报错ERROR: [Errno 111] Connection refused
  • 2025年6月电子学会青少年软件编程(C语言)等级考试试卷(三级)
  • LeetCode 面试经典 150_数组/字符串_轮转数组(6_189_C++_中等)(额外数组;转置)
  • 磁盘io查看命令iostat与网络连接查看命令netstat
  • Apache HTTP Server 2.4.50 路径穿越漏洞(CVE-2021-42013)
  • 矩阵指数函数 e^A
  • AR技术赋能航空维修:精度与效率的飞跃
  • 基于Catboost的铁路交通数据分析及列车延误预测系统的设计与实现【全国城市可选、欠采样技术】
  • Three.js 与 WebXR:初识 VR/AR 开发
  • nest generate从入门到实战
  • 6.Origin2021如何绘制Y轴截断图?
  • Java 笔记 封装(Encapsulation)
  • 常见存储卡类型及对比
  • Elasticsearch 索引管理 API 实战:涵盖创建、查看、修改、删除及别名
  • 10 分钟上手 Elasticsearch 语义搜索(Serverless Cloud 本地双版本教程)
  • 在 Kubernetes 上部署 Label Studio