修改 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:协议为 TCP
  • 2222:端口号

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 策略未正确配置,按照上述步骤添加端口即可。

安全建议

  1. 选择非标准端口:避免使用容易被扫描的端口,如 2222、22222 等
  2. 定期更换端口:在高安全要求的环境中,定期更换 SSH 端口
  3. 结合其他安全措施
    • 启用密钥认证,禁用密码登录
    • 配置 fail2ban 防止暴力破解
    • 限制允许访问的 IP 地址
  4. 保持 SELinux 启用:SELinux 提供了额外的安全防护层,建议保持启用状态

参考资料