修改 SSH 监听端口与 SELinux 配置
概述
出于安全考虑,修改 SSH 默认端口(22)是一个常见的安全加固措施。本文介绍如何修改 SSH 监听端口,并正确配置 SELinux 以允许新端口的访问。
修改 SSH 监听端口
1. 编辑 SSH 配置文件
sudo vi /etc/ssh/sshd_config
找到 #Port 22 这一行,取消注释并修改为需要的端口:
Port 22
Port 2222
建议同时保留默认端口和自定义端口,便于测试。确认新端口正常工作后,再删除默认端口配置。
2. 重启 SSH 服务
sudo systemctl restart sshd
3. 验证新端口
# 检查 SSH 服务监听端口
sudo ss -tlnp | grep sshd
# 或使用 netstat
sudo netstat -tlnp | grep sshd
应该看到新端口(如 2222)已开始监听。
配置 SELinux
如果在启用了 SELinux 的系统上修改 SSH 端口,必须更新 SELinux 策略,否则 SSH 服务无法正常绑定到新端口。
1. 检查当前 SELinux 状态
# 查看 SELinux 状态
sestatus
# 查看 SSH 允许的端口
sudo semanage port -l | grep ssh
默认情况下,SELinux 只允许 SSH 使用端口 22。
2. 添加新端口到 SELinux 策略
# 添加新端口(如 2222)到 SSH 服务
sudo semanage port -a -t ssh_port_t -p tcp 2222
参数说明:
-a:添加-t ssh_port_t:指定端口类型为 SSH 端口-p tcp:协议为 TCP2222:端口号
3. 验证 SELinux 配置
# 再次查看 SSH 允许的端口
sudo semanage port -l | grep ssh
应该可以看到:
ssh_port_t tcp 2222, 22
4. 删除不需要的端口(可选)
如果需要从 SELinux 策略中移除某个端口:
sudo semanage port -d -t ssh_port_t -p tcp 2222
配置防火墙
根据系统使用的防火墙,需要开放新端口。
firewalld(RHEL/CentOS/Fedora)
# 添加新端口到防火墙规则
sudo firewall-cmd --permanent --add-port=2222/tcp
# 重新加载防火墙配置
sudo firewall-cmd --reload
# 查看当前开放的端口
sudo firewall-cmd --list-ports
ufw(Ubuntu/Debian)
# 允许新端口
sudo ufw allow 2222/tcp
# 查看防火墙状态
sudo ufw status
iptables
# 添加规则
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
# 保存规则(根据发行版不同,命令可能不同)
sudo service iptables save
# 或
sudo netfilter-persistent save
测试连接
在确认所有配置正确后,测试新端口的连接:
ssh -p 2222 username@server_ip
如果连接成功,可以回到 SSH 配置文件中删除默认端口(22),然后重启 SSH 服务:
Port 2222
sudo systemctl restart sshd
常见问题
问题 1:修改端口后无法连接
可能原因:
- SELinux 未配置允许新端口
- 防火墙未开放新端口
- SSH 服务未正确重启
排查步骤:
# 检查 SELinux 日志
sudo ausearch -m avc -ts recent | grep sshd
# 检查 SSH 服务状态
sudo systemctl status sshd
# 检查端口监听
sudo ss -tlnp | grep 2222
问题 2:semanage 命令不存在
解决方法:
# RHEL/CentOS/Fedora
sudo dnf install policycoreutils-python-utils
# Ubuntu/Debian
sudo apt install policycoreutils-python-utils
问题 3:SELinux 阻止 SSH 绑定端口
查看 SELinux 拒绝日志:
sudo ausearch -m avc -ts recent | grep sshd | grep denied
如果看到类似 bind 操作被拒绝,说明 SELinux 策略未正确配置,按照上述步骤添加端口即可。
安全建议
- 选择非标准端口:避免使用容易被扫描的端口,如 2222、22222 等
- 定期更换端口:在高安全要求的环境中,定期更换 SSH 端口
- 结合其他安全措施:
- 启用密钥认证,禁用密码登录
- 配置 fail2ban 防止暴力破解
- 限制允许访问的 IP 地址
- 保持 SELinux 启用:SELinux 提供了额外的安全防护层,建议保持启用状态