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

玩技站长
玩技站长
管理员, Keymaster
7100
文章
1
粉丝
软件头条评论2字数 807阅读2分41秒阅读模式

【开源项目】Docker 快速部署可视化防火墙工具:使用 go 语言开发,底层是 iptables,提供 API 调用-图片1

一、简介

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

二、安装

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

  • 准备好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 调用-图片3

三、卸载

  • 第一步:停止并删除容器
    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. 登录可视化界面操作

  • 访问地址:http://127.0.0.1:3000/,登录账号密码就是docker-compose.yml文件配置的ADMIN_NAME、ADMIN_PASSWORD,默认都是:admin
    【开源项目】Docker 快速部署可视化防火墙工具:使用 go 语言开发,底层是 iptables,提供 API 调用-图片4

  • 可以在线查询、添加、删除、禁用封禁项目
    【开源项目】Docker 快速部署可视化防火墙工具:使用 go 语言开发,底层是 iptables,提供 API 调用-图片5

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防火墙等等

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

 
匿名

发表评论

匿名网友
确定

拖动滑块以完成验证