Linux虚拟机 + Docker 部署本地靶场教程(个人博客原创)
原文链接Linux虚拟机Docker部署本地靶场 - 云泽の小屋本文为作者原创首发于个人博客「云泽の小屋」zeyun.org。欢迎转载但请注明出处。前言在进行安全测试或靶场练习时直接在本地物理机上运行相关服务如 MySQL 等存在一定风险可能影响系统稳定性甚至带来安全隐患。因此更推荐使用“虚拟机 Docker”的方式来搭建实验环境通过这种方式我们可以在隔离的虚拟环境中快速部署和管理多个靶场实例在保证主机安全的同时也便于环境的复用与销毁提高学习与测试效率需要注意的是在部署 Docker 之前请确保当前环境物理机或虚拟机具备良好的网络访问能力否则可能会影响镜像的下载与容器的正常运行本教程的结尾附上了docker常见的命令表可供参考在本文的最后虚拟机桥接设置在部署 Docker 之前需要先配置虚拟机的网络模式。本文采用桥接模式使虚拟机能够直接接入局域网从而保证后续服务部署与访问的正常进行环境说明虚拟化软件VMware Workstation Pro 25H2系统镜像CentOS-7x86_64-Minimal-2009CentOS7镜像点我下载科学网络配置部分*注如果你完全使用国内的网络环境操作开头的windows防火墙配置规则这部分可跳过如果无法访问境外网络也无需担心可以通过配置国内镜像源来完成后续操作后面教程中我有提到请自行解决科学上网的部分这里我直接跳过添加windows防火墙规则步骤一WinR输入control打开控制面板步骤二依次按照下图找到“高级设置”步骤三新建一条windows的防火墙策略步骤四选择端口设置步骤五选择协议*注这里的端口要设置的和科学工具所提供的端口一致不能乱填步骤六选择“允许连接”步骤七把所有的网络环境都勾选上步骤八最终取一个自己记得住的名字即可测试连接打开VMware的设置将网卡模式设置成NAT检查物理机和虚拟机的连通性输入以下命令查看虚拟机的IP地址ip addr | more测试连通性在CentOS7的配置首先确保这个CentOS7能够远程SSH连接后续粘贴命令很方便我使用的是MobaXtream点我下载密码enk9点我跳转软件官网打开CMD输入ipconfig命令来查看自己的Vmware里的ip地址信息执行以下代码使得CentOS7的代理指向宿主机的端口这里我的这个是7897你的需要替换成你自己的端口export http_proxyhttp://192.168.153.1:7897 export https_proxyhttp://192.168.153.1:7897将代理配置永远写入不建议这么做这里下载docker也只是临时的所以临时设置一下即可可跳过步骤一编辑配置文件vi ~/.bashrc步骤二在文件末尾添加上述两行export命令保存退出后执行以下命令source ~/.bashrc即可保存成功验证部分在终端中使用如下命令查看是否成功连接外网curl -I https://www.bing.com能获取到响应头即为成功开始部署docker步骤一安装 Docker 引擎CentOS 7 自带的软件包版本通常较低建议通过 Docker 官方的仓库进行安装以确保版本最新卸载旧版本可选如果系统之前安装过旧版 Docker请先清理sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine步骤二设置存储库执行以下命令安装必要的工具包并添加阿里云仓库源sudo yum install -y yum-utils sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo步骤三生成缓存并安装第一次安装不用清理缓存不过我还是建议清理一下避免出错执行以下命令清理旧缓存sudo yum clean all建立新缓存并安装sudo yum makecache fast sudo yum install -y docker-ce docker-ce-cli containerd.io步骤四启动docker并设置开机自启sudo systemctl start docker sudo systemctl enable docker验证docker是否部署成功输入docker version看到 Client 和 Server 信息即表示安装成功如下图所示虚拟机Docker的代理的设置使用国内镜像站的配置步骤一创建或编辑 Docker 的配置文件sudo mkdir -p /etc/docker sudo vi /etc/docker/daemon.json步骤二在文件中粘贴以下内容推荐几个目前较稳定的加速器{ registry-mirrors: [ https://docker.xuanyuan.me, https://docker.1ms.run, https://docker.m.daocloud.io, https://hub.rat.dev ] }步骤三保存后重启 Docker 服务使配置生效sudo systemctl daemon-reload sudo systemctl restart docker验证国内镜像是否生效docker info | grep -A 10 Registry Mirrors使用科学环境配置本地代理使用国内镜像的可以直接跳过此部分这里需要配置两处第一处解决“Docker 能不能下载镜像”的问题第二处解决“容器里面能不能上网”的问题第一处配置 Docker Daemon让 docker pull、docker run 下载镜像时走科学坏境sudo mkdir -p /etc/systemd/system/docker.service.d sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf在文件中添加以下内容把 http://127.0.0.1:7890 改成你自己的科学坏境地址和端口[Service] EnvironmentHTTP_PROXYhttp://127.0.0.1:7897 EnvironmentHTTPS_PROXYhttp://127.0.0.1:7897 EnvironmentNO_PROXYlocalhost,127.0.0.1,::1这里我的是7897端口所以在后面配置这个7897按下输入wq保存后执行sudo systemctl daemon-reload sudo systemctl restart docker验证代理镜像是否生效sudo systemctl show --propertyEnvironment docker第二处配置 Docker Client让容器内部默认走科学坏境新版 Docker 推荐方式创建或编辑用户配置文件mkdir -p ~/.docker vi ~/.docker/config.json添加以下内容{ proxies: { default: { httpProxy: http://127.0.0.1:7897, httpsProxy: http://127.0.0.1:7897, noProxy: localhost,127.0.0.1 } } }这个配置会让新启动的容器自动继承代理环境变量临时测试科学坏境不想永久配置时直接在命令前加环境变量HTTP_PROXYhttp://127.0.0.1:7890 HTTPS_PROXYhttp://127.0.0.1:7890配置完后试一下拉取镜像docker pull hello-world可以看到我这里可以成功拉取镜像这里仅仅做测试就不运行了Docker镜像部署访问docker hub寻找我们需要的镜像docker hub需科学环境点我前往国内镜像站点我前往这里我会使用这个pikachu网络安全靶场作为从零开始部署整个靶场的全流程包含每一步的详细原理从而带你认识docker的部署于使用具体的流程图如下第一步寻宝Docker Hub 搜索与选择这里我找到了我需要的靶场并且和它对应的部署链接第二步入库拉取镜像到本地输入以下命令拉取area39/pikachu的镜像文件如果下载失败请检查之前的环境配置docker pull area39/pikachu:latest名词解释Pull拉取这就是从云端把“零件包”下载到你服务器的仓库里/var/lib/docker检查动作下载完后输入docker images如果你能看到area39/pikachu出现在列表里说明“零件”已经到货了第三步开工运行容器这是最关键的一步把静态的“零件”变成动态的“程序”docker run -d -p 8765:80 --name my_pikachu area39/pikachu:latest-d后台运行不占用你的终端窗口。-p 8765:80把服务器的8765端口连到容器内部的80端口。--name my_pikachu新知识给你的容器起个名字叫my_pikachu以后管理它停止或重启就不用背那串长长的 ID 了第四步巡查确认容器状态命令运行完会返回一串长字符容器 ID但这不代表程序真的跑稳了输入以下命令查看当前正在运行的容器docker ps名词解释ps (Process Status)查看当前正在运行的容器。看什么看 STATUS 是不是Up ... seconds启动中看 PORTS 是不是0.0.0.0:8765-80/tcp第五步破壁放行系统防火墙即便 Docker 内部映射好了端口CentOS 7 自带的firewalld防火墙默认通常只开启了 22 端口SSH。你需要手动推开8765这扇大门输入以下命令永久放行8765端口sudo firewall-cmd --zonepublic --add-port8765/tcp --permanent使用以下命令重新加载防火墙配置让刚才的修改立即生效sudo firewall-cmd --reload名词解释firewall-cmd这是 CentOS 7 的防火墙管理工具名词解释--permanent意思是“永久生效”如果不加这个你重启服务器后这扇门又会被锁上第六步验收在浏览器中与它见面在你的物理机比如你的 Windows 电脑浏览器地址栏输入http://服务器IP:8765我这里的是192.168.153.128那就直接输入http://192.168.153.128:8765即可访问第七步上锁设置容器“自动复活甲”即使容器现在跑得欢如果虚拟机重启它默认是不会自己活过来的。我们需要给它补上一粒“后悔药”让它学会自救docker update --restartalways my_pikachu名词解释update这是 Docker 的“动态修改器”它允许你在不删除、不停止容器的情况下直接修改它的运行规则名词解释--restartalways这是“自启策略”它的含义只要 Docker 服务在运行无论容器是因为程序崩溃停了还是因为服务器重启关了Docker 都会立刻、无条件把它重新拉起来给容器加了“复活甲”还不够如果你的 CentOS 7 开机时根本没启动 Docker 软件那个总管那容器也无从谈起输入以下命令让docker服务开启自启动sudo systemctl enable docker第八步善后停止与清理如果你练习完了不想让这个容器继续占用资源输入以下命令停止容器docker stop my_pikachu删除容器命令*注意删除后你在容器里做的改动会消失但镜像还在docker rm my_pikachu名词解释stop只是让程序“关机”休息rm则是把这个“组装好的零件”彻底拆散扔掉如果你以后不打算再玩这个镜像了需要把它从磁盘上抹掉docker rmi my_pikachu名词解释rmi就是 remove image。注意如果这个镜像还在被某个容器哪怕是停止的容器使用Docker 会报错不允许你删除。必须先执行上面的docker rm删掉容器才能删镜像Docker 常用命令超实用清单建议收藏动作分类命令部分通俗解释实战案例环境检查systemctl show --propertyEnvironment docker查水表看看 Docker 内部上网有没有挂代理确认是否能顺畅拉取国内外镜像入库/下载docker pull [镜像名]下订单从云端仓库把零件包拉到本地docker pull area39/pikachu给容器取名--name [自定义名称]起绰号给你的容器起个名字方便以后点名在run命令中加上--name my-pikachu开工/运行docker run -d -p [端口映射] --name [名] [镜像]组装并开机后台运行并分配名字和端口docker run -d -p 8080:80 --name pikachu area39/pikachu查看状态docker ps -a点名看看有哪些容器在干活哪些在偷懒检查名为pikachu的容器是否状态为Up停止/拆除docker stop/rm [名字/ID]下班/拆迁让容器停止或直接销毁docker rm -f pikachu清理零件docker rmi [镜像ID]清空仓库删掉本地存着的镜像原始包注意必须先删掉关联容器才能删镜像版权声明本文为作者云泽云泽の小屋原创首发于个人博客zeyun.org。原文链接Linux虚拟机Docker部署本地靶场 - 云泽の小屋欢迎个人学习、交流使用转载请注明原文出处及作者信息。 未经允许不得用于商业用途或其他未经授权的用途