通过修改对应服务的配置文件,更改监听端口参数,然后重启服务使配置生效。下面以最常见的Linux服务器和Windows服务器为例,拆解具体操作路径、防火墙放行规则,以及改完后连不上的排查思路。
改服务器端口前必须做的三件事
动手改端口之前,先做好这三步准备工作,能帮你省掉后面大半的麻烦:
- 确认端口占用情况,使用命令
netstat -tlnp(Linux)或netstat -ano(Windows)查看当前端口被哪个进程占用,确认要改的目标端口没有被其他服务占用。 - 备份原配置文件,修改任何配置文件前,先复制一份备份,比如修改SSH端口时,执行
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak,改坏了能马上还原。 - 开启防火墙对应端口,这是新手最容易踩的坑,改完端口后,如果防火墙没放行新端口,服务会直接断掉,远程连接也会立刻失效,建议先把新端口加入防火墙规则,再重启服务。
Linux服务器改端口号:以SSH服务为例
SSH是运维中最常改端口的服务,默认22端口经常被扫描攻击,改成高位端口是较常见的加固手段。
修改sshd配置文件
登录服务器后,用root权限编辑SSH配置文件:
vi /etc/ssh/sshd_config
找到#Port 22这一行,去掉注释符,把22改成你想要的新端口,例如Port 2222。这里有个关键细节: 建议不要直接删除22端口,而是先保留两行配置:
Port 22 Port 2222
这样做的原因是,万一新端口配置有问题,你还能用22端口连回服务器救急,等确认2222端口能正常连接后,再注释掉Port 22这行。
修改防火墙规则
不同Linux发行版的防火墙工具不一样,这里分两种情况:
CentOS / RHEL 系(firewalld):
firewall-cmd --permanent --add-port=2222/tcp firewall-cmd --reload
Ubuntu / Debian 系(ufw):
sudo ufw allow 2222/tcp sudo ufw reload
如果服务器用的是云厂商的安全组(比如简米云、酷番云),还需要登录云控制台,在安全组入方向规则里放行新端口。这一步别漏掉,否则即使服务器内部防火墙放行了,外部流量依然进不来。
重启SSH服务并验证
systemctl restart sshd
重启后,打开一个新终端窗口测试连接:
ssh -p 2222 root@你的服务器IP
确认能登录成功后,再回配置文件里把Port 22那行注释或删掉,然后再次重启sshd服务。
修改SELinux放行策略(如果启用了SELinux)
CentOS系统默认开启SELinux时,直接改端口可能会导致sshd服务无法启动,执行以下命令把新端口加入SELinux放行列表:
semanage port -a -t ssh_port_t -p tcp 2222
如果提示semanage命令找不到,需要先安装policycoreutils-python-utils包。
Windows服务器改端口号:远程桌面端口修改方法
Windows服务器最常见的改端口需求是远程桌面(RDP),默认3389端口也是被扫描的重灾区。
通过注册表修改RDP端口
按下Win + R,输入regedit打开注册表编辑器,定位到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
在右侧找到PortNumber键值,双击选择十进制,把3389改成新端口号(比如3390),点击确定。
放行防火墙端口
打开控制面板 → Windows Defender 防火墙 → 高级设置 → 入站规则,新建一条规则:
- 规则类型:端口
- 协议:TCP
- 特定本地端口:填写你设置的新端口号
- 操作:允许连接
- 配置文件:全部勾选
重启服务器或重启远程桌面服务
修改注册表后,重启服务器才能生效,如果你不想重启整台机器,可以尝试在命令行中执行:
net stop TermService net start TermService
不过部分Windows版本对服务重启限制较多,直接重启服务器反而是省事的做法。
云服务器安全组放行
和Linux云服务器一样,修改完RDP端口后,务必去云控制台的安全组里放行新端口。这一点是行业共识:大部分Windows服务器改完端口连不上,不是因为配置改错了,而是忘了同步安全组规则。
服务器端口修改后连不上的常见原因排查
改完端口后连接失败,先别慌,按下面顺序逐项排查:
- 服务是否真的在监听新端口,Linux执行
ss -tlnp | grep 新端口号,Windows执行netstat -ano | findstr 新端口号,看输出结果里有没有对应端口。 - 防火墙是否放行,检查服务器内部防火墙和云厂商安全组,两个层面都要过一遍,很多云服务器的安全组规则是独立的,不会自动跟随系统防火墙。
- SELinux是否拦截,Linux系统改完端口后,如果sshd服务启动失败,查看
/var/log/audit/audit.log里是否有SELinux拒绝记录。 - 客户端是否指定了新端口,SSH客户端用
-p参数,远程桌面客户端在“计算机”栏填写IP:端口号的格式,比如168.1.100:3390。 - 服务配置语法是否正确,Linux上可以执行
sshd -t检查SSH配置文件语法,有错误会直接提示具体行数。
| 排查步骤 | Linux命令 | Windows操作 |
|---|---|---|
| 检查监听状态 | ss -tlnp \| grep 端口 |
netstat -ano \| findstr 端口 |
| 测试本地连通 | telnet 127.0.0.1 端口 |
Test-NetConnection 127.0.0.1 -Port 端口 |
| 查看服务日志 | journalctl -u sshd -n 50 |
事件查看器 → Windows日志 → 系统 |
改服务器端口号的其他场景
Web服务器(Nginx / Apache)改端口
编辑Nginx配置文件中的listen字段:
server {
listen 8080;
server_name example.com;
}
保存后执行nginx -s reload加载新配置,Apache则修改httpd.conf里的Listen 80为Listen 8080,然后重启Apache服务。
MySQL数据库改端口
打开MySQL配置文件my.cnf或my.ini,在[mysqld]段落下修改:
port=3307
修改后重启MySQL服务。注意: 如果数据库被其他应用连接,改完端口后这些应用的数据库连接串也要同步修改,否则会报连接超时错误。
安全建议:端口不是改得越怪越好
改端口能有效降低被自动化脚本扫描的概率,但不要产生“改了端口就绝对安全”的错觉。端口转发、端口敲门、密钥认证这些措施要配合使用,新端口号建议选择1024以上的高位端口,避开常见服务端口和动态端口范围,减少冲突概率。
改端口后如何验证是否生效
完成所有配置后,从外部网络做一次完整验证:
telnet 你的服务器公网IP 新端口号
如果telnet输出连接成功,说明端口已经在公网层面通了,如果连接超时或拒绝,回到上面的排查步骤逐项检查,对于SSH服务,还可以直接尝试新端口登录,能登录就说明一切正常。
最后再强调一次:改服务器端口号本身不复杂,复杂的是把相关的防火墙规则、安全组策略、SELinux配置和应用依赖全部同步更新。 一次改完,全链路验证通过,才算真正改好。
改服务器端口号常见问题解答
改了SSH端口后,为什么原端口还能连接?
因为配置文件中原端口那行没被注释掉,SSH服务支持同时监听多个端口,这是正常现象,确认新端口能正常工作后,把旧端口那行注释或删除,重启服务即可。
修改服务器端口号会影响网站访问吗?
如果改的是Web服务(Nginx、Apache)的端口,会有影响用户访问网站时必须在域名后加端口号,比如http://example.com:8080,如果想保留80端口的访问体验,不改Web端口,而是通过防火墙做端口转发,如果改的是SSH或RDP这类管理端口,对网站访问没有直接影响。
改完服务器端口后需要重启服务器吗?
Linux下修改SSH端口只需要重启sshd服务,不需要重启整台机器,Windows系统修改远程桌面端口后,通常需要重启服务器才能生效,因为注册表改动在服务重启时才会完整加载。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/795645.html


