服务器对外服务必须通过特定端口实现,最常见的SSH远程连接端口是22,Web服务端口是80和443,而数据库、邮件等专用服务则有各自的默认端口。搞懂端口这件事,本质上是搞懂你的服务器到底开了哪些门、每扇门是干什么用的,以及在需要时如何安全地开关这些门,下面从最常用的端口开始,逐一拆解。
服务器常用端口号有哪些
初次接触服务器的人最容易问的问题就是“我到底该开哪些端口”,这个问题的答案取决于你的服务器在扮演什么角色,下面按使用场景分类列出最常用的端口。如果你用百度搜索“服务器常用端口号有哪些”,下面这份清单就是绝大多数教程会给出的核心答案。
远程管理类端口:22与3389
这是你登录服务器干活时要用的端口,属于最核心的入口。
- 22端口(SSH):Linux服务器默认的远程管理端口,几乎所有云服务器厂商的控制台都会默认放行这个端口,通过SSH工具(如Xshell、FinalShell)连接时填写的端口号,就是它。
- 3389端口(RDP):Windows服务器默认的远程桌面端口,买了一台Windows系统的云服务器,用“mstsc”命令远程登录时,连接的就是这个端口。
行业共识认为,这两个端口是黑客最常扫描的目标,虽然它们在服务器上默认开启,但建议不要使用默认端口号,最好改成一万以上的高位端口,同时在云安全组里限制只允许你自己的IP访问。
Web服务类端口:80与443
只要你的服务器要跑网站,就绕不开这两个端口。
- 80端口(HTTP):普通网页访问端口,用户在浏览器里输入不带“s”的网址时,默认走的就是80端口。
- 443端口(HTTPS):加密网页访问端口,现在大多数网站都启用了SSL证书,浏览器地址栏里带小锁图标的,走的就是443端口。
据统计,互联网上超过八成的网页流量都经由80和443端口传输,如果你在服务器上部署了Nginx或Apache,且希望别人能正常访问你的网站,这两扇门必须保持常开。
数据库服务类端口:3306、5432与6379
网站背后一般都有数据库,数据库也有自己的专属端口。
- 3306端口(MySQL):最流行的开源数据库MySQL的默认端口,如果你的网站用的是PHP+MySQL架构,程序连接数据库时就会用到这个端口。
- 5432端口(PostgreSQL):功能更强悍的开源数据库PostgreSQL的默认端口,近年来使用该数据库的开发者数量增长明显,不少新项目会直接选它。
- 6379端口(Redis):高性能缓存数据库Redis的默认端口,网站访问量大了之后,一般都会引入Redis做缓存加速,此时这个端口就会派上用场。
需要特别提醒的是:数据库端口绝对不能暴露在公网上,正确做法是让数据库服务只监听内网IP(如172.16.0.x),应用服务器通过内网去连接数据库,云安全组里也只放行内网来源的访问请求,否则数据库一旦被脱库,后果不堪设想。
文件传输类端口:21与20
- 21端口(FTP控制端口):用于发送FTP控制指令,如登录、切换目录、列出文件等。
- 20端口(FTP数据端口):用于实际传输文件数据。
不过这套组合拳现在已经越来越不吃香了,因为FTP是明文传输,密码容易被抓包,现在一般推荐用SFTP(走22端口),既安全又省事。
排查服务器端口被占用怎么解决
实际操作中,你大概率会遇到这样的情况:明明已经把服务启动起来了,却发现端口被别的进程占着,导致服务起不来,这时候就需要一套标准排查流程。
查看端口占用情况的基础命令
在不同系统下,查看端口状态的命令不太一样,以下命令是排查问题的基本功,建议熟练背诵。
- Linux系统:使用
netstat -tlnp命令,可以列出当前所有正在监听的TCP端口及其对应的进程PID。 - Windows系统:使用
netstat -ano命令,同样能列出端口状态和PID,然后打开任务管理器,通过PID反查是哪个程序占用了端口。 - 更快捷的指定端口查询:
lsof -i:8080(Linux)或netstat -ano | findstr 8080(Windows),可以直接锁定8080端口被谁占用。
常见坑位:有时候你用 netstat 查不到任何进程占用,但程序就是启动失败,这通常是因为云安全组放行了某个端口,但服务器内部防火墙(如iptables或firewalld)没有放行,导致外部流量进不来,这种情况下,你需要检查的是防火墙规则,而不是端口占用。
端口被占用后的处理步骤
确认端口被占用后,按以下步骤操作即可:
- 通过
netstat或lsof查到占用端口的PID。 - 用
ps -ef | grep 端口PID查看这个PID对应的具体进程名称。 - 如果这个进程确实没用,执行
kill -9 PID(Linux)或 `taskkill /PID 端口PID /F(Windows)强制结束它。
- 如果结束进程之后端口依然被占用,大概率是TIME_WAIT状态下的残留连接,等一两分钟再试,或者重启服务器即可。
如何正确配置云服务器端口放行规则
在云服务器上,端口能不能通,由两个层面共同决定:云安全组 和 服务器系统内部防火墙,初学者最容易犯的错误是:只在安全组放行了端口,却忘了改系统防火墙,结果前端页面一直提示超时。
安全组与防火墙的区别
这里用一个生活化的类比来说明。
- 云安全组:相当于小区大门口的保安,负责审查访客能不能进小区。
- 系统防火墙:相当于每栋单元楼的电子门禁,负责审查进入楼栋的人能不能上楼。
你必须同时让保安和门禁都放行某个访客,这个访客才能真正到达你家门口。 这就是端口放行最核心的逻辑。
配置安全组的实操路径(以简米云为例)
不同厂商的控制台界面略有差异,但逻辑完全一致,以简米云为例:
- 登录简米云控制台,进入“云服务器ECS”页面。
- 选择目标实例,点击“安全组”标签页,再点击“配置规则”。
- 点击“入方向”–>“手动添加”,填写端口范围(如
22/22)、授权对象(如0.0.0/0表示所有人可访问,或填写你的固定IP)。 - 保存后,安全组层面的放行即完成。
Linux系统防火墙放行操作
以CentOS 7+系统自带的firewalld为例:
- 放行端口:
firewall-cmd --permanent --add-port=8080/tcp - 重新加载配置:
firewall-cmd --reload - 查看已放行端口:
firewall-cmd --list-ports
操作完成后,务必用本地电脑实际连接测试一下,确认端口真的通了,才算真正配置完成。
常见服务的高危端口规避策略
在很多实际运维场景中,你会遇到需要临时开放某些特殊端口的诉求,但与此同时,安全形势也要求你对高危端口保持足够警惕。
不得不防的高危端口清单
以下端口在公网环境中被扫描攻击的频率极高,宁可不开放,也绝不要心存侥幸:
- 23端口(Telnet):一代老臣,明文传输,早已被SSH取代,公网必封。
- 445端口(SMB):永恒之蓝等勒索病毒的最爱,强烈建议公网禁用。
- 1433端口(MSSQL):SQL Server数据库默认端口,一旦暴露容易遭受暴力破解。
- 27017端口(MongoDB):MongoDB默认端口,未授权访问漏洞曾引发大规模数据泄露事件。
用非标准端口替代默认端口
最实用的安全策略之一,就是换门牌号,把容易被人猜到的默认端口改掉,能避免绝大多数自动化攻击脚本的骚扰。
- SSH端口:将
/etc/ssh/sshd_config文件中的Port 22修改为Port 22901,然后重启sshd服务。 - MySQL端口:将
/etc/my.cnf配置文件里的port=3306修改为一个不常用的高位端口。 - Redis端口:将
redis.conf里的port 6379改为其他值,同时设置强密码。
端口数量有限,很多服务需要监听固定端口才能正常工作,不要为了安全把所有端口都改成奇怪的数字,那样反而会增加运维负担。 正确思路是:默认端口尽量改掉,必须使用的业务端口通过安全组严格限制来源IP。
服务器端口相关热门问题解答
服务器端口被攻击了怎么办?
先通过云控制台查看安全组拦截日志,确认攻击类型,如果是暴力破解,立即修改远程登录密码并限制来源IP,如果是DDoS流量攻击,单靠封端口没意义,需要开启云厂商提供的DDoS高防服务,根据攻击流量大小和防护带宽,防护费用会有明显差异,具体可以参考各云厂商官网的报价说明。
一台服务器最多能开多少个端口?
理论上TCP/UDP各有65,535个端口,但实际可用数量远低于这个理论值,系统本身会预留一些固定端口用于内部通信,常用的服务端口有几百个,实际上日常业务中可能用到几百个端口就绰绰有余了,如果单个服务端口不够用,更推荐用负载均衡(SLB)分发流量,而不是在一台机器上硬堆端口。
服务器端口不通该怎么排查?
按顺序检查四个环节:命令行检查端口监听状态、本机防火墙策略、云安全组规则、本地网络是否屏蔽特定端口,大多数情况下,问题出在安全组规则写错(比如协议选错为UDP)或者系统防火墙未放行。
端口管理是服务器运维的基础功,核心思路清晰简单:“能不开的就不开,能改的就改,能限制IP的就绝对不开放全网”,把这条铁律刻在心里,你的服务器就比绝大多数人的机器安全得多,回到最初的问题连服务器的端口有哪些?默认端口是固定的,但怎么用、要不要改、放行给谁,这才是真正需要你花心思的地方。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/689923.html





