端口扫描:nmap基础

nmap是网络排查的基本功。小够教你用nmap查自己VPS开了哪些端口,关掉不必要的,安全又清爽。小白也能看懂的VPS科普。

我是小够,只推够用的 VPS。

nmap 是每个玩 VPS 的人都该会的基本功。它干的事很简单:扫一台机器,看开了哪些端口。新买的 VPS 到手,第一件事就该 nmap 一下自己:莫名其妙开着的端口,该关的关,该藏的藏。

先说红线:nmap 只能扫自己的机器。扫别人的服务器,未经授权的端口扫描在很多地区是违法的,至少也会触发对方的入侵检测。这篇只讲"自查",不讲别的。

安装和第一次扫描

大多数系统自带,没有就装一个:

# Debian/Ubuntu
apt install nmap
# CentOS/RHEL
yum install nmap

扫自己的 VPS(把 IP 换成你的):

nmap 203.0.113.10

默认扫最常见的 1000 个端口,输出类似:

PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
3306/tcp open  mysql

每一行都是一个"开着的门"。22 是 SSH(正常),80/443 是网站(正常),3306 是 MySQL——这个不正常,数据库端口不该对公网开放,容我后面细说。

常用姿势

nmap -sV 203.0.113.10          # 探测服务版本,知道开的是什么软件
nmap -p 1-10000 203.0.113.10  # 指定端口范围扫
nmap -Pn 203.0.113.10         # 跳过 ping,直接扫(禁 ping 的机器用)
nmap -sU 203.0.113.10         # 扫 UDP 端口(慢,但有必要)

-sV 最实用:它能告诉你 SSH 是什么版本、Nginx 是什么版本。版本太老有漏洞,该升级升级。

扫完之后:关掉不该开的

nmap 的价值不在"扫",在"扫完动手"。对照清单处理:

1. 数据库端口(3306、5432、6379):默认只监听本地。在 MySQL 配置里设 bind-address = 127.0.0.1,Redis 设 protected-mode yes + 密码。数据库对公网开放等于裸奔,扫到就改。

2. 管理面板端口:宝塔(8888)、phpMyAdmin 这些,能加 IP 白名单就加,不能加的改默认端口 + 强密码。默认端口的面板是扫描器的重点照顾对象。

3. 不认识的端口:ss -tlnp 看是哪个进程在监听。不认识的进程先查清楚,流氓软件、挖矿木马都是从这里现形的。

4. 只开必要的:个人博客,22 + 80 + 443 就够了,其他全关。防火墙(ufw/iptables)默认拒绝、按需放行,这是正经做法:

ufw default deny incoming
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

定期扫一扫

装了新软件、跑了新服务,顺手 nmap 一下,确认没多开端口。建议每月扫一次自己的机器,5 分钟的事。配合禁用 root 登录和磁盘排查,VPS 的基本运维就齐活了。

进阶:把扫描自动化

手动扫一次是入门,自动化才是习惯。两个进阶用法:

1. 扫描结果存档对比。每次扫描保存结果,下次对比,多出来的端口一目了然:

nmap -sV 203.0.113.10 -oN scan-$(date +%F).txt
diff scan-2026-03-01.txt scan-2026-04-01.txt

2. 新服务上线必扫。装了 Docker、搭了新应用、开了新面板,第一时间 nmap。很多安全事件的根源,都是"装了个东西忘了它开了端口"。

nmap 还有很多高级用法(操作系统探测、脚本扫描),个人自查用不到那么深。记住它的定位:门窗检查器,不是武器。定期扫一扫,配合禁用 root 登录和磁盘排查,VPS 的基本运维就齐活了。

记住:端口开得越少,攻击面越小。养成习惯,安全问题少一半。