Skip to content

[Feature] A proposal for redesigning the firewall module #13294

Description

@HynoR

1Panel Version

2.2.3

Please describe your needs or suggestions for improvements

陆陆续续周末研究研究了一下防火墙代码。发现目前防火墙的问题就是所有软件体系都揉在一块了,包括我去年提的 iptables 其实也是继续揉在里面耦合了。

未来半年可能会抽空提点 pr 试着修这个问题,最近让 fable 搓了几个原型,都是大改动,但是方向基本一致的,结合现有的功能,目前想着就是做这些,一点点把防火墙揉出去

第一个阶段:

  • 拆分防火墙服务和转发服务。
  • 把防火墙分为托管模式(UFW/firewalld)和 1Panel 防火墙(iptables,以及未来的 nftables)。前者完全依赖原软件
    提供的能力,UFW/firewalld 有什么接口和命令就做什么;后者由 1Panel 自己管理规则和数据。
  • 不同防火墙之间切换时重新初始化,不迁移旧规则,原有的 1Panel 防火墙数据会丢弃。
  • 转发功能单独拆出去,不再和防火墙过滤规则混在一起。firewalld 继续使用原生转发,UFW/iptables 暂时保留现实现。
  • 逐步收敛基本没人使用的 iptables 高级控制,避免继续扩大维护范围。
  • 补好防锁死和回退机制,尤其是 SSH、面板端口以及可能导致服务器失联的操作。

第二个阶段开始动底层:

  • 更换防火墙数据模型,参考安全组的方式定义允许和拒绝规则,并明确没有匹配规则时如何处理流量。
  • 由 1Panel 保存期望的规则状态,再统一应用到系统防火墙,不再把当前系统中的全部规则直接当作 1Panel 数据。
  • 1Panel 只维护自己的规则和链,不接管 Docker、Fail2Ban 或其他程序创建的规则。
  • 增加 1Panel 自己的 Docker 防火墙链,让规则能够覆盖 Docker 发布的端口。
  • 等新的规则模型和 iptables 实现稳定后,再尝试接入 nftables。

放出来可以讨论讨论怎么整理和拆出来这一坨了

Please describe the solution you suggest

No response

Additional Information

No response

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions