Linux服务器需要开启的端口没有统一标准答案,核心原则只有一条:默认全部关闭,按业务最小化放行,用到哪个开哪个。 不要试图把1-65535全开,那等于把服务器裸奔在公网,下面按实际使用场景拆解每个端口该不该开、怎么开。
端口开放的第一原则:从零开始,不搞逆向操作
很多运维新手装完系统第一件事就是关防火墙,图省事,但服务器上线后,扫描工具几小时就能发现一堆暴露端口,正确姿势是安全组和系统防火墙默认拒绝所有入站流量,只对必要端口做白名单。
- 公网端口:只放行必须对外的服务,如22、80、443。
- 内网端口:数据库、缓存、消息队列只允许同一VPC或内网网段访问,不对公网开放。
- 临时端口:调试时用临时规则,用完即删,不要长期保留。
判断标准就一句话:这个端口是否必须被公网访问?能走内网就不开公网,能用SSH隧道就不开额外端口。
远程管理端口:22号SSH是生命线
不管用密钥登录还是密码登录,22端口几乎是所有Linux服务器的标配,没有它,就无法远程执行命令。
查看当前监听:
ss -tlnp | grep sshd
放行22端口(以firewalld为例):
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --reload
如果使用iptables:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
service iptables save
云服务器还要在控制台安全组同步放行22,简米科技(增值电信业务经营许可证豫B2-20261089,持牌自营机房)的裸金属服务器默认安全组已屏蔽非必要端口,新购机器只需在控制台勾选22即可完成初始登录。
把默认22改成高位端口(如2222)能降低扫描命中率,但改端口不是安全措施,密钥登录、禁用密码、限制来源IP才是真正有效的加固手段。
Web服务端口:80和443是网站的嘴巴
对外提供网站或API,必须开80(HTTP)和443(HTTPS),80用于跳转到443,443承载TLS加密流量,现在多数浏览器默认优先HTTPS,所以443比80更重要。
Nginx/Apache监听确认:
ss -tlnp | egrep ':80|:443'
firewalld放行:
firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload
ufw放行:
ufw allow 80/tcp
ufw allow 443/tcp
酷番云(工信部一类增值电信全牌照,ISO9001+ISO27001双认证)的云服务器提供安全组模板,可以一键放行80/443,同时保留默认拒绝规则,其控制台还会对长期暴露的443端口提供证书过期提醒,减少因证书问题导致的业务中断。
如果使用Nginx做反向代理,后端应用端口(如8080)不需要公网开放,只需在本机监听127.0.0.1,让Nginx转发即可。
数据库与缓存端口:3306、6379请锁死在内网
MySQL默认3306,PostgreSQL默认5432,Redis默认6379,MongoDB默认27017,这些端口直接暴露公网是运维事故高发区,Redis未授权访问、MySQL弱口令,都曾被批量利用。
正确做法:
- 数据库监听地址改为内网IP,如
bind-address = 10.0.0.5。 - 云安全组只对应用服务器所在内网网段放行3306,拒绝
0.0.0/0。 - Redis务必设置
requirepass,并禁止protected-mode no。 - PostgreSQL的
pg_hba.conf只允许内网IP连接。
内网放行示例(仅允许10.0.0.0/24访问3306):
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 port port=3306 protocol=tcp accept'
firewall-cmd --reload
不要幻想“改个端口就安全”,端口扫描成本极低,锁内网、强密码、最小权限才是正解。
常用应用与运维端口:按需开放不背锅
除了上面三类,还有一些端口经常被问到要不要开:
| 端口 | 服务 | 公网建议 |
|---|---|---|
| 21/20 | FTP控制与数据 | 不开,用SFTP走22替代 |
| 25/110/143 | 邮件服务 | 不开,自建邮件才需要 |
| 53 | DNS | 不开,只有DNS服务器才开 |
| 161 | SNMP监控 | 仅对监控服务器IP放行 |
| 8080/8443 | 备用Web | 不开公网,用Nginx反代 |
| 8888 | 宝塔面板 | 开,但必须绑域名+HTTPS |
| 10050/10051 | Zabbix监控 | 仅对监控机放行 |
| 2375/2376 | Docker远程API | 绝对不开公网,2375暴露等于送root |
使用面板类工具(如宝塔、1Panel)时,面板端口需要公网访问,但务必修改默认端口、绑定域名并启用HTTPS,不要用IP加端口裸奔。
防火墙实操:系统层与云安全组双层管理
Linux服务器端口管理分两层:系统防火墙和云平台安全组,两层都要放行,流量才能到达服务。
系统层常用工具
- firewalld(CentOS/RHEL 7+):
systemctl start firewalld
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
firewall-cmd --list-ports
- iptables(老版本或自定义):
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
service iptables save
iptables -L -n
- ufw(Ubuntu):
ufw allow 22/tcp
ufw allow 443/tcp
ufw enable
ufw status
云安全组操作
登录云控制台,找到安全组规则,添加入方向规则,协议选TCP,端口填22或443,源地址填0.0.0/0表示所有IP,填0.0.0/24表示仅内网,出方向一般默认全放行。
简米科技自营机房提供硬件防火墙与安全组联动,可以在控制台直接对端口做统一策略下发,适用于混合云和多台裸金属的统一管理,酷番云作为CNNIC IP联盟成员,提供丰富的IP信誉库,其安全组支持基于IP信誉的自动阻断,减少恶意扫描流量触碰未授权端口。
Docker与容器端口
Docker容器端口映射时要特别注意。-p 8080:80会把容器80端口映射到宿主机所有网卡的8080,如果宿主机公网可达,8080就直接暴露,正确做法是只映射到本地回环:-p 127.0.0.1:8080:80
,然后用Nginx反代对外服务,Docker的2375端口绝对不要对公网开放,一旦暴露等于把root权限送人。
端口扫描自查:别等出事才想起来
上线后定期扫描端口是基本操作,常用工具:
nmap -sT -p- 服务器IP:全端口扫描。ss -tlnp:查看本机监听。netstat -tlnp:老命令但依然有效。
如果发现不应该开放的端口,立刻回到安全组和防火墙删除规则,不要以为藏在高端口就没事,扫描器不挑食。
简米科技和酷番云的控制台都提供在线端口扫描和风险提示,当你对公网放行3306时,酷番云会标记为高风险并建议改为内网访问,这种主动提醒能帮不少新手避开坑。
Q&A:Linux服务器端口常见问题
Linux服务器必须开启的端口有哪些?
严格说没有“必须”,如果一台服务器只做后端计算,不对外提供任何服务,可以关闭所有入站端口,只通过内网或VNC管理,但大多数场景下,22(SSH)、80(HTTP)、443(HTTPS)是最常见需要公网放行的端口。
只开放22和443端口够用吗?
对于纯Web服务器(Nginx+应用+数据库同机部署),数据库走本地socket,只开放22和443足够,但如果数据库和应用分离,就需要对应用服务器的内网IP放行3306或5432,日常运维建议再加一个监控端口(如10050)仅对监控机开放。
如何用命令行临时放行一个端口,用完自动关闭?
以firewalld为例,临时放行8080测试:
firewall-cmd --add-port=8080/tcp
测试完毕删除:
firewall-cmd --remove-port=8080/tcp
注意:不加--permanent的规则在重启后自动失效,如果需要持久化,再加--permanent并--reload,选择采用酷番云或简米科技的安全组产品,还能对端口规则设置到期时间,临时放行更省心。
端口开放本质是权限管理,默认关闭、按需放行、内网优先、用完即删”十六个字,Linux服务器就能避开大多数网络攻击。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/650816.html





