服务器端口并非越少越安全,但默认开启的端口越多,攻击面就越大,因此关闭所有不使用的端口是服务器安全加固的第一步,尤其是高危端口和远程管理端口,必须按需最小化开放。
你的服务器正在裸奔:哪些端口最该立刻关闭
很多站长和运维人员都有这样的经历:服务器刚买回来,装上宝塔面板或者LNMP环境,就急着上线网站,结果没两天就收到主机商的入侵警告邮件,或者网站被挂马、被爆破后台,问题往往就出在那些不该开的端口上。
服务器端口就像一个房子的门窗,你不可能把所有门窗都封死,但至少不能让后门和窗户大敞着,行业共识认为,90%以上的服务器入侵事件,攻击者利用的都是开放端口的漏洞或者弱口令,第一步不是装什么高深的安全软件,而是先做减法:把所有用不到的端口全部关掉。
高危端口清单:看到这些就直接关
以下端口是黑客扫描的重点对象,如果你的服务器没有对应的业务在跑,请立刻关闭,并在防火墙层面彻底屏蔽。
- 21端口(FTP):明文传输账号密码,抓包就能看到,现在都用SFTP或者SCP,FTP基本可以退役了。
- 23端口(Telnet):同样是明文,而且很多老设备还在用,坚决不用,直接关闭。
- 445端口(SMB):永恒之蓝漏洞就是打这个端口,Windows服务器尤其注意,Linux下Samba如果不关,风险同样巨大。
- 3389端口(远程桌面):这是被爆破的重灾区,几乎每秒都有扫描流量在探测,如果确实需要远程管理,也不要用默认端口,改成高位随机端口,并限制来源IP。
- 3306端口(MySQL):数据库端口暴露在公网等于把数据送给黑客,数据库只允许内网访问,禁止公网连接。
- 6379端口(Redis):很多服务用Redis缓存,但默认没密码,一旦暴露,可以直接被写入计划任务反弹Shell,服务器瞬间失守。
- 27017端口(MongoDB):同样存在大量未授权访问案例,数据库裸奔在公网,数据被删除勒索的新闻屡见不鲜。
只留这些端口,其他全部DROP
一个典型的Web服务器,合理的开放端口应该精简到个位数:
| 端口 | 用途 | 建议 |
|---|---|---|
| 22 | SSH远程登录 | 改成高位端口,限制来源IP |
| 80 | HTTP网站访问 | 必须开放,建议开启HTTPS |
| 443 | HTTPS加密访问 | 必须开放 |
| 3306 | MySQL内网连接 | 仅允许内网IP访问,禁止公网 |
| 6379 | Redis内网连接 | 仅允许内网IP访问,禁止公网 |
关掉多余端口后,你会发现服务器日志里的扫描攻击瞬间少了一大半。端口管理的关键原则是:默认拒绝,按需放行。
服务器端口应该怎么关?三种方法从入门到精通
关端口不是直接停服务那么简单,要配合防火墙规则和服务配置才能彻底堵死,下面按照操作难度从低到高,给出具体步骤。
云服务器安全组(最推荐,零成本)
购买简米云、酷番云、华为云等国内主流云服务器,控制台里都有一个安全组功能,这个比服务器内部防火墙更前置,相当于在云平台的网络入口处先过滤一层。
- 操作路径:云服务器控制台 → 实例列表 → 安全组 → 配置规则
- 入方向规则:只放行22、80、443等必要端口,其他端口全部删除
- 优先级:安全组规则从上到下匹配,默认拒绝原则,只加白名单
这个方式的优点在于,即使服务器内部防火墙没配置好,端口也不会直接从公网暴露,很多新手容易忽略这一步,直接在服务器内部开了防火墙,结果把自己SSH踢下线了,但安全组依然有效。
Linux系统防火墙(iptables或firewalld)
服务器系统内部的防火墙是第二道防线,负责精细控制每个端口的访问来源。
CentOS / RHEL 系列(firewalld):
# 关闭FTP端口 firewall-cmd --permanent --remove-port=21/tcp # 关闭Telnet端口 firewall-cmd --permanent --remove-port=23/tcp # 重载防火墙使配置生效 firewall-cmd --reload
Ubuntu / Debian 系列(ufw):
# 默认拒绝所有入站连接 ufw default deny incoming # 允许SSH(注意改成你自己的端口) ufw allow 2222/tcp # 允许HTTP和HTTPS ufw allow 80/tcp ufw allow 443/tcp # 启用防火墙 ufw enable
关闭系统服务本身(釜底抽薪)
防火墙只是封了门,但服务还在运行,进程依然占用了端口,更彻底的做法是把用不到的服务直接停掉并禁用开机自启。
# 查看系统当前监听的所有端口 netstat -antlp # 找到你不需要的服务进程,例如vsftpd(FTP) systemctl stop vsftpd systemctl disable vsftpd # 同理,关闭其他无用服务 systemctl stop telnet.socket systemctl disable telnet.socket
行业专家指出,端口占用和防火墙规则要配合检查,只关服务不配防火墙,或者只配防火墙不关服务,都容易留下隐患。
服务器端口管理常见问题问答
服务器端口开放太多会导致什么具体后果?
开放端口过多等于给攻击者提供了更多入口,每个端口背后都可能对应一个服务,而服务就有可能有漏洞,常见的后果包括:被爆破SSH或RDP弱口令、数据库被拖库、植入挖矿程序、被植入后门木马甚至被勒索病毒加密数据,只需要一次成功入侵,如果发现不及时,服务器就可能沦为肉鸡,被用来对外发起DDoS攻击,到时候损失的不只是数据恢复成本,还有云厂商的清洗费用和服务器封禁风险。
如何检测服务器上哪些端口处于对外开放状态?
使用在线端口扫描工具或本地的Nmap工具进行自检,查看从外部视角能看到哪些端口,这比光看服务器内部netstat结果更准确。
# 从本机扫描指定服务器的端口开放情况 nmap -sS -p- 你的服务器公网IP
将该扫描结果
与安全组规则对比,凡是列表里出现但安全组没放行的端口,都需要排查是哪个服务监听的,再决定是否关闭服务或增加拦截规则,推荐定期每月扫描一次,特别是当你修改了服务器上的服务配置之后。
简米云服务器TCP端口全开安全吗?
肯定不安全,除非这台服务器上有非常特殊的业务需求,否则不建议这样做,比如有一类用户为了图方便,不想每次加端口都去改规则,直接把安全组入方向设置成0.0.0.0/0对所有端口放行,这等于把家门口的锁全拆了,简米云的云盾和态势感知虽然能拦截部分攻击,但服务器的漏洞和弱口令依然防不住,最稳妥的做法还是按需开放,并且在云平台的安全告警里关注每天的拦截日志,如果发现有恶意扫描来源IP,可以在安全组里单独封锁。
端口关闭后的下一个安全动作
关掉多余的端口只完成了基础防护,接下来你还需要做两件事。
加固远程管理端口
SSH端口不要停留在22,改成20000以上的随机高位端口,同时禁用root直接登录,使用密钥认证方式登录,Windows服务器则修改3389默认端口,在注册表里找到HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp\PortNumber和WinStations\RDP-Tcp\PortNumber两处数值,改成自定义端口,并确保防火墙放行新端口。
系统账号和口令要够复杂
密码至少16位以上,包含大小写字母、数字和特殊符号,避免使用123456、password、admin888这类伤口令,建议直接使用密钥登录或使用密码管理器生成随机口令,同时留意服务器上的异常登录日志,定期查看/var/log/secure或/var/log/auth.log文件中是否有大量失败的login尝试,如果连续多次来自同一个IP的登录错误记录,可以直接在防火墙中封锁该IP。
对于数据库和数据存储类服务,记得关闭公网地址监听,做到只监听127.0.0.1或内网地址,这样即便防火墙不小心放行了这些端口,也没有办法直接从外部连上。服务器端口管理要做到内外兼修,外部防火墙过滤端口,内部服务锁定地址。
端口关闭只是开始,持续检查才能守住底线,毕竟,安全不是一次性的操作,而是日复一日的维护习惯。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/795655.html


