Linux防火墙与SSH端口修改:Firewalld配置详解及常见问题排查

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端口登录系统进行修复。

具体修改如下:

  1. 找到#Port 22,保持这行不变(或者去掉注释,保留Port 22
  2. 在下面添加一行: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服务已经在监听新旧两个端口了。你可以用netstatss命令验证:

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

2.2 添加新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值