服务器输出端口,就是服务器上对外提供服务时监听的通信通道,常见的有80、443、22、3389、21、3306等,具体开哪些取决于服务器上跑的是什么业务。 打个比方,服务器像一栋办公楼,端口就是门上标好的房间号,外部请求按号找门,服务按号应答,搞清楚端口分类和用途,是排查网络故障、做安全加固的前提。
服务器端口分几类:先看懂端口号的范围
端口号范围从0到65535,行业共识认为,这6万多个端口被划成三个区间,理解这个划分对后续配置很有用。
- 知名端口(0-1023):系统预留,运行在Linux上的普通用户程序没有权限直接监听,必须用root权限,HTTP的80、HTTPS的443、FTP的21、SSH的22都在这一段。
- 注册端口(1024-49151):给应用程序或用户自定义服务使用,比如MySQL默认监听3306、Tomcat默认监听8080、Redis默认监听6379。
- 动态端口(49152-65535):客户端临时随机占用,比如你本机浏览器访问网站时,操作系统临时分配一个高位端口跟服务器的80端口建立连接,服务器本身很少主动监听这一段的端口,除非你手动指定。
日常你问”服务器输出端口有哪些”,准确说应该是”服务器作为服务端监听了哪些端口”,因为一台服务器可以同时充当客户端去请求别人的服务,那种情况下它是随机占用高位端口,不是你说的”输出端口”,把这两个概念分开,排查问题时思路就清晰了。
服务器常用端口有哪些?这四类你得记牢
网页服务:80和443
这是接触最多的端口,当你在浏览器输入http://example.com,浏览器默认连接服务器的80端口,走HTTP明文协议,换成https://example.com,浏览器自动连接443端口,走TLS加密。
Nginx和Apache的默认配置都监听这两个端口,网站配置文件的listen指令会明确指定,80端口必须开,否则HTTP访问直接报错“无法访问此网站”,443端口开不开取决于有没有部署SSL证书,现在新建网站基本都直接上HTTPS,所以443几乎是必开项。
远程管理:22和3389
Linux服务器日常管理走22端口,SSH协议,你用XShell、FinalShell、Termius连服务器时默认填的就是22,登录成功后会得到一个shell终端,Windows服务器则走3389端口,RDP远程桌面协议,Windows自带“远程桌面连接”工具默认连这个端口。
这两个端口是黑客暴力破解的重点目标,业内专家指出,公网上的22端口时刻都在被扫描,弱密码被爆破往往就是几小时的事,建议把SSH默认22改成一个不常见的高位端口,比如22026,同时禁掉root直接登录,用密钥认证替代密码认证,RDP端口能改也改,至少加一层强密码。
文件传输:21、20和990
FTP服务的控制端口是21端口,数据端口分成主动模式和被动模式,主动模式默认用20端口,被动模式的数据端口则在服务器上配置一段范围,比如pasv_min_port=40000到pasv_max_port=41000,用FileZilla上传网站代码走的就是FTP,控制连接走21,传输数据时再临时建立一条数据连接。
FTP明文传输账号密码,生产环境不太建议直接暴露到公网,更好的选择是SFTP,它直接复用SSH的22端口,在加密通道里传文件,不用额外开FTP端口,还省一次安全组配置,纯内网场景用FTP问题不大,云服务器公网环境优先SFTP。
邮件服务:25、110、143和587
邮件服务器涉及四个常见端口。25端口是SMTP发信端口,用于服务器之间中转邮件,也给客户端提交邮件。110端口是POP3收信端口,邮件下载到本地,服务器上不保留副本。143端口对应IMAP,邮件留在服务器上,多端同步状态,加密场景下,SMTP走587端口的STARTTLS,POP3走995,IMAP走993。
国内云服务器有个特殊情况:主流云厂商默认封禁25端口出方向,防止垃圾邮件泛滥,如果你自建邮件服务,需要在云控制台提交工单申请解封,同时做好反垃圾策略,否则邮件很容易被对方服务器拒收。
数据库与中间件的默认端口
这部分是后端开发天天打交道的,列出常用的几个:
| 服务 | 默认端口 | 使用场景 |
|---|---|---|
| MySQL | 3306 | 关系型数据库,Web应用主库 |
| PostgreSQL | 5432 | 关系型数据库,复杂查询场景 |
| Redis | 6379 | 缓存、消息队列、分布式锁 |
| MongoDB | 27017 | 文档型数据库,日志类数据存储 |
| Elasticsearch | 9200 | 全文检索、日志分析 |
| RabbitMQ | 5672 | 消息队列,异步任务解耦 |
数据库端口最容易犯的错是直接暴露公网,部署完MySQL后,netstat -tlnp看到3306监听在0.0.0,然后安全组又把所有来源IP放行,这种情况在线上见过不少,Redis版本旧的话还自带未授权访问漏洞,公网裸奔等于把数据白送。
规范做法是:数据库只监听内网IP,比如bind-address=172.16.0.10,安全组入方向只允许应用服务器的私网IP访问3306,应用和数据库不在同一台机器时,靠内网互通,不需要走公网。
服务器端口怎么看?被占用怎么办
查看端口监听状态
Linux下一条命令就够了:
ss -tlnp
-t只看TCP,-l只看监听中的端口,-n不做域名反解,-p显示对应进程PID和名称,想精确看某个端口,配合grep过滤:
ss -tlnp | grep 3306
Windows服务器用netstat:
netstat -ano | findstr :3306
输出最后一列是PID,到任务管理器里按PID查进程名,老Linux系统没有ss就用netstat替代,参数差不多。
端口被占用的处理流程
比如启动Nginx时报listen 80 address already in use,按三步走:
- 查占用进程:
lsof -i:80,拿到PID - 确认是不是同服务重复启动:
ps -ef | grep nginx,如果是旧进程残留,直接kill -9 PID - 如果是别的服务占了,比如Apache占了80、Nginx起不来,要么停掉Apache,要么改Nginx配置里的
listen 80换成8080
改完配置记得重载服务:nginx -t先验证配置语法,再systemctl reload nginx。
端口通不通怎么测
本地监听正常不代表外部能访问,从另一台机器测试,用telnet或nc:
telnet 192.168.1.10 3306
能连上说明链路通,连不上分两种情况:服务没监听、或者防火墙/安全组拦截了,这时去服务器上执行systemctl status mysql看进程状态,再检查iptables和云控制台安全组规则。
服务器端口安全配置:别把所有端口都暴露在公网
云服务器安全组是第一道闸门
简米云、酷番云、AWS的服务器默认都有安全组,相当于云防火墙,操作路径是:云控制台 → 实例 → 安全组 → 配置规则 → 入方向,这里只放行业务必需的端口,原则是“最小化授权”:
- 80、443对全互联网开放,
0.0.0/0 - 22、3389只对你自己的办公IP开放,或者用云厂商的“堡垒机”统一管理
- 数据库端口3306、6379只对应用服务器内网IP开放,绝不能填
0.0.0/0 - 出方向规则保持默认全放行,出方向限制主要在服务器本机iptables做
服务器本地防火墙做二次收敛
即使安全组配好了,服务器自带的防火墙也别裸奔,以Ubuntu的ufw和CentOS的firewalld为主流:
# 只允许特定IP访问22端口 ufw allow from 203.0.113.10 to any port 22 proto tcp # 只放行80和443 ufw allow 80/tcp ufw allow 443/tcp ufw enable
CentOS/RHEL系列用firewalld:
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=203.0.113.10 port port=22 protocol=tcp accept' firewall-cmd --reload
端口的实时防护
统计显示,公网扫描器对22、3389、3306、6379这几个端口的扫描几乎从未停过,配置fail2ban能起到很好的拦截效果:连续几次登录失败就封IP一段时间,安装后用fail2ban-client status sshd查看封禁列表,监听公网端口时留意一下日志,比如Nginx的access.log出现大量异常请求,说明有人在扫你的服务,及时调整规则。
端口管理本质是服务管理:开了哪些端口,就代表你暴露了哪些服务,日常巡检时用ss -tlnp看一眼监听情况,配合安全组和防火墙把不用的端口关闭,把必须开的管理端口限制到可信IP,服务器稳定性会提升一个档次,不用的服务直接停掉,不用的端口坚决不开,这就是最朴素的服务器安全原则。
Q&A:服务器端口被占用、打不开怎么排查
服务器端口被占用怎么办?
先用lsof -i:端口号或ss -tlnp找到占用端口的进程PID,确认该进程是否还有用,如果是垃圾进程或残留旧进程,执行kill -9 PID,如果是另一个服务正在用,比如Apache占了80、Nginx想用80,那就让其中一个换端口,在配置文件中修改listen字段,改完记得nginx -t验证再reload。
服务器端口怎么查看?
Linux下执行ss -tlnp查看所有监听端口,想看特定端口加grep过滤,比如ss -tlnp | grep 3306,Windows服务器执行netstat -ano | findstr :端口号,查看某个端口是否对外开放,从另一台机器用telnet 服务器IP 端口号测试。
服务器443端口打不开是什么原因?
443端口打不开,从三个层面依次排查,第一,服务层面:执行ss -tlnp | grep 443确认Nginx或Apache确实监听了这个端口,证书配置错误会导致服务启动失败,第二,服务器防火墙:检查firewalld或ufw是否放行443/tcp,第三,云安全组规则:进云控制台确认入方向有放行HTTPS 443的规则,来源IP为0.0.0/0,三层都放行后,在浏览器用https://域名访问测试,域名解析未生效也会造成类似现象,要同时确认域名A记录已正确指向服务器IP。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/793678.html


