易雾君
Published on 2024-12-30 / 17 Visits
0
0

安全建设:如何给家庭NAS搭建一套免费社区型蜜罐HFish(二)

本系列蜜罐建设的第一篇讲述了家庭网络的安全需求及展示了成品效果,本篇重点讲述如何落地实现,目标是完成内网失陷检测和外网威胁感知两个场景的版图拼凑。

快速部署

HFish采用B/S架构,系统由管理端和节点端组成,管理端用来生成和管理节点端,并接收、分析和展示节点端回传的数据,节点端接受管理端的控制并负责构建蜜罐服务。

配置要求。由于会涉及到蜜罐部署到外网,会遭受到更多的攻击,因此管理端需要更大的性能需求。

资源配置底层系统
管理端(Server+Mysql)>=2核4G100GDebian12
节点端(Client)>=1核1G50GDebian12

主体网络架构示意图

fcedda6d-ba82-4656-aed1-3f4d7ddd4cbe.png

为了便利,还是采用docker compose编排,快速拉起我们的项目。

老规矩,在DMZ区选取一台机器,我这里有且只有一台可用的,没得选。

ae38ae08-552f-4eb6-90be-af591d81bdc7.png

创建好项目路径,我这里是 /data/tools/hfish-server,在该目录下配置docker-compose.yaml文件内容如下

services:
  app:
    image: threatbook/hfish-server:latest
    restart: always
    environment:
      TZ: 'Asia/Shanghai'
    privileged: true
    network_mode: host
    volumes:
      - /data/storage/hfish/data:/usr/share/hfish

  mysql:
    image: mysql:8.1.0
    restart: always
    command:
      - --default-authentication-plugin=caching_sha2_password #mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
      - --expire_logs_days=7
    volumes:
      - /data/storage/hfish/mysql:/var/lib/mysql
    ports:
      - "127.0.0.1:3306:3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      # 请修改此密码,并对应修改HFish后台的数据库密码
      - MYSQL_ROOT_PASSWORD=your_db_password
      - MYSQL_DATABASE=hfish

采用如下命令快速拉起管理端的这两个容器

docker compose up -d

其实目前为止,已经部署好了DMZ区的一个管理端和节点端,因为管理端默认内置了一个节点端,如上已经配置好了host网络,可直接投入使用。

紧接着就是针对管理端的一系列常规操作,接入WAF,接入网关Traefik,具体过程可参考我之前写过的智能家居相关文章,这里不再赘述。

登录管理端的Web后台 https://hfish.evling.tech/web/ ,使用默认账号密码admin/HFish2021登录

3604ed3f-206b-4350-85cf-f82b93ff18b2.png

完成登录后,在系统配置下完成对数据库的切换配置,改成上边的mysql生产数据库。

fe0e6276-c186-4324-bce1-009de74d92fe.png

紧接着对内置节点配置基础信息,并按需新增一部分蜜罐

566511f4-4b9d-4f16-a7a7-bf7e67f27ec9.png

我这里这里选取了几个Web蜜罐对外网进行了暴露,按照我的业务链路方式接入了Cloudflare、Traefik、WAF,如上示意图所示,为了能够使蜜罐管理端取到真实客户端IP,还需设置XFF取值策略。

541278ce-75eb-4b45-bdb0-665cd4cacba0.png

当然,它这里的取值方式是有瑕疵的,可以轻松伪造客户端IP,不过没关系,只是会影响HFish管理端的呈现,Cloudflare和Traefik已经做了客户端真实IP固定,不影响溯源。

接下来就是布置内网可信区的节点端,按照本系列第一篇的规划设定,这个节点放置在内网的Traefik网关处。

af4405eb-0b79-482e-a4ed-e47d0b804bda.png

创建好项目目录 /data/tools/hfish ,该目录下 docker-compose.yaml文件内容如下

services:
  app:
    command: crond -l 2 -f
    build: ./app
    restart: always
    environment:
      TZ: 'Asia/Shanghai'
    network_mode: host

Dockerfile文件 app/Dockerfile 内容如下

FROM alpine:latest

RUN apk add --update tzdata bash curl && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone && \
    apk del tzdata && \
    rm -rf /tmp/* /var/tmp/* /var/cache/apk/* /var/cache/distfiles/*

RUN sh -c "$(curl -k https://10.8.15.2:4434/tmp/FiZTZtofKYwB.sh)"
CMD ['crond', '-l 2', '-f']

请注意Dockerfile中的接入管理端的链接需要替换掉,在管理端后台的节点管理处获取。

5e02e3fa-5b91-4fe0-aadb-e9dcf0ced062.png

即可生成对应的地址。

b07b4e22-6e44-43ad-8a84-7f2f218973cd.png

替换好后接入链接后,即可开始构建并拉起容器

docker compose build
docker compose up -d

至此已完成对可信区域的节点端接入管理端。同样按照如上内置节点配置蜜罐的方式对该节点配置蜜罐,由于是在内网,路由可达便利,无需在考虑对蜜罐服务接入waf之类的。

总结

本篇完成了蜜罐系统部署,对于后期内容的安排,各位如果有想法的话可以在评论区畅所欲言。


Comment