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

Linux SSH安全:密钥认证与端口防护实战指南

Linux SSH安全:密钥认证与端口防护实战指南

在 Linux 服务器管理中,SSH(Secure Shell)是用于安全远程登录和管理服务器的事实标准。默认配置的 SSH 服务存在安全隐患,容易受到暴力破解等攻击。因此,对 SSH 服务进行安全加固至关重要。本指南将介绍如何通过Linux SSH 密钥认证、修改默认端口及配置防火墙等手段,提升Linux SSH 安全性,有效防范潜在的安全风险。我们将以 CentOS/RHEL 7/8/9 或 Ubuntu 18.04/20.04/22.04 等常见发行版为例,讲解具体操作步骤。

Linux SSH安全:禁用密码认证,启用密钥认证

使用密码进行 SSH 认证的安全性较低,容易受到暴力破解攻击。为提高 Linux SSH 安全性,强烈建议禁用密码认证,启用密钥认证。密钥认证基于公钥密码学,使用密钥对(公钥和私钥)进行身份验证。私钥保存在客户端,公钥保存在服务器端。本节将详细介绍如何生成密钥对、上传公钥以及禁用密码认证,从而避免暴力破解风险。

生成 SSH 密钥对(RSA)

首先,需要在客户端(例如您的本地电脑)生成 SSH 密钥对。可以使用ssh-keygen命令。以下命令生成一个 4096 位的 RSA 密钥对:

ssh-keygen -t rsa -b 4096

执行该命令后,会在用户目录下生成.ssh目录,其中id_rsa是私钥,id_rsa.pub是公钥。请务必妥善保管私钥,切勿泄露给他人。私钥丢失可能导致无法登录服务器。

上传 SSH 公钥到服务器

生成密钥对后,需要将公钥上传到服务器,以便服务器能够使用公钥验证客户端的身份。可以使用ssh-copy-id命令简化上传过程,例如:

ssh-copy-id user@your_server_ip

该命令会自动将公钥添加到服务器上的~/.ssh/authorized_keys文件中。如果ssh-copy-id命令不可用,也可以手动将id_rsa.pub的内容追加到服务器上的~/.ssh/authorized_keys文件中。为了保证 Linux SSH 安全性,务必确保.ssh目录的权限是700authorized_keys文件的权限是600

手动上传公钥的步骤如下:

  1. 使用scp或其他文件传输工具将id_rsa.pub文件上传到服务器的临时目录,例如/tmp
  2. 在服务器上,使用以下命令将公钥添加到~/.ssh/authorized_keys文件中:
    cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
  3. 设置正确的权限:
    chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

禁用 SSH 密码认证

成功上传公钥后,就可以禁用密码认证了。编辑服务器上的 SSH 配置文件/etc/ssh/sshd_config。找到以下选项,并修改为:

PasswordAuthentication no ChallengeResponseAuthentication no # 如果有的话,也禁用 UsePAM no # 建议禁用PAM认证,除非你有特殊需求

保存文件后,重启 SSH 服务使配置生效:

systemctl restart sshd

重要提示:在禁用密码认证之前,请务必确保您已经成功配置了密钥认证,并且能够使用密钥登录服务器。否则,您可能会因为无法通过密码认证登录而失去对服务器的访问权限。建议在一个新的终端窗口中测试密钥认证是否生效,确认无误后再禁用密码认证。

通过禁用密码认证并启用密钥认证,可以有效防止暴力破解,提高 SSH 安全性。

Linux SSH安全:修改默认端口,配置防火墙

SSH 默认使用 22 端口进行通信,但攻击者通常会扫描服务器的 22 端口,尝试进行攻击。修改默认端口可以增加攻击者扫描和攻击的难度,提高 Linux SSH 安全性。同时,配置防火墙可以限制对 SSH 端口的访问,只允许特定的 IP 地址或 IP 段访问 SSH 服务。本节将介绍如何修改 SSH 端口,并配置防火墙规则,以降低被恶意扫描和攻击的风险。

修改 SSH 默认端口

编辑 SSH 配置文件/etc/ssh/sshd_config。找到以下选项,并修改为:

Port 2222 # 修改为其他未被使用的端口,例如2222

建议选择一个大于 1024 且未被其他服务使用的端口。保存文件后,重启 SSH 服务:

systemctl restart sshd

注意:修改端口后,需要同时更新防火墙规则,允许新的端口通过。客户端连接时也需要指定新的端口,例如:ssh -p 2222 user@your_server_ip

配置防火墙规则

使用firewalldiptables配置防火墙,只允许特定的 IP 地址访问 SSH 端口。以firewalld为例,以下命令允许来自192.168.1.0/24网段的 IP 地址访问 2222 端口:

firewall-cmd --permanent --add-port=2222/tcp firewall-cmd --permanent --add-source=192.168.1.0/24 --add-port=2222/tcp # 允许特定IP段访问 firewall-cmd --reload

如果使用iptables,可以参考以下配置:

iptables -A INPUT -p tcp --dport 2222 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 2222 -j DROP # 默认拒绝其他IP访问 service iptables save service iptables restart

下表总结了 SSH 安全加固中的一些常见配置项及其推荐值,供您参考:

配置项文件路径推荐值说明
PasswordAuthentication/etc/ssh/sshd_configno禁用密码认证,防止暴力破解
Port/etc/ssh/sshd_config非 22 端口 (例如2222)修改默认端口,增加扫描难度
PermitRootLogin/etc/ssh/sshd_configno禁止 root 用户直接登录
防火墙规则firewalldiptables仅允许特定 IP 访问 SSH 端口限制对 SSH 端口的访问

修改 SSH 默认端口并配置防火墙,可以有效降低被恶意扫描和攻击的风险,增强服务器的安全性。

其他 Linux SSH 安全加固措施

除了密钥认证和端口防护之外,还有一些其他的措施可以进一步提高 SSH 服务的安全性。这些措施是对密钥认证和端口防护的补充,共同构建更完善的安全体系。

  • 禁止 root 用户直接登录:编辑/etc/ssh/sshd_config,设置PermitRootLogin no。禁止 root 用户直接通过 SSH 登录,可以降低 root 账号被攻破的风险。
  • 设置登录尝试次数限制:使用MaxAuthTries限制每个连接的认证尝试次数。例如,设置为 3 表示允许最多尝试 3 次密码或密钥认证。
  • 使用 fail2ban:fail2ban可以自动监控 SSH 日志,并禁止恶意 IP 地址。Fail2ban 通过分析日志文件,自动识别并屏蔽尝试暴力破解 SSH 服务的 IP 地址。
  • 定期更新 SSH 软件:及时安装安全补丁,修复已知漏洞。
  • 禁用 X11 forwarding:除非需要通过 SSH 运行图形界面程序,否则应该禁用 X11 forwarding(X11Forwarding no),以降低安全风险。

常见问题:

  • 能否使用 SSH 证书认证代替密钥认证?可以。 SSH 证书认证比普通的密钥认证更安全,但配置也更复杂,适用于对安全性要求极高的场景。

通过综合运用这些安全加固措施,可以显著提高 Linux SSH 服务的安全性。

  • 禁用密码认证,强制使用 SSH 密钥认证。
  • 修改 SSH 默认端口,降低被扫描和攻击的风险。
  • 配置防火墙规则,限制对 SSH 端口的访问。
  • 禁止 root 用户直接 SSH 登录,降低 root 账户被攻破的风险。
  • 使用 Fail2ban 自动屏蔽恶意 IP。
http://www.jsqmd.com/news/558457/

相关文章:

  • 从‘最低有效位’到区间查询:一张图搞懂Fenwick Tree(树状数组)的设计哲学
  • 机器学习特征工程必看:如何用Scikit-learn轻松搞定数据标准化?
  • Python AOT编译提速470%?2026年官方CPython 3.15原生支持实测全披露
  • 5分钟掌握foobar2000终极美化方案:foobox中文版完整指南
  • CATIA数控加工仿真:铣平面粗加工的关键步骤与优化技巧
  • Qt6.8.1 + CLion开发避坑指南:从环境变量冲突到QML崩溃的5个常见问题
  • Stable-Diffusion-V1-5 模型解析:深入理解Transformer在扩散模型中的作用
  • 大数据领域Eureka的集群搭建指南
  • rg -n 是什么意思?
  • QFIL线刷救砖全攻略:EDL模式切换失败的5种解决方法(附详细日志分析)
  • Verilog实战:手把手教你写一个参数化Credit-Based流控模块(附Testbench与仿真波形)
  • [Pwn之路]根据所给库,获得远程同环境——使用patchelf的正确姿势
  • 灵感画廊惊艳效果:宣纸UI交互下生成的书法题跋+水墨插画融合作品
  • 为RVC模型开发Web图形界面(GUI):使用Python的Qt框架
  • AgentCPM研报生成全攻略:从快速部署到参数调优,小白也能变专家
  • 造相Z-Image文生图模型快速试用:10秒生成高清图片,简单易用
  • AtlasOS系统Xbox控制器驱动问题解决方案:从诊断到长效维护
  • 告别手动测试!用JMeter参数化+断言,10分钟搞定iHRM登录接口的完整测试流程
  • MogFace人脸检测模型-WebUI多场景:远程办公系统会议发言人自动聚焦
  • Phi-3-vision-128k-instruct智能体(Agent)开发入门:基于Skills构建自动化任务流
  • 手把手教你用Ozone和J-Link调试FreeRTOS项目(含常见问题解决)
  • FLUX.1-dev完整教程:从镜像获取、资源监控、故障排查到性能调优全覆盖
  • IndexTTS-2-LLM新手教程:从部署到生成,完整流程详解
  • 别再手写递归了!用微信小程序自定义组件封装一个可复用的树形菜单(附完整代码)
  • 保姆级教程:用STM32标准库配置F105的双CAN(含引脚重映射与500K波特率计算)
  • 基于STM32的对射式红外传感器仿真电路设计与实现
  • KMP
  • coze-loop真实体验:粘贴Python代码,AI自动重构+详细解释
  • ARM汇编编程实战:5种分支跳转指令的妙用与避坑指南
  • PotPlayer高效录制Switch游戏画面:从采集卡配置到无干扰录制全攻略