openEuler 22.03 安全加固:SSH 端口修改完整指南(含防火墙/SELinux 配置)
-
- [一、为什么要修改 SSH 默认端口?](#一、为什么要修改 SSH 默认端口?)
- 二、操作前提
- 三、分步操作指南(全程实操无坑)
-
- [步骤 1:备份 SSH 配置文件(关键!防止配置出错)](#步骤 1:备份 SSH 配置文件(关键!防止配置出错))
- [步骤 2:修改 SSH 配置文件(sshd_config)](#步骤 2:修改 SSH 配置文件(sshd_config))
-
- [核心配置修改(3 处关键):](#核心配置修改(3 处关键):)
- 保存退出:
- [步骤 3:配置防火墙放行新端口(openEuler 22.03 默认用 firewalld)](#步骤 3:配置防火墙放行新端口(openEuler 22.03 默认用 firewalld))
- [步骤 4:处理 SELinux(openEuler 22.03 默认开启,关键坑点!)](#步骤 4:处理 SELinux(openEuler 22.03 默认开启,关键坑点!))
-
- [方法 1:临时关闭 SELinux(测试用,不推荐生产环境)](#方法 1:临时关闭 SELinux(测试用,不推荐生产环境))
- [方法 2:永久配置 SELinux 允许新端口(推荐生产环境)](#方法 2:永久配置 SELinux 允许新端口(推荐生产环境))
- [步骤 5:重启 SSH 服务,使配置生效](#步骤 5:重启 SSH 服务,使配置生效)
- [步骤 6:测试新端口连接(关键验证步骤)](#步骤 6:测试新端口连接(关键验证步骤))
-
- 本地测试(服务器自身测试):
- [远程测试(客户端测试,如 Windows/Mac):](#远程测试(客户端测试,如 Windows/Mac):)
- [步骤 7:关闭默认 22 端口(测试成功后执行)](#步骤 7:关闭默认 22 端口(测试成功后执行))
- 四、常见问题排查(避坑指南)
-
- [问题 1:修改后无法连接新端口?](#问题 1:修改后无法连接新端口?)
- [问题 2:SELinux 配置报错「ValueError: Port tcp/23456 already defined」?](#问题 2:SELinux 配置报错「ValueError: Port tcp/23456 already defined」?)
- [问题 3:重启 SSH 服务报错「Job for sshd.service failed because the control process exited with error code」?](#问题 3:重启 SSH 服务报错「Job for sshd.service failed because the control process exited with error code」?)
- 五、安全加固进阶建议
- 六、总结
一、为什么要修改 SSH 默认端口?
作为服务器远程管理的核心服务,SSH 默认 22 端口是黑客暴力破解的重灾区。根据云厂商安全报告显示:
- 未修改默认端口的服务器,日均遭受 1000+ 次暴力扫描(来源:阿里云 2024 安全白皮书)
- 修改非标准端口后,暴力破解攻击量可下降 99% 以上(来源:华为云安全中心数据)
对于 openEuler 服务器(尤其生产环境),修改 SSH 端口是最基础且高效的安全加固手段,配合防火墙和密钥登录,可大幅提升服务器安全性。
二、操作前提
- 环境要求:openEuler 22.03 LTS(确认系统版本:
cat /etc/openEuler-release) - 权限要求:必须以
root用户或sudo权限执行(普通用户无配置文件修改权限) - 准备工作:
- 选择未被占用的端口(建议 10000-65535 之间,避免与常用服务端口冲突,如 8080、3306 等)
- 提前测试目标端口可用性:
netstat -tuln | grep 目标端口(无输出则未被占用)
三、分步操作指南(全程实操无坑)
步骤 1:备份 SSH 配置文件(关键!防止配置出错)
修改前务必备份原始配置文件,以便后续回滚:
bash
# 备份 sshd_config 到 /etc/ssh 目录下,保留原始权限
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak_$(date +%Y%m%d)
- 验证备份:
ls /etc/ssh/sshd_config.bak_*(显示备份文件即为成功)
步骤 2:修改 SSH 配置文件(sshd_config)
使用 vim 编辑配置文件(openEuler 22.03 默认预装 vim,若未安装可执行 dnf install -y vim):
bash
vim /etc/ssh/sshd_config
核心配置修改(3 处关键):
-
修改端口号:
- 找到
#Port 22行(默认注释状态),删除开头的#,并改为目标端口(示例:Port 23456) - 注意:可同时保留 22 端口(暂时),避免配置错误导致无法连接,测试成功后再关闭
- 找到
-
禁用密码登录(可选但推荐):
- 找到
PasswordAuthentication yes,改为PasswordAuthentication no(强制使用密钥登录,彻底杜绝暴力破解) - 前提:已配置 SSH 密钥登录(若未配置,先完成密钥配置再禁用密码,否则会锁死服务器)
- 找到
-
限制 root 直接登录(可选):
- 找到
PermitRootLogin yes,改为PermitRootLogin no(通过普通用户 + sudo 登录,提升安全性)
- 找到
保存退出:
- 按
Esc键,输入:wq(保存并退出);若需放弃修改,输入:q!
步骤 3:配置防火墙放行新端口(openEuler 22.03 默认用 firewalld)
openEuler 22.03 自带 firewalld 防火墙,必须放行新 SSH 端口,否则无法远程连接:
bash
# 1. 永久放行新端口(示例:23456)
firewall-cmd --permanent --add-port=23456/tcp
# 2. 重新加载防火墙规则(使配置生效)
firewall-cmd --reload
# 3. 验证端口是否放行成功
firewall-cmd --list-ports | grep 23456
- 输出
23456/tcp即为放行成功
步骤 4:处理 SELinux(openEuler 22.03 默认开启,关键坑点!)
SELinux 会限制 SSH 服务使用非标准端口,若不配置,即使防火墙放行,也会连接失败:
方法 1:临时关闭 SELinux(测试用,不推荐生产环境)
bash
setenforce 0
- 验证:
getenforce输出Permissive即为成功(重启后失效)
方法 2:永久配置 SELinux 允许新端口(推荐生产环境)
bash
# 1. 安装 SELinux 管理工具(若未安装)
dnf install -y policycoreutils-python-utils
# 2. 添加新端口到 SELinux 的 SSH 端口列表
semanage port -a -t ssh_port_t -p tcp 23456
# 3. 验证配置是否生效
semanage port -l | grep ssh_port_t
- 输出包含
23456/tcp即为配置成功
步骤 5:重启 SSH 服务,使配置生效
bash
# 重启 sshd 服务
systemctl restart sshd
# 验证服务状态(确保重启成功)
systemctl status sshd
- 显示
active (running)即为重启成功
步骤 6:测试新端口连接(关键验证步骤)
本地测试(服务器自身测试):
bash
ssh localhost -p 23456
- 能正常登录即为本地连接成功
远程测试(客户端测试,如 Windows/Mac):
- Windows(使用 Xshell/putty):主机填写服务器 IP,端口填写 23456
- Mac/Linux(终端):
ssh 用户名@服务器IP -p 23456 - 若能正常登录,说明配置全部生效!
步骤 7:关闭默认 22 端口(测试成功后执行)
确认新端口可用后,删除 22 端口配置,彻底关闭默认端口:
bash
# 1. 编辑 sshd_config,注释或删除 Port 22 行
vim /etc/ssh/sshd_config
# 找到 Port 22,添加 # 注释:#Port 22
# 2. 重启 SSH 服务
systemctl restart sshd
# 3. 防火墙移除 22 端口放行规则
firewall-cmd --permanent --remove-port=22/tcp
firewall-cmd --reload
# 4. SELinux 移除 22 端口(可选,若需彻底禁用)
semanage port -d -t ssh_port_t -p tcp 22
四、常见问题排查(避坑指南)
问题 1:修改后无法连接新端口?
- 排查步骤:
- 检查 SSH 服务状态:
systemctl status sshd(是否有报错,如端口被占用) - 检查防火墙端口:
firewall-cmd --list-ports | grep 新端口(是否放行) - 检查 SELinux 配置:
semanage port -l | grep ssh_port_t(是否包含新端口) - 检查端口是否被占用:
netstat -tuln | grep 新端口(若被占用,更换其他端口)
- 检查 SSH 服务状态:
问题 2:SELinux 配置报错「ValueError: Port tcp/23456 already defined」?
- 原因:该端口已被其他 SELinux 类型占用
- 解决:更换新的端口,或查看端口占用类型:
semanage port -l | grep 23456
问题 3:重启 SSH 服务报错「Job for sshd.service failed because the control process exited with error code」?
- 原因:sshd_config 配置文件语法错误(如端口号格式错误、关键字拼写错误)
- 解决:检查配置文件语法:
sshd -t(会提示具体错误行,如Bad configuration option: Portt)
五、安全加固进阶建议
-
强制使用 SSH 密钥登录:
- 生成密钥对:
ssh-keygen -t ed25519(ed25519 算法比 RSA 更安全高效) - 上传公钥到服务器:
ssh-copy-id -p 新端口 用户名@服务器IP - 禁用密码登录:
PasswordAuthentication no(已在步骤 2 中提及)
- 生成密钥对:
-
限制登录 IP:
- 在 sshd_config 中添加:
AllowUsers 用户名@允许的IP(如AllowUsers root@192.168.1.0/24) - 或通过防火墙限制:
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="允许的IP" port protocol="tcp" port="新端口" accept"
- 在 sshd_config 中添加:
-
定期更新 SSH 服务:
bashdnf update -y openssh-server openssh-clients
六、总结
修改 openEuler 22.03 的 SSH 端口核心步骤:备份配置 → 修改端口 → 防火墙放行 → SELinux 配置 → 重启验证。关键在于不要遗漏 SELinux 配置(openEuler 默认开启,很多人踩坑),且测试新端口可用后再关闭 22 端口。
通过这一简单操作,可大幅降低服务器被暴力破解的风险,配合密钥登录和 IP 限制,能构建更安全的远程管理环境。
如果操作过程中遇到问题,欢迎在评论区留言!