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

别再只用默认端口了!在Ubuntu 22.04上安全配置SSH的进阶指南:改端口、密钥登录与Fail2ban

Ubuntu 22.04服务器SSH安全加固实战:从基础防护到企业级防御

当你把Ubuntu服务器暴露在公网环境中,默认的SSH配置就像把家门钥匙挂在门把手上——方便但极度危险。每天都有数以万计的自动化脚本在扫描互联网上的22端口,尝试用常见用户名和弱密码组合入侵服务器。作为经历过三次服务器入侵事件的老运维,我想分享一套经过实战检验的SSH安全加固方案。

1. 为什么默认SSH配置是安全隐患

在公网环境下,使用默认22端口和密码认证的SSH服务主要面临三大威胁:

  • 端口扫描攻击:Shodan等网络爬虫持续扫描全网开放22端口的设备,平均新上线的服务器在15分钟内就会被扫描到
  • 暴力破解攻击:黑客使用字典攻击工具(如Hydra)以每秒数十次的频率尝试常见密码组合
  • 零日漏洞利用:OpenSSH历史上曾出现多个高危漏洞(如CVE-2018-15473),默认配置可能放大漏洞影响

根据Cloudflare的网络安全报告,未加固的SSH服务器平均存活时间(MTTD)仅为3小时。我去年管理的50台服务器中,有3台因为使用默认配置在部署当天就遭到了入侵。

2. 修改SSH默认端口:第一道防线

修改默认端口是最简单有效的防护措施,能过滤掉90%的自动化攻击。以下是详细操作步骤:

2.1 选择非标准端口

端口选择有讲究,需要避开常见服务端口范围(0-1023),建议在49152-65535之间选择。避免使用:

  • 常见替代端口如2222、22222(已被攻击者重点监控)
  • 其他服务常用端口(如3306、5432等)

我推荐使用58234这样的高位随机端口,执行以下命令修改配置:

sudo nano /etc/ssh/sshd_config

找到#Port 22这一行,取消注释并将端口改为新值:

Port 58234

2.2 防火墙配置与测试

Ubuntu 22.04默认使用UFW防火墙,需要放行新端口:

sudo ufw allow 58234/tcp sudo ufw deny 22/tcp # 显式拒绝旧端口 sudo ufw reload

测试新端口是否生效(不要关闭当前SSH会话!):

ssh -p 58234 username@localhost

确认新端口可用后,重启SSH服务:

sudo systemctl restart sshd

重要提示:永远保持至少一个活跃的SSH连接直到确认新配置可用,避免被锁在服务器外

3. 彻底禁用密码登录:SSH密钥认证详解

修改端口只是开始,密钥认证才是真正的安全保障。下面是我在金融级系统中使用的密钥配置方案。

3.1 生成高强度密钥对

在本地机器(不是服务器)上生成ED25519密钥(比RSA更安全高效):

ssh-keygen -t ed25519 -a 100 -f ~/.ssh/prod_server -C "prod_access_2023"

参数说明:

  • -a 100:增加密钥派生迭代次数,提升抗暴力破解能力
  • -f:指定密钥文件路径
  • -C:添加注释标识密钥用途

生成后得到两个文件:

  • prod_server:私钥(权限必须设为600)
  • prod_server.pub:公钥

3.2 服务器端配置

将公钥上传到服务器:

ssh-copy-id -i ~/.ssh/prod_server.pub -p 58234 username@server_ip

然后修改SSH配置:

sudo nano /etc/ssh/sshd_config

确保以下设置:

PasswordAuthentication no PubkeyAuthentication yes ChallengeResponseAuthentication no UsePAM no

3.3 密钥管理最佳实践

  • 多因素保护:为私钥添加强密码(ssh-keygen时会提示)
  • 密钥轮换:每90天更换一次密钥对
  • 权限控制
    chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

4. Fail2ban:动态防御暴力破解

即使做了上述防护,服务器仍会收到大量探测请求。Fail2ban可以动态封锁恶意IP。

4.1 安装与基本配置

sudo apt install fail2ban sudo systemctl enable --now fail2ban

创建自定义jail配置:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo nano /etc/fail2ban/jail.local

针对SSH的推荐配置:

[sshd] enabled = true port = 58234 filter = sshd logpath = /var/log/auth.log maxretry = 3 findtime = 1h bantime = 1d ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

4.2 高级防护策略

针对高频攻击者,可以启用recidive(累犯)机制:

[recidive] enabled = true filter = recidive logpath = /var/log/fail2ban.log action = iptables-allports[name=recidive] bantime = 30d findtime = 1d maxretry = 3

查看当前被封禁IP:

sudo fail2ban-client status sshd

5. 深度防御:进阶安全措施

5.1 限制用户登录范围

/etc/ssh/sshd_config中添加:

AllowUsers deploy admin AllowGroups ssh-users DenyUsers root

5.2 启用两步验证(2FA)

安装Google Authenticator:

sudo apt install libpam-google-authenticator google-authenticator

修改SSH PAM配置:

ChallengeResponseAuthentication yes AuthenticationMethods publickey,keyboard-interactive

5.3 网络层防护

使用Cloudflare Zero Trust或Tailscale建立私有网络,完全隐藏SSH端口。

6. 监控与应急响应

设置实时告警(需要配置邮件服务):

sudo apt install mailutils sudo nano /etc/fail2ban/action.d/mail.conf

日志监控命令示例:

# 查看最近登录 last -i # 检查可疑登录 grep 'Failed password' /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr

入侵应急响应流程:

  1. 立即断开受影响服务器网络
  2. 备份关键日志(/var/log/auth.log, /var/log/fail2ban.log)
  3. 轮换所有SSH密钥
  4. 审查用户账户和权限
http://www.jsqmd.com/news/862462/

相关文章:

  • Go语言事件溯源:Event Sourcing
  • 全印刷柔性超声换能器:从P(VDF-TrFE)材料到可穿戴医疗应用
  • 从固体传热到污染物扩散:一个万能公式(输运方程)在COMSOL/ANSYS中的实战应用
  • Go语言DDD实战:领域驱动设计
  • 别再怪硬件了!DELL服务器风扇噪音的元凶与精准静音指南(iDRAC+IPMI实战)
  • 深入ESP32 OTA源码:教你自定义进度显示并适配不同IDF版本(V4.4/V5.x)
  • 软件测试行业的技术创新:有哪些新兴技术将影响测试行业
  • 别再手动装系统了!手把手教你用Fog Project在Ubuntu 22.04上搭建开源镜像服务器
  • Go语言整洁架构:分层设计
  • Unity UI粒子渲染技术深度解析与性能优化方案
  • 深度学习本质:分段线性逼近与ReLU的几何解释
  • Overleaf实战:5分钟搞定LaTeX列表个性化,从字母到罗马数字一键切换
  • Taotoken Token Plan套餐如何帮助个人开发者控制预算
  • 别再乱接SPI Flash了!手把手教你搞定Xilinx A7/K7/ZYNQ的专用引脚配置(附PCB走线避坑指南)
  • Boss直聘自动化脚本失效了?聊聊前端反爬虫与自动化测试的边界
  • 嵌入式与复杂系统安全开发实战:从威胁建模到安全编码的十大核心实践
  • 避开这些坑!在ESP32-C3上同时开启安全启动和Flash加密的OTA升级避坑指南
  • 新手也能看懂:CVE、CWE、CPE、CAPEC、ATTCK到底啥关系?一张图讲清楚
  • 从‘乱码’到‘可读’:我是如何用LayoutLMv3和Tesseract拯救一份无法复制的PDF合同的
  • 基于Intel Elkhart Lake的嵌入式边缘计算平台PICO-EHL4选型与应用实战
  • 影刀RPA 企业级专题篇:自动化中台架构与多业务流程治理实践
  • 从MySQL分区到OceanBase分区:迁移老手教你平滑过渡与性能调优
  • 2026年软件开发行业发展趋势:低代码/无代码将成为主流
  • 保姆级排查指南:PyTorch装完CUDA不认账?手把手教你搞定torch.cuda.is_available()返回False
  • DeepL Chrome翻译插件终极指南:3分钟实现专业级网页翻译
  • 深入Linuxptp ptp4l状态机:从协议原文9.2.5节到代码`ptp_fsm`的映射解析
  • 为Claude Code配置Taotoken作为稳定后备API服务源
  • 从ARM Cortex-M到RISC-V RV32的嵌入式应用迁移实战指南
  • RNN循环结构实战解析:从时间步展开到门控机制设计
  • 利用Taotoken统一API为内部多个业务系统提供AI能力