怎么搭建多个靶场
一台服务器上跑三个靶场,搭建多内存直接爆了。靶场我试过在2核4G的搭建多云主机上同时开DVWA、SQLi-Labs和Upload-Labs,靶场结果MySQL自己就吃了1.2G,搭建多nginx响应慢得像拨号上网。靶场后来换成Docker,搭建多每个靶场独立容器,靶场内存占用反而降了——因为不用为每个环境单独跑一套系统服务。搭建多
所以搭建多个靶场,靶场核心思路就一条:容器化隔离,搭建多统一入口管理。靶场别想着装一堆XAMPP或者phpStudy,搭建多那玩意儿装三个就开始互相抢端口。靶场
Docker + Docker Compose 是搭建多最省事的组合
先装Docker,这步跳过。重点说Compose文件。比如我要同时跑DVWA和Pikachu,写一个docker-compose.yml:
version: '3' services: dvwa: image: vulnerables/web-dvwa ports: - "8081:80" environment: - MYSQL_PASS=password pikachu: image: area39/pikachu ports: - "8082:80" docker-compose up -d,两个靶场就起来了。8081访问DVWA,8082访问Pikachu。互不干扰,删掉容器也不留垃圾。
但这里有个坑:很多靶场镜像默认连localhost的数据库。容器里localhost指向容器自身,不是宿主机。解决办法是用Docker网络。比如DVWA镜像可以加links指向一个独立的MySQL容器,或者直接用镜像内置的数据库。
端口规划别偷懒
我见过有人把十几个靶场全映射到80端口,靠不同路径区分。比如/dvwa、/sqli。这要求每个靶场都支持子目录部署,实际上DVWA改起来就麻烦,配置文件里$_DVWA[ 'cookie_path' ]得跟着调。不如老老实实一个靶场一个端口,8080到8090排下去,记不住就写个README.md放桌面。
资源限制要设,不然一个靶场拖垮全部
Compose里加mem_limit和cpus。比如:
dvwa: mem_limit: 512m cpus: 0.5 这样即使某个靶场被打了内存马或者跑了挖矿脚本,也不会把宿主机搞死。我吃过亏——有个老靶场镜像里的Apache有漏洞,被人扫到后直接fork炸弹,整台机器SSH都连不上。
统一入口用Nginx反代
端口多了记不住。在宿主机装个Nginx,配几个server块:
server { listen 80; server_name dvwa.lab.local; location / { proxy_pass http://127.0.0.1:8081; } } server { listen 80; server_name pikachu.lab.local; location / { proxy_pass http://127.0.0.1:8082; } } 本地hosts文件加几行解析,以后直接敲域名访问。比记端口舒服多了。
别忽略数据持久化
靶场里的数据——比如你上传的webshell、注入的测试数据——默认存在容器内。容器一删全没。如果某个靶场要反复用,挂个volume:
volumes: - ./dvwa-data:/var/lib/mysql 这样重建容器后数据还在。但注意,有些靶场镜像的数据库初始化脚本只在首次启动时跑,挂载已有数据目录后可能跳过初始化,导致空密码登不进去。遇到这种情况,删掉volume重新来一遍就行。
最后说个实际场景
我自己的笔记本上跑了7个靶场:DVWA、SQLi-Labs、XSS-Labs、Upload-Labs、Pikachu、WebGoat、Juice Shop。全部Docker化,Compose文件不到60行。开机docker-compose up -d,关机docker-compose down。内存占用稳定在2.3G左右,i5-8250U完全扛得住。
唯一没容器化的是那些需要Windows环境的靶场,比如某些IIS漏洞复现。那种只能开虚拟机,跟Docker方案分开管理。但纯Web靶场,Docker方案足够覆盖九成需求。
(责任编辑:探索)














