0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用nmap工具的服务器端口安全自检流程

马哥Linux运维 来源:马哥Linux运维 2026-05-18 16:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

引言:端口不是打开越多越好

服务器上的每个开放端口,都是潜在的攻击面。运维工程师接手一台新服务器、变更防火墙规则后、上线新服务后,都应该做一次端口安全检查,确认只有必要的端口在监听。

端口扫描是安全自查的第一步,但很多运维工程师对端口安全有以下误区:

认为"防火墙后面"的服务器不需要检查端口

只检查业务端口(80/443),忽视了运维端口(SSH、数据库、Redis)

以为云服务商的安全组能完全替代服务器层面的防火墙

不清楚端口扫描对业务的影响,不敢在生产机执行

本文用nmap工具,从安装、基础扫描、进阶扫描、脚本扫描、结果分析到修复方案,提供一套完整的服务器端口安全自检流程。

第一章:nmap基础与安装

1.1 nmap 是什么

nmap(Network Mapper)是最流行的端口扫描和网络发现工具之一。它可以探测目标主机的端口开放状态、服务版本、操作系统类型等信息,是运维工程师和安全工程师的必备工具。

# 确认是否安装
whichnmap

# 如果没有安装
# CentOS / RHEL
sudo yum install nmap -y

# Ubuntu / Debian
sudo apt install nmap -y

# macOS
brew install nmap

# Windows:从 https://nmap.org/download.html 下载安装

1.2 nmap 的扫描原理

nmap 支持多种扫描技术,默认使用 TCP SYN 扫描(也叫半开放扫描):

TCP SYN 扫描(-sS):发送 SYN 包,收到 SYN-ACK 说明端口开放,收到 RST 说明端口关闭。不完成三次握手,对目标影响小,需要 root 权限。

TCP connect 扫描(-sT):完成完整的三次握手。不需要 root,但更容易被检测。

UDP 扫描(-sU):发送 UDP 包,无响应可能端口开放或被防火墙过滤,ICMP Port Unreachable 说明端口关闭。慢但必要。

FIN 扫描(-sF):发送 FIN 包,绕过某些防火墙。

Ping 扫描(-sn):只探测主机是否存活,不扫描端口。

# 查看 nmap 版本和功能
nmap --version
# Nmap version 7.94

# 查看 nmap 支持的脚本
ls /usr/share/nmap/scripts/ | wc -l
# 数百个 NSE 脚本(nmap scripting engine)

第二章:基础端口扫描

2.1 单端口扫描

# 扫描单个端口是否开放
nmap -p 22 192.168.1.100

# 输出示例:
# Starting Nmap 7.94 ( https://nmap.org )
# PORT  STATE SERVICE
# 22/tcp open ssh

# -p 可以指定端口号、端口范围、端口列表
nmap -p 22,80,443 192.168.1.100  # 指定端口列表
nmap -p 22-100 192.168.1.100    # 端口范围
nmap -p -1000 192.168.1.100    # 扫描前 1000 个端口
nmap -p 1-65535 192.168.1.100   # 全端口扫描(1-65535)

2.2 常用端口快速扫描

# 扫描常用端口(nmap 内置端口列表)
nmap --top-ports 20 192.168.1.100
# 扫描最常见的 20 个端口

# 常用端口对应服务:
# 21  FTP
# 22  SSH
# 23  Telnet(明文传输,极不安全)
# 25  SMTP
# 53  DNS
# 80  HTTP
# 110  POP3
# 143  IMAP
# 443  HTTPS
# 3306 MySQL
# 3389 RDP(Windows 远程桌面)
# 5432 PostgreSQL
# 6379 Redis
# 8080 HTTP 代理(常见于 Java 应用)
# 9200 Elasticsearch
# 27017 MongoDB

2.3 全端口扫描

# 扫描所有 65535 个端口(需要较长时间)
nmap -p 1-65535 -T4 192.168.1.100
# -T4:paranoid(0) sneakey(1) polite(2) normal(3) aggressive(4) insane(5)
# 生产环境建议用 -T3 或 -T4,避免对业务网络造成影响

# 更快的扫描:只扫描已知的常用端口子集
nmap -p- -T4 192.168.1.100
# -p- 等价于 -p 1-65535

# 扫描后记录结果供以后对比
nmap -p 1-65535 -oA /tmp/portscan-$(date +%Y%m%d) 192.168.1.100
# -oA 输出三种格式:nmap、XML、grepable

2.4 主机发现与批量扫描

# Ping 扫描:快速确认哪些主机存活
nmap -sn 192.168.1.0/24
# 输出:哪些 IP 在线,响应时间

# 排除特定 IP(不扫描)
nmap -sn 192.168.1.0/24 --exclude 192.168.1.1,192.168.1.2

# 批量扫描多个 IP 或 IP 段
nmap -p 22,80,443 192.168.1.100,192.168.1.101,192.168.1.200

# 读取 IP 列表文件扫描
nmap -p 22,80,443 -iL /tmp/servers.txt

第三章:服务版本探测

3.1 识别端口上运行的服务版本

知道端口开放还不够,还要知道运行的是什么版本的服务、是否有已知漏洞。

# -sV 参数:探测服务版本
nmap -sV -p 22,80,443,3306,6379 192.168.1.100

# 输出示例:
# PORT   STATE SERVICE VERSION
# 22/tcp  open  ssh   OpenSSH 8.4 (protocol 2.0)
# 80/tcp  open  http   Apache httpd 2.4.51
# 443/tcp open  ssl   nginx 1.21.4
# 3306/tcp open  mysql  MySQL 8.0.32
# 6379/tcp open  redis  Redis 6.0.16

# 为什么要关注版本?
# 如果 OpenSSH 8.4 存在已知漏洞(CV-2022-1234),需要立即升级
# 如果 Redis 6.0.16 没有设置密码(permit-empty-passwords),立即修复

3.2 操作系统指纹识别

# -O 参数:识别操作系统类型(需要 root 权限)
nmap -O 192.168.1.100

# 输出示例:
# OS details: Linux 5.4 (Ubuntu 20.04)
#       Linux 3.2 - 5.4
# OS CPE: cpe:/olinux_kernel:5.4

3.3 综合扫描(侦察模式)

# -A 参数:综合扫描(OS 检测 + 版本检测 + 路由追踪 + 脚本扫描)
nmap -A -T4 192.168.1.100

# 适合对新接手的服务器做一次全面侦察

第四章:nmap脚本扫描(NSE)

4.1 NSE 脚本简介

nmap 脚本引擎(NSE)内置数百个脚本,可以做漏洞检测、弱口令检测、暴力破解检测等。

# 查看所有脚本分类
ls /usr/share/nmap/scripts/

# 脚本分类包括:
# auth     认证相关(匿名登录检测)
# broadcast   广播发现
# brute    暴力破解
# default   默认脚本集(-sC 时使用)
# discovery  服务发现
# dos     拒绝服务检测
# exploit   漏洞利用检测
# external   外部脚本(查询数据库等)
# fuzzer   模糊测试
# intrusive  侵入性脚本(可能触发 IDS)
# malware   恶意软件检测
# safe     安全脚本
# version   版本识别
# vuln    漏洞检测

4.2 常用脚本扫描

# 使用默认脚本集(最常用)
nmap -sC -p 22,80,443,3306,6379 192.168.1.100
# -sC 等价于 --script=default

# SSH 安全检测(检查是否存在允许密码登录、允许空密码等安全问题)
nmap -p 22 --script ssh-auth-methods 192.168.1.100
# 输出:Supported authentication methods: publickey,password
# 如果支持 password 说明可以用密码登录(需要结合其他信息判断是否安全)

# MySQL 安全检测
nmap -p 3306 --script mysql-info,mysql-empty-password,mysql-users 192.168.1.100

# Redis 安全检测
nmap -p 6379 --script redis-info,redis-brute 192.168.1.100
# 如果 redis 没有设置密码,redis-info 脚本会直接读取 Redis 信息(严重安全问题)

# HTTP 安全检测
nmap -p 80,443 --script http-enum,http-robots.txt,http-title 192.168.1.100
# http-enum:枚举网站目录(可能发现备份文件、管理后台等)
# http-title:获取网页标题
# http-robots.txt:查看 robots.txt(可能暴露隐藏目录)

# SSL/TLS 安全检测
nmap -p 443 --script ssl-enum-ciphers,ssl-cert,ssl-known-key 192.168.1.100
# ssl-enum-ciphers:枚举支持的加密套件,发现弱加密
# ssl-cert:检查证书信息(过期时间、颁发者、CN 匹配)

4.3 漏洞检测脚本

# 通用漏洞检测
nmap -p 80,443 --script vuln 192.168.1.100
# 使用所有 vuln 分类的脚本(CVEs、RCE 等)

# 针对特定漏洞的脚本
nmap -p 22 --script ssh-vuln-*) 192.168.1.100
# 检测 SSH 相关的已知漏洞(如 CVE-2021-41617)

nmap -p 443 --script ssl-vuln-*) 192.168.1.100
# 检测 SSL/TLS 相关的已知漏洞(如 Heartbleed、POODLE)

# 检测心脏出血漏洞(Heartbleed)
nmap -p 443 --script ssl-heartbleed 192.168.1.100

# 检测 Apache Struts RCE(CVE-2017-5638)
nmap -p 8080 --script http-vuln-cve2017-5638 192.168.1.100

4.4 暴力破解检测

# 检测 FTP 是否允许匿名登录
nmap -p 21 --script ftp-anon 192.168.1.100
# 如果输出 "Anonymous FTP login allowed" 说明 FTP 允许匿名登录(可能不安全)

# 检测 MySQL 是否允许空密码 root 登录
nmap -p 3306 --script mysql-empty-password 192.168.1.100

# Redis 弱密码检测
nmap -p 6379 --script redis-brute 192.168.1.100
# 需要指定用户名/密码字典:--script-args userdb=users.txt,passdb=pass.txt

第五章:生产环境扫描注意事项

5.1 扫描对业务的影响

# nmap 扫描会向目标发送大量数据包,在生产环境可能造成:
# 1. 网络带宽占用(大量端口扫描)
# 2. IDS/IPS 触发告警(被安全设备拦截)
# 3. 服务器负载短暂升高

# 生产环境扫描建议:
# 1. 避开业务高峰期
# 2. 使用 -T1 或 -T2(慢速扫描)
# 3. 先在测试环境验证扫描命令
# 4. 提前通知安全团队,避免触发 WAF/IDS 告警

# 低速扫描(建议生产环境使用)
nmap -T2 -p 1-1000 192.168.1.100

# 使用 -Pn 参数(跳过主机发现,直接扫描)
# 如果已知主机在线,使用 -Pn 可以加快扫描
nmap -Pn -T2 -p 1-1000 192.168.1.100

5.2 扫描自己服务器 vs 扫描他人服务器

扫描自己的服务器:完全合法,是常规安全运维操作。

扫描他人服务器

必须获得书面授权(渗透测试授权书)

未经授权扫描他人服务器是违法行为(计算机犯罪相关法律)

在 CTF 比赛和授权渗透测试场景下是合法的

# 自己服务器:直接扫描
nmap -sT -p 1-1000 localhost

# 如果担心扫描影响自己服务器性能,可以在本地使用 SYN 扫描
# SYN 扫描需要 root 权限
sudo nmap -sS -p 1-1000 localhost

5.3 定期扫描计划

# 建立定期扫描机制(建议每月一次)
# crontab -e
# 0 3 1 * * /usr/local/bin/portscan-check.sh
# 每月1日凌晨3点执行端口扫描

#!/bin/bash
# /usr/local/bin/portscan-check.sh
DATE=$(date +%Y%m%d)
LOG_DIR="/var/log/security"
SERVERS_FILE="/etc/security/scan-hosts.txt"
REPORT="$LOG_DIR/portscan-$DATE.html"

mkdir -p$LOG_DIR

# 扫描并生成 HTML 报告
nmap -sV -sC -p- -oA"$LOG_DIR/portscan-$DATE"-iL"$SERVERS_FILE"

# 检查新增开放端口(和上次扫描对比)
if[ -f"$LOG_DIR/portscan-$(date -d '1 month ago' +%Y%m%d).gnmap"];then
  diff <(grep "Ports:" "$LOG_DIR/portscan-$(date -d '1 month ago' +%Y%m%d).gnmap" | cut -d: -f2) 
         <(grep "Ports:" "$LOG_DIR/portscan-$DATE.gnmap" | cut -d: -f2) || true
fi

# 发送邮件通知(如果发现新增开放端口)
# mail -s "Port Scan Report $DATE" ops@example.com < "$REPORT"

第六章:扫描结果分析与修复

6.1 常见危险端口及风险等级

端口 服务 风险等级 风险描述
22 SSH 如果允许密码登录且密码弱,容易被暴力破解
23 Telnet 明文传输,账号密码可被嗅探,极度危险
445 SMB 永恒之蓝漏洞(CVE-2017-0144),445端口不应暴露
3306 MySQL 如果对公网开放且无密码或弱密码,数据可被窃取
6379 Redis 默认无密码,如果对公网开放,可直接读写数据
27017 MongoDB 默认无认证,如果对公网开放,可直接读写数据
9200 Elasticsearch 默认无认证,可读写数据甚至执行脚本
11211 Memcached 无认证,可被用于放大 DDoS 攻击
8080 HTTP Alt 可能是管理后台或测试接口,可能存在未修复漏洞
3389 RDP Windows 远程桌面,暴力破解是常见攻击手段

6.2 危险端口开放的自查清单

# SSH(22端口)安全检查
nmap -p 22 --script ssh-auth-methods 192.168.1.100

# 如果显示支持 password 登录,建议改为只允许密钥登录
# /etc/ssh/sshd_config
# PasswordAuthentication no
# PubkeyAuthentication yes
sudo systemctl restart sshd

# 数据库端口(3306/5432/6379/27017)检查
# 确认只允许内网 IP 访问,不对公网开放
nmap -p 3306,6379 --script redis-info,mysql-info 192.168.1.100

# Memcached(11211)检查
nmap -p 11211 --script memcached-info 192.168.1.100
# 如果对外开放且无认证,不仅数据泄露风险,还有被用于反射 DDoS 的风险

# RDP(3389)检查(Windows 服务器)
nmap -p 3389 192.168.1.100
# 建议:用 VPN + 网络策略限制 RDP 只允许 VPN IP 连接

6.3 防火墙配置示例

# iptables 基础防火墙规则(限制 SSH 和业务端口)
# /etc/sysconfig/iptables(CentOS/RHEL)
# 或 /etc/iptables/rules.v4(Ubuntu/Debian)

*filter
:INPUT DROP  [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# 允许已建立的连接
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许本地回环
-A INPUT -i lo -j ACCEPT

# 允许 SSH(限制来源 IP)
-A INPUT -p tcp -s 1.2.3.4/32 --dport 22 -j ACCEPT

# 允许 HTTP/HTTPS
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

# 拒绝数据库端口(只允许内网访问)
-A INPUT -p tcp -s 10.0.0.0/8 --dport 3306 -j ACCEPT
-A INPUT -p tcp -s 10.0.0.0/8 --dport 6379 -j ACCEPT

# 拒绝其他一切入站
-A INPUT -j DROP

COMMIT

6.4 云安全组检查

# 云服务器一定要检查安全组配置
# 以阿里云为例,通过 API 检查安全组规则

# 列出所有安全组
aliyun ecs DescribeSecurityGroups

# 列出某个安全组的入方向规则
aliyun ecs DescribeSecurityGroupPolicy --SecurityGroupId sg-xxxxxx --Direction ingress

# 常见错误:安全组规则允许 0.0.0.0/0 访问数据库端口
# 正确做法:只允许内网 IP 段或特定 IP 访问

第七章:扫描报告解读与后续行动

7.1 解读 nmap 扫描结果

# 查看上一次扫描的 XML 报告
nmap -oX /tmp/scan.xml 192.168.1.100
# 用 xsltproc 转换成 HTML
xsltproc /tmp/scan.xml -o /tmp/scan.html

# 或者查看 grepable 格式
nmap -oG /tmp/scan.gnmap 192.168.1.100
grep"Ports:"/tmp/scan.gnmap

7.2 发现高危端口后的处理流程

第一步:确认端口是否必要

# 是业务必需的端口吗?
# 这个服务还能不能停掉?
# 这个服务是否已经被其他机制保护(如内网隔离)?

第二步:如果是必要的端口,验证访问控制

# 确认防火墙是否生效
# 在外部机器上尝试连接该端口,确认是否真的不通
nmap -p 3306 --script http-robots.txt 1.2.3.4 # 模拟外部访问

# 如果需要从外部访问,确认是否通过跳板机/VPN

第三步:修复方案

情况 修复方案
端口非必要且对外开放 关闭服务,或用防火墙规则屏蔽
SSH 允许密码登录 改为只允许密钥登录,禁用密码认证
Redis 无密码 设置强密码,或绑定到内网 IP
管理后台暴露 通过 VPN 或 IP 白名单访问
服务版本有已知漏洞 升级到最新稳定版本

第四步:记录和复盘

# 记录发现和处理过程
# 记录到安全运维日志或 CMDB
# 记录:发现时间、发现方式、处理人、处理时间、处理措施

总结:端口是攻防的第一道门槛

端口安全自检是运维工程师日常安全工作中最基础也最重要的一环。关键原则:

最小化暴露:只开放业务必需的端口,其余全部关闭或用防火墙屏蔽

分层防御:云安全组 + 服务器防火墙 + 服务自身认证,三层保护缺一不可

定期扫描:服务器变更后、新服务上线后、安全事件后都要扫描

版本管理:知道每个开放端口上运行的是什么版本,是否有已知漏洞

访问控制:SSH 密钥登录、数据库强密码、网络层面 IP 白名单

养成每月一次端口扫描的习惯,建立扫描结果基线,新发现端口立即排查。端口不是越多越好,而是越少、越可控越好。

补充一:nmap 指纹识别与操作系统检测深度用法

操作系统指纹识别原理

nmap 通过分析目标的 TCP/IP 协议实现特征(TTL、窗口大小、TCP 选项等)来推断操作系统类型。

# 操作系统指纹识别(需要 root 权限)
sudo nmap -O 192.168.1.100

# 输出示例:
# OS details: Linux 5.4 (Ubuntu 20.04)
# OS CPE: cpe:/olinux_kernel:5.4
# Aggressive OS guesses: Linux 5.4 (94%), Linux 2.6.32 (88%), ...
# Note: OS detection is not 100% accurate

# 如果 -O 结果不确定,可以用 -A(综合扫描)
sudo nmap -A -T4 192.168.1.100
# -A 包含:OS 检测 (-O)、版本检测 (-sV)、traceroute、脚本扫描 (-sC)

nmap 服务指纹识别

# 特定端口的版本检测
nmap -sV -p 22,80,443 192.168.1.100

# 指定服务指纹数据库路径(如果需要更新指纹)
nmap --script-args='db=/path/to/nmap-service-fingerprints'-sV -p 22 192.168.1.100

# 深入检测(-sV --version-intensity 9)
nmap -sV --version-intensity 9 -p 80 192.168.1.100
# intensity 0-9,越高越详细但越慢

# 轻量检测(快速)
nmap -sV --version-intensity 0 -p 22 192.168.1.100

通过端口指纹识别隐藏服务

有些服务故意隐藏端口,但仍有特征可循:

# 识别隐藏的 Redis 端口(即使端口被改过)
nmap -sV -p 1-65535 192.168.1.100 | grep -i redis
# Redis 会在任何端口返回 +PONG

# 识别隐藏的 SSH(通常在非标准端口)
nmap -sV -p 1-65535 192.168.1.100 | grep -i"ssh.*OpenSSH"

# 识别 HTTP 服务(即使改了端口)
nmap -sV -p 1-65535 192.168.1.100 | grep -E"http|Apache|nginx|IIS"

补充二:常见CVE漏洞的nmap扫描

OpenSSH 漏洞扫描

# 扫描 SSH 已知漏洞
nmap -p 22 --script ssh-vuln-*) 192.168.1.100
# 会自动运行所有 ssh-vuln-* 脚本

# 单独检测特定漏洞
nmap -p 22 --script ssh-vuln-cve-2021-41617 192.168.1.100
# CVE-2021-41617:OpenSSH <= 8.7 存在 pre-auth 远程代码执行漏洞

# 如果检测到漏洞,立即升级 OpenSSH
apt update && apt install openssh-server -y
systemctl restart sshd

OpenSSL 漏洞扫描

# 检测 SSL/TLS 漏洞
nmap -p 443 --script ssl-heartbleed 192.168.1.100
# Heartbleed(CVE-2014-0160):OpenSSL 1.0.1 - 1.0.1f

nmap -p 443 --script ssl-poodle 192.168.1.100
# POODLE(CVE-2014-3566):SSL 3.0 漏洞

nmap -p 443 --script ssl-dh-params 192.168.1.100
# Logjam(CVE-2015-4000):DH 参数过短

nmap -p 443 --script ssl-enum-ciphers 192.168.1.100
# 枚举所有支持的加密套件,检查弱加密

HTTP 服务漏洞扫描

# 检测 Web 服务器版本漏洞
nmap -p 80,443 --script http-vuln-* 192.168.1.100

# 常用 HTTP 漏洞脚本
# http-vuln-cve2017-5638:Apache Struts RCE
# http-vuln-cve2017-12617:Apache Tomcat RCE
# http-vuln-cve2015-1635:IIS RCE
# http-vuln-cve2013-6786:Apache 2.4.6 提权漏洞
# http-vuln-cve2012-1823:PHP CGI RCE

# 检测 Apache Struts
nmap -p 8080 --script http-vuln-cve2017-5638 192.168.1.100

# 检测 Tomcat
nmap -p 8080 --script http-vuln-cve2017-12617 192.168.1.100

数据库漏洞扫描

# MySQL 漏洞
nmap -p 3306 --script mysql-vuln-* 192.168.1.100
# mysql-vuln-cve2012-2122:MySQL 认证绕过漏洞

# Redis 漏洞
nmap -p 6379 --script redis-vuln-* 192.168.1.100
# Redis 未授权访问漏洞(最常见)

# PostgreSQL 漏洞
nmap -p 5432 --script pgsql-vuln-* 192.168.1.100

# MongoDB 漏洞
nmap -p 27017 --script mongodb-vuln-* 192.168.1.100

补充三:内网渗透测试场景(授权范围内)

内网横向移动识别

# 在授权的渗透测试范围内,使用 nmap 做横向移动探测

# 1. 扫描内网存活主机
nmap -sn 10.0.0.0/24 -oG - | grep"Up$"| cut -d" "-f2

# 2. 快速端口扫描(常见服务端口)
nmap -F -T4 10.0.0.0/24 -oG - | grep"Ports:"| 
 awk -F"Ports: "'{print $2}'| cut -d" "-f1 | 
 tr',''
'| sort -u | head -30

# 3. 全端口扫描内网重点目标
foripin10.0.0.1 10.0.0.10 10.0.0.50;do
 echo"=== Scanning$ip==="
  nmap -sV -sC -p 1-65535 -oA /tmp/scan-$ip$ip
done

网络设备扫描

# 路由器、交换机、防火墙通常开放 Telnet(23)、SSH(22)、SNMP(161)
# 扫描网络设备
nmap -sV -p 22,23,161,162 192.168.1.0/24 -oG - | 
 grep"Host:"| grep -v"22/open|23/open|161/open"

# SNMP 社区名爆破(默认 community string 是 "public")
nmap -sU -p 161 --script snmp-brute 192.168.1.1

# 社区名爆破字典
# /usr/share/nmap/nselib/data/snmpcommunities.txt

补充四:扫描结果自动化报告

#!/bin/bash
# nmap-security-report.sh
# 用途:自动扫描并生成 HTML 报告

TARGET="${1:-localhost}"
OUTPUT_DIR="/var/www/html/nmap-reports"
DATE=$(date +%Y%m%d)

mkdir -p$OUTPUT_DIR

echo"Scanning$TARGET..."

# 1. 快速扫描(常用端口)
nmap -sV -sC -F -T4 -oA"$OUTPUT_DIR/quick-$DATE""$TARGET"

# 2. 全端口扫描
nmap -sV -p- -T2 -oA"$OUTPUT_DIR/full-$DATE""$TARGET"
# -T2 用于全端口扫描,减少对目标的影响

# 3. 漏洞扫描(重点端口)
nmap -sV --script vuln -p 22,80,443,3306,5432,6379,8080 -oA"$OUTPUT_DIR/vuln-$DATE""$TARGET"

# 4. 生成 HTML 报告
xsltproc"$OUTPUT_DIR/quick-$DATE.xml"-o"$OUTPUT_DIR/quick-$DATE.html"
xsltproc"$OUTPUT_DIR/vuln-$DATE.xml"-o"$OUTPUT_DIR/vuln-$DATE.html"

# 5. 对比上次扫描(检测新增端口)
if[ -f"$OUTPUT_DIR/full-$(date -d '1 month ago' +%Y%m%d).gnmap"];then
 echo"=== 新增端口 ===">"$OUTPUT_DIR/changes-$DATE.txt"
  diff <(grep "Ports:" "$OUTPUT_DIR/full-$(date -d '1 month ago' +%Y%m%d).gnmap" | cut -d: -f2) 
         <(grep "Ports:" "$OUTPUT_DIR/full-$DATE.gnmap" | cut -d: -f2) 
         >>"$OUTPUT_DIR/changes-$DATE.txt"||true
fi

echo"Reports generated:"
ls -la"$OUTPUT_DIR"/*-$DATE.*

补充五:nmap 参数速查表

参数 含义 场景
-sn Ping 扫描(只探测主机存活) 快速发现内网主机
-sS TCP SYN 扫描(半开放) 默认扫描方式,需要 root
-sT TCP connect 扫描(完成三次握手) 无 root 权限时使用
-sU UDP 扫描 扫描 DNS、SNMP 等 UDP 服务
-sV 版本检测 识别服务版本
-O 操作系统检测 需要 root,识别 OS 类型
-A 综合扫描 全面侦察(慢)
-sC 默认脚本扫描 使用默认 NSE 脚本
--script=vuln 漏洞扫描 检测已知 CVE
-p 1-1000 指定端口范围 常用端口扫描
-p- 所有端口(1-65535) 全端口扫描
-p 22,80,443 指定端口列表 重点端口扫描
-T1~5 扫描速度 生产环境建议 T2-T3
-oA 输出所有格式 保存扫描结果
-iL 从文件读取目标 批量扫描
--exclude 排除目标 排除重要主机
-6 IPv6 扫描 IPv6 环境

# 常用命令速查

# 本机安全自检
nmap -sT -sV -sC -F localhost

# 快速扫描(1-1000 端口)
nmap -sV -sC -F 192.168.1.100

# 全端口扫描(慢速,适合夜间)
nmap -sV -p- -T2 -oA full-scan 192.168.1.100

# 漏洞扫描
nmap -sV --script vuln -p 22,80,443,3306,6379 192.168.1.100

# 内网主机发现
nmap -sn 192.168.1.0/24

# 批量扫描
nmap -sV -sC -F -iL servers.txt

补充六:端口与服务对应关系速查表

端口 服务 风险说明 建议处理
21 FTP 明文传输,匿名登录风险 禁用或使用 SFTP
22 SSH 暴力破解风险 密钥登录,禁用密码,限制来源 IP
23 Telnet 明文传输,危险 立即禁用
25 SMTP 开放中继风险 限制为指定邮件服务器
53 DNS DNS 毒化风险 只允许递归查询来自内网
80 HTTP Web 服务 配置 HTTPS,关闭不必要路径
110 POP3 明文邮件接收 禁用或使用 POP3S
135-139,445 SMB/NetBIOS 永恒之蓝漏洞 防火墙屏蔽或升级
143 IMAP 明文邮件协议 禁用或使用 IMAPS
389 LDAP 明文目录查询 禁用或使用 LDAPS
443 HTTPS Web 服务(加密) 正确配置证书
465 SMTPS 加密 SMTP 使用
587 SMTP Submission 邮件提交端口 使用
636 LDAPS 加密 LDAP 使用
1433 MS SQL 数据库端口 只允许内网访问
1521 Oracle DB 数据库端口 只允许内网访问
3306 MySQL 数据库端口 只允许内网访问,禁用远程 root
3389 RDP Windows 远程桌面 限制来源 IP,启用 NLA
5432 PostgreSQL 数据库端口 只允许内网访问
5900 VNC 远程桌面 禁用或使用 SSH 隧道
5985 WinRM HTTP Windows 远程管理 限制来源 IP
5986 WinRM HTTPS Windows 远程管理 使用
6379 Redis 缓存/存储端口 只允许内网访问,设置密码
8080 HTTP Alt 常见 Java 应用 确认是否为管理后台
8443 HTTPS Alt 常见管理后台 确认访问控制
9200 Elasticsearch 索引擎端口 禁用或绑定内网
27017 MongoDB NoSQL 数据库 禁用或绑定内网
27018 MongoDB MongoDB shard 禁用或绑定内网

补充七:扫描前的准备与扫描后的验证

扫描前的准备

# 1. 确认扫描授权(必须获得书面授权)
# 2. 通知安全团队(避免触发 IDS/IPS 告警)
# 3. 选择合适的时间(避开业务高峰期)
# 4. 准备目标清单
cat > /tmp/scan-hosts.txt <<'EOF'
192.168.1.100
192.168.1.101
10.0.0.50
EOF

# 5. 在测试环境验证扫描命令
# 先在测试服务器执行,确认无误后再扫描生产环境
nmap -sV -sC -F test-server.internal

扫描后的验证

# 1. 验证所有发现都对应已知的业务需求
# 对每个开放的端口,问自己:这个端口必须对网络可达吗?

# 2. 对比历史扫描基线
# 发现新端口?立即排查:是正常变更还是异常开放?

# 3. 检查开放端口的服务版本
# 版本是否有已知漏洞?
# nmap -sV -p 端口 目标IP

# 4. 生成修复计划
# 根据风险等级排序:
# 高危(立即修复):RDP/SSH 开放公网、数据库开放公网、存在已知 CVE 漏洞
# 中危(本周修复):非必要端口开放、弱加密协议
# 低危(下月修复):可以优化但不紧急的配置
4ca382de-5039-11f1-90a1-92fbcf53809c.png  4cfa3732-5039-11f1-90a1-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    14

    文章

    10426

    浏览量

    91835
  • 防火墙
    +关注

    关注

    0

    文章

    450

    浏览量

    36775
  • 端口
    +关注

    关注

    4

    文章

    1115

    浏览量

    34070

原文标题:小心你的开放端口!用nmap给服务器做一次全面安全自检

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    服务器端模式下的TCP通信

    我是谁——ESP8266,连接家里路由成功之后,会自动获得一个IP,这是服务器端IP 谁要和我连接——因为是在我电脑上使用网络调试助手模拟TCP客户端端,所以客户端端的IP是我电脑的IP:192.168.1.103 连接的端口——这里选1025.
    的头像 发表于 12-30 09:15 5569次阅读
    <b class='flag-5'>服务器端</b>模式下的TCP通信

    PC端访问服务器 并读取服务器端的数据 怎么写啊?

    PC端访问服务器并读取服务器端的数据 怎么写啊? 需要访问数据库吗?听说还要服务器那边的用户名和密码才能访问数据库不需要两台pc机的通信的程序 求大神。。。。。
    发表于 07-27 09:00

    请问gprs与服务器通信,服务器端的程序怎么写?

    大家好,最近在做sim808芯片的gprs与服务器通信,用的是阿里云的服务器,请问一下服务器端的程序改怎么写?用VB吗?有没有相关的教程可以推荐一下,谢谢。
    发表于 04-17 23:22

    Nmap是什么?有何主要作用

    什么是服务器端Nmap是什么?有何主要作用?DES是什么?
    发表于 10-19 07:07

    应用程序服务器端口已被使用要怎么处理?

    启动 STM32CubeMonitor 时,它会显示一个对话框,报告“应用程序服务器端口已在使用中”;当对话框关闭时应用程序然后退出。在详细信息中,它表示端口 1880 已被使用;但是 netstat 并未显示此端口已被使用。(
    发表于 01-10 08:59

    服务器端脚本与动态网页设计,下载

    服务器端脚本与动态网页设计 1. 了解服务器端脚本和动态网页的有关概念 ; 2. 了解ASP、PHP的基本语法和基本功能 ; 3. 熟练掌握JSP的基本语法和基本
    发表于 04-28 16:44 0次下载

    服务器端口过滤防黑法大全

    服务器端口过滤防黑法大全  服务器端口过滤防黑法2007年04月26日 星期四 12:10随着网络技术的发展,网络服务的逐渐增加,网络安全的问题也越来
    发表于 02-25 10:30 1899次阅读

    淘宝商品推广系统服务器端软件的设计与实现

    本文基于淘宝商品推广系统服务器端软件的设计与实现的目的,通过对淘宝商品推广系统服务器端软件中的各个模块进行分析的方法,结合实际工作需求,从基础理论出发,得出淘宝商品推广系统服务器端软件功能和性能实现的方法和途径。
    发表于 12-24 15:43 12次下载

    JAVA教程之TCP服务器端

    JAVA教程之TCP服务器端,很好的JAVA的资料,快来学习吧
    发表于 04-11 17:28 10次下载

    服务器端发票识别api接口

    服务器端发票识别api接口可实现发票OCR识别本地化部署:基于企业集团内网构建的本地化发票识别服务,网络更稳定、响应更快速、数据更安全
    发表于 06-01 10:53 3192次阅读

    服务器端口的分类

    服务器端口可以说是服务器与外界进行通信交流的出口。服务器端口是传输层的內容,是面向连接的,它们对应着网络上常见的一些服务。 这些常见的
    的头像 发表于 08-04 17:34 4415次阅读

    恒讯科技解读:怎么打开或关闭服务器端口

    本文中,小编将给大家解读怎么打开或关闭服务器端口?下面是主要测操作步骤,希望能帮助到大家。 一、打开服务器端口以进行远程访问的步骤: 默认情况下,恒讯科技虚拟主机的防火墙配置为允许访问应用程序所需
    的头像 发表于 10-12 16:37 2703次阅读

    如何在Windows使用Nmap

    Nmap是用于安全审核和渗透测试的强大网络扫描工具。它是网络管理员用于解决网络连接问题和端口扫描的基本工具之一。
    的头像 发表于 12-12 17:37 1.4w次阅读

    linux服务器端口怎么开放?

    在Linux系统上,开放端口通常是通过配置防火墙(firewall)来完成的。不同的Linux发行版可能使用不同的防火墙工具,以下是几个常见的Linux防火墙工具: 一、iptables
    的头像 发表于 12-19 17:21 3793次阅读

    服务器端口怎么开放?

    刚搭建好云服务器,想部署网站、运行应用或开启远程连接,却发现外网始终无法访问?大概率是端口没开放。端口就像服务器的门窗,默认状态下,云服务器
    的头像 发表于 11-11 15:43 1219次阅读