Linux防火墙与SSH端口修改:Firewalld配置详解及常见问题排查
最近在帮一个客户做服务器迁移,他们想把SSH默认的22端口改掉,结果新端口死活连不上。折腾了半天才发现,问题出在防火墙规则上——他们只改了sshd_config,却忘了在Firewalld里放行新端口。这让我意识到,很多运维朋友对SSH端口修改的整体流程,特别是防火墙这块,理解得还不够透彻。今天我就结合自己踩过的坑,详细聊聊如何在Linux系统上安全、完整地修改SSH端口,并确保Firewalld防火墙正确配置。
这篇文章主要面向需要同时处理SSH服务和防火墙配置的运维人员。无论是服务器迁移、安全策略调整,还是日常运维中的端口变更,你都能在这里找到实用的操作步骤和问题排查思路。我会从最基本的配置文件修改讲起,深入到Firewalld的规则管理,最后还会分享几个常见的故障场景和解决方法。
1. SSH端口修改的核心步骤与配置细节
修改SSH端口听起来简单,但实际操作中需要考虑多个环节的协同工作。很多人以为改个配置文件重启服务就完事了,结果往往因为忽略了SELinux或防火墙而连接失败。我们先从最基础的配置文件修改开始。
1.1 编辑SSH配置文件的最佳实践
SSH服务的配置文件位于/etc/ssh/sshd_config。在修改之前,我强烈建议先备份原始文件:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
这样即使修改出错,也能快速恢复到原始状态。接下来用你熟悉的编辑器打开配置文件,我习惯用vim:
sudo vim /etc/ssh/sshd_config
在文件中找到#Port 22这一行。这里有个常见的误区:很多人直接把这行的注释去掉,把22改成新端口。但更稳妥的做法是保留22端口,同时添加新端口。这样即使新端口配置有问题,你还能通过22端口登录系统进行修复。
具体修改如下:
- 找到
#Port 22,保持这行不变(或者去掉注释,保留Port 22) - 在下面添加一行:
Port 你的新端口号
比如我想增加10086端口,配置看起来应该是这样:
Port 22
Port 10086
注意:端口号范围是1-65535,但0-1023是系统保留端口,通常需要root权限才能监听。建议使用1024以上的端口,同时避免使用常见服务端口(如3306、8080等)。
修改完成后,检查配置文件语法是否正确:
sudo sshd -t
如果没有任何输出,说明语法正确。如果有错误信息,它会明确指出哪一行有问题,方便你快速定位。
1.2 重启SSH服务与验证
配置文件修改并验证无误后,需要重启SSH服务使更改生效:
sudo systemctl restart sshd
重启后,检查服务状态确保它正常运行:
sudo systemctl status sshd
你应该看到类似这样的输出,表明服务处于active (running)状态:
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-01-15 10:30:00 CST; 5s ago
现在,SSH服务已经在监听新旧两个端口了。你可以用netstat或ss命令验证:
sudo ss -tlnp | grep sshd
输出应该显示22端口和你设置的新端口都在监听状态:
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
LISTEN 0 128 0.0.0.0:10086 0.0.0.0:* users:(("sshd",pid=1234,fd=4))
到这里,SSH服务本身的配置就完成了。但如果你现在就尝试用新端口连接,很可能会失败——因为还有两道重要的安全防线需要处理:SELinux和防火墙。
2. SELinux策略调整:让新端口获得访问权限
SELinux(Security-Enhanced Linux)是Linux的一个安全模块,它通过强制访问控制机制来增强系统安全。在修改SSH端口时,即使你正确配置了SSH和防火墙,如果SELinux不允许SSH服务使用新端口,连接仍然会被拒绝。
2.1 检查SELinux状态与现有端口
首先确认SELinux是否启用:
sudo sestatus
如果看到SELinux status: enabled,说明SELinux正在运行。接下来查看当前SELinux允许SSH服务使用哪些端口:
sudo semanage port -l | grep ssh
典型的输出是这样的:
ssh_port_t tcp 22
这说明SELinux只允许SSH服务使用22端口。如果你的新端口不在这个列表中,就需要手动添加。
提示:如果系统提示
semanage: command not found,说明相关工具包没有安装。在CentOS/RHEL系统上,可以通过以下命令安装:sudo yum install policycoreutils-python-utils在CentOS 8及更高版本中,包名可能是
policycoreutils-python-utils。


1668

被折叠的 条评论
为什么被折叠?



