服务器被人摸进去,很多时候不是密码设得太弱,是门压根没关。有人觉得装个面板、密码搞复杂点就稳了,结果 6379 挂在那,从公网随便连。端口开放检测干的就是这件事——把对外应答的端口挨个列清楚,看哪些该关的还开着,哪些你压根不知道它开着。

先弄明白 open 到底是什么意思
扫描器报 open,意思是它对那个端口发了个包,对面回了。回了就说明有进程在监听,中间的云安全组、系统防火墙、iptables 都没拦住。closed 是回了个拒绝,filtered 是没回音。没回音不等于安全,也可能只是云厂商在前面把包吞了。这一点坑过不少人,公网扫出来一片 filtered 就觉得高枕无忧,换个内网地址一扫,全是 open。同一个端口,站在不同位置看,结论能反过来。
站内先照一遍镜子
我习惯先上机器看。ss -tulpn 一条命令,Linux 上基本都有;老一点的系统用 netstat -tulnp。重点看两列:本地地址和进程名。127.0.0.1:3306 和 *:3306 完全是两码事,前者只有本机能连,后者是所有网卡都收。0.0.0.0 和 ::: 都属于后者,::: 那个是 IPv6,特别容易被漏掉,很多人只配了 v4 的防火墙规则,v6 那边门敞着。看到 0.0.0.0 后头挂着 mysql、redis、memcached 的,这段就该动手了。lsof -i -P -n 也能看,输出啰嗦点但信息全。Windows 上用 netstat -ano,对着 PID 找进程。
还有一种特别隐蔽的:Docker 端口映射。容器跑起来的时候 -p 6379:6379,没写 127.0.0.1: 前缀,默认就是全网卡。宿主机上 ss 看得到,但你在主机防火墙里加规则未必管用,因为流量走的是 Docker 自己的 iptables 链。容器一多,谁开的什么端口连自己都记不清。
端口开放检测最容易误判的三处
第一处,安全组和主机防火墙是两层,扫出来不通别只查一边。第二处,从公网扫和内网扫结果不一样,做资产盘点得两边都来。第三处是 UDP,像 53、161 这类,扫出来常年是 open|filtered,这个状态说明不了太多问题,别看到就打报告说端口开放。
关掉端口,服务还得活着
直接 systemctl stop 最省事,可业务也跟着停了。常规做法是让它只监听本机,前面挂 Nginx 反代出去。数据库这么干,Redis 也这么干,顺手把 bind 127.0.0.1 和 requirepass 写进配置。SSH 换端口只是让日志清静点,真不算安全手段,顶事的是密钥登录、禁 root 直连、关掉密码认证。宝塔那个 8888、phpmyadmin 这类管理入口,别长期晾在公网上,用完就关,或者加 IP 白名单。
云主机那层安全组别当摆设
安全组是云上的第一道闸。很多机器在安全组里只放了 80、443、22,主机上其实开着更多,公网扫不出来——但同网段的其他机器能进,内网横向移动就是这么发生的。入方向规则逐条过一遍,凡是写着 0.0.0.0/0 的行,都问一句是不是真有必要。出方向一般不用太纠结。各家控制台的规则优先级、默认策略不完全一样,具体还是以服务商控制台的说明为准。
工具怎么挑
nmap 是常规武器,nmap -Pn -p- 扫全端口,慢但全;只想看常见的那几十个就加 -F。图省事可以用在线扫描站,但别把自家地址随手扔到不明来历的网站上。另外扫描这个动作本身,在某些服务商的条款里是受限的,扫自己机器一般没人管,扫别人就是另一回事了,这个分寸得有。
多长时间查一次
上新服务、装完面板、改完防火墙规则之后,各扫一遍。这个习惯比任何工具都值钱。平时一个月留一次记录,结果存下来,下次一对比,新冒出来的是哪个端口一眼就看得到。
不用把端口全关死。80、443 关了网站就没了。关键是每一个 open 你都能说出理由,说不出理由的,关掉试试,出问题再开回来——大部分时候关掉什么都不会发生。
【版权声明】:本站内容若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!