高危端口排查与加固指南:从SSH暴力破解到Redis未授权访问
2026/9/15 21:13:29 网站建设 项目流程

做安全运维这些年,每次拿到一台新服务器的第一件事就是扫一遍端口。说实话,看到 22、3389、3306、6379 这类端口直接裸奔在公网上的服务器,我都会替对方捏把汗。高危端口不是危言耸听,而是无数攻击事件用惨痛教训换来的共识。这篇文章我就把这六个最常见的“高危分子”逐个拆开,讲清楚它们为什么危险、攻击者通常怎么打、我们又该怎么收口。不管你是刚入行的运维新人,还是自己折腾服务器的个人开发者,这篇文章都能帮你建立一套完整的风险排查思路。

1. 为什么这些端口会被划进“高危名单”

1.1 高危端口不是危言耸听

端口本身不是漏洞,它是服务与外界通信的窗口。一台服务器要对外提供服务,就必须开放相应的端口,比如网站要开 80/443,远程管理要开 22 或 3389,数据库要开 3306,缓存要用 6379。问题是,很多人在开端口的时候只想着“能用就行”,完全没想过这个窗口同时也给攻击者留了一扇门。

我参与过的安全巡检里,十台公网服务器至少有五六台存在端口过度暴露的问题。有些是云厂商默认安全组规则太宽,有些是运维图省事直接放行 0.0.0.0/0,还有些是开发环境上线时没改配置。结果就是,攻击者的扫描器只要在公网上随机扫一圈,就能把开着这些端口的服务器扒个精光。你想想,你家大门装的是指纹锁,结果你为了通风把窗户全打开了,小偷不翻窗户翻哪里?

所谓高危端口,指的并不是端口本身有漏洞,而是它所承载的服务一旦被攻破,直接等同于拿到了服务器的核心权限。远程桌面端口被爆破成功,攻击者相当于坐到了你的电脑前;Redis 端口未授权访问,攻击者可以直接往服务器上写文件。这才是高危的真正含义——攻击面大、利用门槛低、危害级别高。

1.2 风险等级的底层逻辑

安全圈对端口的风险评级通常看四个维度:默认开放情况、暴露面大小、利用难度、权限高度。

默认开放情况很好理解。3306 安装完 MySQL 就默认监听,6379 装完 Redis 就默认监听,很多人压根没想过改配置,服务装好就直接跑起来了。暴露面大小指的是这个端口通常在公网被扫描到的概率,像 22、3389 这类远程管理端口,几乎每个攻击者的扫描字典里都有,天天被爆破几百次都不稀奇。利用难度看的是攻击者拿下这个端口需要多高的技术门槛。弱口令爆破几乎零门槛,Redis 未授权访问甚至不需要密码,这些就是攻击者的“新手村”。

权限高度最关键。拿到数据库端口意味着直接接触核心数据,拿到 SSH 和远程桌面端口意味着直接控制整台机器。一个端口对应的是几条数据的查询权限,还是整台服务器的 root 权限,风险评估完全是两个量级。

提示:判断一个端口是否需要公网暴露的唯一标准,是看它的使用者是否来自公网。如果只有你自己远程管理需要用,那就应该把它限定在你的办公 IP 或者跳板机 IP 上。

2. 逐个拆解:六个端口各自的风险画像

2.1 80/443:Web 服务攻击面最大

很多人觉得 80 和 443 是“安全端口”,因为所有网站都要用,不用它们网站就跑不了。这话没毛病,但危险也正是来源于此——80/443 是攻击者研究最深、工具链最成熟的攻击入口。挂在 Web 服务后端的中间件(Nginx、Apache、IIS)和框架(ThinkPHP、Spring、Struts2 这类)一旦存在已知漏洞,攻击者通过 80/443 端口就能直接远程利用。

在巡检过程中,我见过最典型的 Web 攻击路径是这样的:攻击者先用目录扫描工具跑一遍站点,找到后台登录入口和管理员路径,然后尝试弱口令,或者直接利用某个中间件的未授权访问漏洞进入后台。要是运气好碰到一个上传点,还能直接传个 webshell,整台服务器就交代了。整个链条全都是通过 80/443 进出的,你根本没法关掉这两个端口来防御。

更麻烦的是,很多中小团队没有专职安全人员,业务代码里的 SQL 注入、文件上传、越权访问一个个全是窟窿。端口关不掉,就只能靠应用层防护来兜底,比如 Web 应用防火墙、严格的输入校验、最小权限原则这些。但现实是,大部分人把这些全跳过了,系统上线什么防护都没有。

我给个人站长的建议是:能用 HTTPS 就别用 HTTP,顺手把 HTTP 强制跳转到 443;Nginx/Apache 的版本要及时更新,别用考古版本;后台路径改成一个不常见的路径,再配上访问 IP 白名单,能挡掉一大半脚本小子的骚扰。

2.2 22:SSH 暴力破解重灾区

如果说 80/443 是正面战场,那 22 端口就是游击战的重灾区。SSH(Secure Shell)是 Linux 服务器最常用的远程管理方式,几乎每台 Linux 服务器都开着 22 端口。攻击者不需要知道你的系统有什么漏洞,只需要一个扫描工具,把常见用户名加常见密码组合往你的 22 端口灌就行了。

我在一台测试服务器上做过实验,把它放到公网上只开 22 端口,不到 24 小时,auth 日志里就攒下了三千多条失败的登录尝试。有人可能会想,反正密码不对,随它扫吧。但你仔细看日志就会发现,攻击者用的是分布式扫描,来自世界各地几十个 IP 同时试探。一旦你的密码恰好落在他们的字典里,比如123456admin@123这种,服务器就直接被接管了。

除了暴力破解,SSH 还有几个经典风险点。一个是默认端口,很多攻击工具扫的就是 22,换个高位端口确实能规避一部分无差别扫描,但这只是安全性提升的“第一层窗户纸”,绝不能替代强密码和密钥登录。另一个是密钥管理不当,有人把私钥直接放服务器上,或者私钥泄露到 GitHub 仓库,结果比弱密碼还要命。

最稳妥的做法是彻底禁用密码登录,只允许密钥认证,同时把 root 用户的直接 SSH 登录关掉,改用普通用户加上 sudo 提权。如果团队多人管理,再在 sshd_config 里限制 AllowUsers,只放行指定账号,管理面立刻就小多了。

2.3 3389:远程桌面不等于不要防护

Windows 服务器的远程桌面端口是 3389,这个端口在近几年的勒索软件攻击中出场率非常高。攻击逻辑跟 SSH 很像——先扫描公网开放的 3389,再尝试弱口令爆破。一旦撞进系统,攻击者就可以通过远程桌面直接操作你的 Windows 桌面。更麻烦的是,Windows Server 默认开启了管理员账户,账号名是公开的,攻击者只需要猜密码就行,爆破的难度一下子低了一大截。

我处理过一起真实事件,一台没有加域、没有安全组策略的 Windows Server 被爆破成功,攻击者在里面部署了挖矿程序,还改了管理员密码,等于直接把这台服务器“绑架”了。后来想把数据抢救出来,费了很大周折。其实最初的防范只需要三步:限制来源 IP、改掉默认端口、开启账户锁定策略。可惜当时都没做。

如果你用的是云服务器,我强烈建议把 3389 的入口控制在安全组里,只允许公司固定出口 IP 访问。因为远程桌面这个服务本身就是给“人”用的,正常人不会跑到咖啡厅的随机 IP 去连服务器。把端口暴露范围缩小到固定的几个 IP,攻击者的扫描器就算扫到了 3389,也没法建立连接。

2.4 3306:数据库端口一旦中招就是脱库

MySQL 的默认端口 3306 是数据安全的重灾区。数据库里存的是业务核心数据,用户信息、订单记录、支付数据全在里面。可说来也怪,我见过不少服务器的 3306 端口直接在公网暴露,数据库账号密码还是root/123456。攻击者只要连上数据库,就能执行任意 SQL,把整库数据拖走。

数据库被直接打进后台的后果,比 Web 被打还要严重。Web 被拿下来,可能还要翻文件、提权,才能碰到数据库。而 3306 暴露在公网,攻击者用 Navicat 就能直连,连 SQL 注入都省了。最典型的事故是拖库以后被勒索——攻击者拿着你的数据,让你交钱才删备份。数据泄露出去,用户隐私受影响,公司还要面临监管处罚和信任危机。

MySQL 部署最少要做三件事:第一,把监听地址从0.0.0.0改成127.0.0.1,让数据库只能在服务器本机访问,应用通过本机连接;第二,禁用 root 远程登录,单独建一个只授权给业务库的最小权限账号;第三,如果是内网多台服务器需要访问数据库,那就只在防火墙里放行应用服务器的内网 IP。把这三件事做了,3306 的公网暴露风险基本就归零了。

2.5 6379:Redis 未授权访问的典型代表

现在重点说说这次热搜里的 6379 端口。

Redis 是一个非常流行的内存数据库,常见用途是缓存、会话存储、消息队列。它的设计初衷是高性能,所以默认配置里没有设置访问密码,而是假设它运行在可信的内网环境。但问题是,现在很多 Redis 都跑在云服务器上,而不少用户直接把 6379 暴露到了公网。只要攻击者用 Redis 客户端连上这个端口,就能直接执行命令。如果 Redis 是以 root 权限启动的,那后果更是不堪设想。

未授权访问能干什么?最常见的一种利用方式是通过 Redis 的CONFIG SET dirCONFIG SET dbfilename命令,把数据库的持久化文件写到任意目录。比如写到/var/spool/cron/生成一个计划任务,服务器到点就会执行攻击者植入的命令;或者写到/root/.ssh/生成一个授权公钥,攻击者就能免密登录你的服务器。Redis 本身又有SLAVEOF命令,配合主从复制还能进一步实现远程代码执行。这一套打下来,一台未防护的 Redis 服务器就等于给攻击者铺好了一条通往 root 权限的高速公路。

我在安全测试中还原过这种攻击,整个过程不需要任何密码。攻击方机器装一个 Redis 客户端,直接执行redis-cli -h 目标IP ping,如果返回PONG,就说明对方根本没设密码。接下来就是顺着上面的思路,写了几个命令进去,然后测试机就多了一个计划任务和一个 SSH 公钥。整个过程五分钟不到,而服务器管理员可能几个月都不会看一眼 Redis 的日志。

注意:强烈建议给 Redis 设置访问密码,不仅要在 redis.conf 里配置requirepass,还要把protected-mode yes打开,同时把监听地址从0.0.0.0改到内网或者本机。这三样缺一样,6379 就是悬在你服务器头上的剑。

2.6 其他需要一起梳理的高危端口

除了上面六个,日常巡检还要留意几个端口:21(FTP)存在明文传输和匿名登录的问题,文件在传输过程中能被抓包直接看到;23(Telnet)更是离谱,它的所有通信都是明文,等于把用户名密码直接贴在公网上跑,能不用尽量别用;445(SMB)是内网横向移动的重要通道,WannaCry 勒索病毒传播就依赖这个端口,公网无论如何都不应该开放。

还有一个容易被忽略的,是数据库系列的其他端口,Oracle 的 1521、PostgreSQL 的 5432、MongoDB 的 27017。它们的安全基线思路和 MySQL 完全一致,核心就一句话:不该对外,就别对外。

我把这些端口整理成一个速查表,方便你巡检时直接对照:

端口对应服务高危原因基础加固动作
80HTTPWeb 攻击面大,易被注入和利用中间件漏洞启用 HTTPS、及时更新中间件、部署 WAF
443HTTPS同上,是攻击者重点研究入口Web 应用层防护、后台 IP 白名单
22SSH长期被暴力破解、弱口令风险高禁用密码登录、仅密钥认证、限制来源 IP
3389RDP爆破成功率影响直接,易被勒索利用安全组限定来源 IP、开启账户锁定策略
3306MySQL数据库直连,脱库风险极高监听内网、禁用 root 远程登录、最小权限账号
6379Redis未授权访问可写文件、可 RCE设置密码、开启保护模式、监听内网
21FTP明文传输、匿名访问风险改用 SFTP/FTPS、禁匿名登录
23Telnet全明文,密码直接暴露彻底禁用,改用 SSH
445SMB勒索病毒横向传播主力公网禁开,内网也建议按需收敛

3. 安全加固实操:从封堵到收敛的花式打法

3.1 最基本也最有效的三步

讲完了风险,说点能直接上手的。不管是云服务器还是物理机,端口安全的第一步永远是“能不开就不开,能限就限”。

第一步,做一次端口普查。登录服务器,用ss -lntp或者netstat -lntp看当前所有监听端口,把那些不知道是谁开的、不知道干嘛用的端口逐个确认。确认不清楚的,直接按停用处理。很多服务器跑了一堆不用的服务,比如没人用的 FTP、闲置的 RabbitMQ,端口挂在那里就是白白送攻击面。

第二步,在防火墙层面对端口做收敛。云服务器优先用安全组,物理机和自建机房用 iptables/firewalld。把端口放行规则从“放行所有来源”改成“仅放行需要的来源”。比如 SSH 只让办公 IP 或跳板机连,数据库端口只让应用服务器内网 IP 连,管理后台只让管理员 IP 连。这个动作能在几秒内把暴露面缩小一个量级。

第三步,给服务本身做加固。改默认端口是举手之劳,比如把 SSH 从 22 改成 22822,把 Redis 从 6379 改成 16379。这样虽然不能防御定向攻击,但可以躲开大量无差别扫描。配合上强口令、密钥、服务配置里的绑定地址限制,一组基础的“三层防护”就成型了。

3.2 服务端的安全配置示例

光说不练假把式,我把几个核心服务的加固配置贴出来,你可以直接对照改。

SSH 的/etc/ssh/sshd_config里,重点关注这几项:

# 修改默认端口,避开批量扫描 Port 22822 # 禁止 root 直接登录,用普通用户 + sudo PermitRootLogin no # 强制公钥认证,禁用密码认证 PubkeyAuthentication yes PasswordAuthentication no # 限制可登录用户白名单 AllowUsers ops admin web

改完记得systemctl restart sshd,但改配置前先开一个新终端测试能连上,不然手滑把自己锁在外面就尴尬了。

MySQL 的/etc/mysql/mysql.conf.d/mysqld.cnf里,把bind-address改成内网地址:

[mysqld] bind-address = 127.0.0.1 # 如果应用在另外一台内网机器上,改成内网 IP 或内网网段 # bind-address = 192.168.1.50

然后给业务账号最小化授权,禁止 root 远程登录:

-- 删除默认的空密码用户 DELETE FROM mysql.user WHERE user=''; -- 创建仅访问业务库的账号 CREATE USER 'app_user'@'localhost' IDENTIFIED BY '强密码'; GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'localhost'; -- 业务服务器需要远程访问时,再放开指定内网 IP CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY '强密码'; GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'192.168.1.%'; FLUSH PRIVILEGES;

Redis 的redis.conf里,三件套一次配齐:

# 监听内网,而不是所有网卡 bind 127.0.0.1 ::1 # 或监听内网 IP # bind 192.168.1.50 # 保护模式,防止未授权访问 protected-mode yes # 设置访问密码 requirepass YourStrongPassword # 高危命令禁用或重命名 rename-command FLUSHALL "" rename-command CONFIG ""

这里多说一句,Redis 的rename-command可以把危险命令禁掉,即使有人拿到了连接,也没法执行CONFIGFLUSHALL这类破坏性操作。不过改之前要确认业务代码不需要这些命令,不然上线后报错就麻烦了。

3.3 纵深防御:单点加固之外的手段

端口加固是基础,但你不能指望它挡住所有攻击。纵深防御的意思是,就算有一层被穿透了,后面还有好几层兜底。我自己的习惯是按“边界 → 网络 → 主机 → 应用 → 数据”五层来搭。

边界层用云安全组加防火墙把暴露面收住;网络层在入口部署流量监控,能日志审计,有条件就上入侵检测系统(IDS/IPS);主机层装个主机安全 Agent,开文件监控和登录告警;应用层给 Web 服务上 WAF 或云 Web 防火墙,拦 SQL 注入和恶意扫描;数据层每天做异地备份,关键库开启 binlog,保证就算被攻击,也能恢复到出事之前的状态。

很多人觉得搞安全是成本,我反而觉得这是省钱的。一次数据被删、业务宕机的损失,够买好几年的安全产品了。个人开发者预算有限,至少要把免费的那几样做到位:安全组规则、系统防火墙、强口令、密钥登录、定期备份、日志监控。真要等到出事再补,成本至少翻十倍。

4. 排查实录:当高危端口真的被盯上时

4.1 怎么发现异常

前面说了这么多加固,但如果你接手了一台已经跑了好几年的老服务器,大概率连它开了哪些端口都说不清楚。这时候先别急着加固,先做一轮“体检”。

上服务器第一时间跑这几个命令:

# 查看所有监听端口及对应进程 ss -lntp # 查看当前所有网络连接,看有没有可疑外联 ss -antp | grep ESTABLISHED # 查看最近登录记录和失败尝试 last -n 20 lastb -n 50 # 查看当前登录用户 who

判断有没有被入侵,通常看几个指标:有没有不明来源的 ESTABLISHED 连接、SSH 登录记录里有没有可疑 IP、CPU 利用率是不是莫名居高不下、有没有陌生进程在跑。比如你用top看到有个叫kdevtmpfsi或者xmrig的进程,那十有八九是被人种了挖矿程序。再配合crontab -l查计划任务、cat /root/.ssh/authorized_keys查后门公钥,大部分常见后门都藏不住。

4.2 典型攻击链还原

拿我之前处理的一台 Redis 服务器举例。管理员反馈业务响应变慢,top 一看 CPU 被一个陌生进程占满。排查过程是这样的:

第一,网络连接里看到这台服务器在向一个境外 IP 不断发起连接,访问的是 4444 端口,基本可以确定是挖矿木马在回连矿池。第二,检查crontab -l,发现多了一条没见过的计划任务,每五分钟从某个 URL 下载脚本执行。第三,检查授权公钥,发现/root/.ssh/authorized_keys里多了一把陌生公钥。再往前查,Redis 日志里根本没开,但 6379 端口公网可访问、未设密码。攻击链一下就清楚了:扫描器发现 6379 开放,攻击者用 Redis 客户端连上,通过CONFIG SET dir把 cron 文件写到计划任务目录,服务器定时下载木马运行,再写入 SSH 公钥留后门,彻底拿下这台机器。

整个攻击过程没有任何高深的技术,一个会点 Redis 命令的人就能完成。这也是我反复强调 6379 不安全的原因。防护其实特别简单——设个密码、绑个内网,就能把这条链路的源头掐断。

4.3 清理与恢复流程

真遇到被入侵,别慌,按顺序处理:

第一步,先把服务器从网络断开。云服务器直接改安全组,把所有入站规则都停掉,物理机就拔网线。断网是为了防止攻击者在你清理的时候继续操作,也防止木马继续外传数据。

第二步,保留证据后重装系统。如果服务器上没什么不可丢失的数据,我强烈建议别浪费时间“杀毒”,直接把系统重装。原因很简单,攻击者很可能已经在系统里埋了 rootkit,你想排查根本查不干净,不如彻底重来。重装之前先把需要的配置和数据备份出来,但备份文件也要用杀毒软件扫一遍,防止木马被带回来。

第三步,重装之后重新搭环境,这时候把前面所有加固动作全部执行一遍:端口收敛、服务加固、密钥登录、防火墙白名单。别急着把业务建起来,先把安全基线做扎实。

第四步,改所有密码,包括数据库密码、应用密码、第三方平台密码。攻击者可能已经抓取过你服务器上所有凭据,你不改,就等于后门一直存在。

5. 常见问题与避坑心得

5.1 常见问题速查表

问了这么多,把我在日常答疑里碰到的高频问题整理成表格,基本覆盖了新手最常踩的坑:

问题原因解决方案
改了 SSH 端口连不上了防火墙没放行新端口先放行新端口测试,再关旧端口
MySQL 只能本机访问,应用连不上bind-address 绑定错了地址确认应用服务器 IP,绑定到对应内网 IP
Redis 设置了密码应用报错业务配置里没加密码认证修改业务配置,加上 requirepass 对应的密码
服务器被爆破但没成功22 端口公网暴露限制来源 IP,启用密钥认证,禁止密码登录
Web 站点被上传木马上传接口没做类型校验部署 WAF,升级框架,加文件内容校验
安全组改了没生效云平台规则和系统防火墙冲突两层都检查,以最严格的为准
不知道服务器开了哪些端口缺少巡检习惯每月用ss -lntp检查一次,记录端口清单

5.2 我的几条实操心得

最后聊几点土办法。这些不算什么高深理论,但在实际运维里真的管用。第一,给每台服务器做一个端口台账,把开放的端口、服务、负责人、用途、最后巡检时间都记下来。没有台账的服务器,过三个月连管理员自己都不知道开了什么端口,这本身就是最大的风险。第二,所有远程管理端口,能加白名单就加白名单。你不需要从任何地方都能连上服务器,至少把常用办公地的 IP 加进去,没坏处。第三,云服务器的安全组规则一定要定期梳理,很多人加了一条临时放行规则后就忘了删,这条规则可能成了攻击者进来的那扇门。第四,日志别只开着不管,最好配一个自动告警,比如登录失败次数超过阈值就推送提醒。有没有提醒完全是两个概念。

我把这些经验整理下来,不是说要吓唬谁,而是希望大家意识到,安全不是安全团队一家的事。开发、运维、个人站长,每个人手上的服务器都可能是攻击者的目标。高危端口这个东西,你不在意它,它就可能在某一天成为别人进入你系统的门。趁服务器还没出事,花半小时把端口梳理一遍,把该关的关掉、该限制的限制住,这笔账怎么算都划算。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询