服务器nmap端口扫描,自查对外开放端口
服务器对外开放端口越多,被扫描和攻击的风险就越大。
用 nmap 做一次端口扫描,可以快速看清哪些端口正在监听、哪些暴露在公网,再决定是否关闭或限制访问。
下面按零基础也能照做的顺序,讲清安装、扫描、解读和收敛。
先确认扫描目标和网络位置
nmap 是一款网络探测工具,常用来判断目标主机开放了哪些端口。
自查服务器时,建议从 服务器本机 和 外部网络 两个位置各扫一次,因为本机看到的是监听状态,外部看到的是实际可达状态。
准备条件:
- 一台可登录的 Linux 服务器,具备
root或sudo权限。 - 知道服务器公网 IP,例如
203.0.113.10。 - 如果使用云服务器,确认安全组规则,避免把安全组放行误判为系统端口开放。
先在服务器上查看监听端口,作为对照:
ss -tulnp
输出里 LISTEN 表示正在监听,0.0.0.0 或 :: 通常代表对所有地址开放,127.0.0.1 则一般只允许本机访问。
安装 nmap 并执行第一次扫描
不同系统安装命令不同,选一条执行即可。
Debian/Ubuntu:
sudo apt update
sudo apt install -y nmap
CentOS/Rocky Linux:
sudo yum install -y nmap
安装完成后查看版本,确认命令可用:
nmap --version
最常用的快速扫描命令如下,把 203.0.113.10 换成你的服务器 IP:
nmap -sT -p- 203.0.113.10
参数说明:
-sT:使用 TCP 连接扫描,不需要 root 也能运行,适合新手。-p-:扫描 1 到 65535 全部端口,耗时较长。- 如果只想快速看常见端口,可以用
nmap -sT --top-ports 100 203.0.113.10。
扫描结果中 open 表示端口开放,closed 表示关闭,filtered 表示被防火墙或安全组拦截。只有 open 的端口才需要重点确认用途。
读懂扫描结果并判断风险
拿到结果后,不要急着关端口,先对照业务判断。
常见需要关注的开放端口包括:
22:SSH 远程登录,建议限制来源 IP,不要对全网开放。80、443:Web 服务,通常需要开放。3306:MySQL,默认不应暴露公网。6379:Redis,未授权访问风险高,应只监听内网或加密码。9200:Elasticsearch,暴露公网容易被读取数据。
如果扫描结果显示某个端口开放,但你不认识它,可以结合本机监听进程排查:
sudo ss -tulnp | grep :端口号
例如查看 6379:
sudo ss -tulnp | grep :6379
输出会显示对应的进程名和 PID,再决定是停止服务、修改监听地址,还是通过防火墙限制来源。
收敛端口:防火墙与监听地址
确认要关闭的端口后,优先从服务配置和防火墙两层处理。
以 firewalld 为例,移除不需要的放行规则:
sudo firewall-cmd --permanent --remove-port=6379/tcp
sudo firewall-cmd --reload
以 ufw 为例:
sudo ufw deny 6379/tcp
sudo ufw reload
如果服务只需要本机访问,修改监听地址通常比关防火墙更彻底。
例如 Redis 配置文件中:
bind 127.0.0.1
MySQL 可检查 bind-address,不要写成 0.0.0.0 除非确实需要远程连接。
云服务器还要检查安全组,入方向规则只放行必要端口。系统防火墙和安全组是两层,任何一层放行都可能导致端口实际可达。
复查扫描结果与常见疑问
处理完成后,重新扫描一次验证:
nmap -sT -p 22,80,443,3306,6379 203.0.113.10
预期结果是只保留业务需要的端口为 open,其余显示 closed 或 filtered。
建议从外部网络再扫一次,避免只在本机验证。
几个常见问题:
扫描会不会影响服务器? 常规 TCP 连接扫描对正常业务影响很小,但不要对非自己管理的目标扫描。
为什么本机看到端口开放,外部扫描却是 closed? 说明端口只监听在本机或内网地址,外部不可达,这通常是安全的状态。
filtered 是什么意思? 表示探测包被防火墙、安全组或网络设备拦截,无法判断端口是否开放。
多久自查一次? 建议在每次上线新服务、修改防火墙或安装软件后执行一次,并保留扫描结果作为对照。
端口自查不是一次性的工作。
把 nmap 扫描纳入日常巡检,配合 ss 查看监听进程和云安全组规则,才能持续控制服务器对外开放端口,减少不必要的暴露面。