1 前言
在当今的网络安全和系统运维领域,端口扫描与网络发现是至关重要的基础工作,而Nmap(Network Mapper)无疑是执行这些任务最强大、最知名的工具之一。它能够探测网络上的主机、发现开放的端口、识别运行的服务乃至推测操作系统版本,是管理员和安全专家手中不可或缺的利器。
然而,直接在本机操作系统上安装和配置Nmap有时会面临环境依赖复杂、版本冲突或与系统其他组件相互影响的问题。本文所介绍的技术,正是为了解决这一痛点:通过Docker容器化技术,将Nmap及其所需的运行环境封装在一个轻量级、可移植的容器中。这项技术能做什么?它能为您提供一个开箱即用、高度一致且与宿主机环境隔离的Nmap扫描环境。它不能做的是,直接扫描宿主机本身的网络命名空间(需特殊参数),或在所有场景下替代高度定制化的专业安全平台。
其核心优势在于环境隔离、快速部署和可复现性,特别适合需要频繁使用Nmap但又希望保持本机系统纯净的开发、测试和临时性安全评估场景。相比直接在物理机或虚拟机上安装,容器化的Nmap牺牲了极少量性能(几乎可忽略不计),却换来了无与伦比的便捷性和安全性。接下来,我们将从基本原理出发,一步步指导您如何构建一个基于CentOS 7的Nmap Docker镜像,并验证其功能。
2 环境要求
- centos 7
- docker 24
3 实现步骤
选择centos7版本
目前docker hub上CentOS7的最新版本为:7.9.2009。CentOS 7.9.2009 是 CentOS 7 系列的一个重要版本,发布于 2020 年 11 月。该版本基于 Red Hat Enterprise Linux 7.9,提供了许多稳定性和安全性更新,适用于企业级应用和服务器环境。
参见:https://hub.docker.com/_/centos
编写 Dockerfile
新建一个Dockerfile,输入以下内容:
FROM centos:centos7.9.2009
# 设置元数据标签(可选但推荐)
LABEL maintainer="your_name <your_name@emal.com"
LABEL description="centos7 nmap"
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum install nmap -y
# 移除yum缓存,大约500M
RUN yum clean all
说明:
- 注意要清理yum缓存,这个大约可以节约500M的空间
制作镜像
在Dockerfile的同目录下执行以下命令:
docker build -t custom-centos7:nmap .
如果构建正常的话,使用 docker images | grep custom-centos7
可以看到一个镜像,如下:
4 测试
新建一个容器实例
使用前面构建的镜像新建一个名为nmap01的实例,如下:
docker run -itd --name nmap-01 custom-centos7:nmap
进入容器
执行以下命令进入容器:
docker exec -it nmap-01 bash
查看nmap版本:
nmap -version
扫描
扫描百度开放的端口:
nmap www.baidu.com
结果如下:
参考资料
https://hub.docker.com/_/centos