Docker快速部署可视化防火墙工具:使用go语言开发,底层是iptables,提供API调用

Docker快速部署可视化防火墙工具:使用go语言开发,底层是iptables,提供API调用

一、简介

  • 该工具相关接口使用go语言开发,高性能,资源占用低,前端页面使用Ant Design Pro开发,简洁美观
  • 底层基于iptables,可以针对不同的IP、不同协议进行有效拦截
  • 支持定时封禁控制,到期自动释放
  • 提供相关API接口,方便接入风控检测系统,进行精准攻击拦截与控制
  • 开源地址参考:github.com/luler/hello_firewall
  • 本工具运行原理概览可参考下图:
    Docker快速部署可视化防火墙工具:使用go语言开发,底层是iptables,提供API调用

二、安装

  • 只能在基于iptables防火墙的Linux主机上使用,大多数Linux主机都是自带iptables防火墙工具的,如果没有,可自行安装
    Docker快速部署可视化防火墙工具:使用go语言开发,底层是iptables,提供API调用

  • 准备好Docker、docker-compose软件环境

  • 新建docker-compose.yml配置文件,内容如下:

    version: "3"
    services:
    hello_firewall:
      image: ghcr.io/luler/hello_firewall:latest
      privileged: true
      network_mode: host
      restart: always
      environment:
        - TZ=Asia/Shanghai #时区
        - PORT=3000         #服务端口
        - ADMIN_NAME=admin      #管理员账号
        - ADMIN_PASSWORD=admin  #管理员登录密码
        - JWT_EXPIRE=7200 #访问token过期时间,单位秒
        - JWT_SECRET=Hw_KtnqHJ   #页面访问token加密秘钥,自定义一个复杂的
        - IPTABLES_TARGET_CHAINS=INPUT,DOCKER-USER #iptables目标链,如果不清楚不需要修改
        - DATABASE_DEFAULT_DRIVER=sqlite #数据库驱动
        - DATABASE_DEFAULT_NAME=runtime/hello_firewall.sqlite #数据库文件路径
      volumes:
        - ./runtime:/app/runtime
  • 新建配置文件完毕后,可在配置文件目录直接运行下面命令启动

    docker-compose up -d

    Docker快速部署可视化防火墙工具:使用go语言开发,底层是iptables,提供API调用

三、卸载

  • 第一步:停止并删除容器
    docker-compose down
  • 第二步:清理iptables链
    iptables-save | grep -i "hello-firewall" | grep -v "^:HELLO-FIREWALL" | sed 's/^-A \([^ ]*\) \(.*\)/-D \1 \2/' | \
    (xargs -L1 iptables 2>/dev/null || true) && (iptables -F HELLO-FIREWALL 2>/dev/null || true) \
    && (iptables -X HELLO-FIREWALL 2>/dev/null || true)

四、使用示例

1. 登录可视化界面操作

  • 访问地址:127.0.0.1:3000/ ,登录账号密码就是docker-compose.yml文件配置的ADMIN_NAME、ADMIN_PASSWORD,默认都是:admin

Docker快速部署可视化防火墙工具:使用go语言开发,底层是iptables,提供API调用

  • 可以在线查询、添加、删除、禁用封禁项目

Docker快速部署可视化防火墙工具:使用go语言开发,底层是iptables,提供API调用

2. 使用API接口

2.1 获取授权接口

  • 接口:/api/login
  • 请求方法:POST
  • 请求参数:
    {
      "name": "admin", //账号
      "password": "admin" //密码
    }
  • 返回结果:
    {
      "code": 200,
      "data": {
          "jwtExpire": 7200,  //有效期,单位秒
          "token": "eyJhbGciOiJIUzI1NiXXXXXXX", //授权凭证
          "type": "Bearer"
      },
      "message": "登录成功"
    }

2.2 封禁ip接口

  • 接口:/api/banIp
  • 请求方法:POST
  • 请求头:
    Authorization=token
  • 请求参数:
    {
      "ips": "127.0.0.1", //ip数据,多个用英文逗号隔开,格式:127.0.1,192.168.1.1
      "protocol": "tcp", //封禁协议,不传-全部协议,指定协议:tcp udp icmp
      "port": 8080, //封禁端口号,0-全端口(默认),1-65535(指定端口,传封禁协议时才有效)
      "expiredAt": "2025-06-31 15:04:05", //过期时间,不传则无过期时间,格式:2006-01-02 15:04:05
      "reason": "封禁原因" //封禁原因
    }
  • 返回结果
    {
      "code": 200,
      "data": [],
      "message": "封禁IP成功"
    }

2.3 更多接口使用逻辑与后台页面接口一致,如查询、删除、启用禁用等接口,可自行获取…

五、总结

  • Docker一键部署,并且提供界面和API,使用起来更加灵活与方便
  • 该工具功能仅专注于IP封禁,可以作为组件接入系统风险感知系统,如配合接口日志分析系统挖掘并封禁风险IP、业务代码识别并封禁IP、AI防火墙等等

临时演示使用地址可参考:cas.luler.top/?search=685982c3f0e0...

本作品采用《CC 协议》,转载必须注明作者和本文链接
我只想看看蓝天
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!