OpenWrt 防火墙概述

防火墙概述

OpenWrt 使用 firewall3 ( fw3) netfilter/iptable 规则构建器应用程序。它在用户空间中运行,将配置文件解析为一组iptables规则,将每个规则发送到内核 netfilter 模块。

fw3目的

对于典型的路由器,netfilter 规则集可能非常复杂。这是必然的;每个规则都针对路由器提供的离散功能进行定制,以保护其支持的网络,提供 NAT以节省稀缺的IPv4 地址。一个典型的路由器有超过 100 条旨在支持数据包路由的规则。

OpenWRT 使用 fw3 应用程序来“安全地”构建规则集,同时隐藏许多细节。

使用 fw3 print 来显示 netfilter 规则,您将看到许多没在 fw3 配置文件中明确定义的规则,要么更难以理解,netfilter 规则包括:

  • A number of chains (mis-termed _rule) for each special target and zone
  • INPUT and OUTPUT for the often forgotten loopback interface
  • The option syn_flood 1 or option mtu_fix 1 each translate to complex iptable rules
  • The option masq 1 translates to the ‘-j MASQUERADE’ target for NAT
  • mangle rules that match bits in the packets TCP header and then modify the packet

fw3 配置相当简单,并自动为路由器提供基本规则集和可理解的附加规则配置文件。

由于 netfilter 的严格性质,netfilter 使用的规则相当难以理解。但是,每条规则都提供所需的功能或阻止恶意功能,因此是必要的。

fw3 描述

fw3 是一个用户空间应用程序,本质上类似于 iptables 应用程序。

两者都使用该libiptc库与 netfilter 内核模块通信,并遵循相同的基本模式:

  • iptc_init建立套接字,并使用getsockopt将 netfilter 表读入应用程序。这是基于每个表(filter默认情况下)。
  • 修改表中的chains, rules等。所有的解析和错误检查都是在用户空间中完成的(基于libiptc)。
  • iptc_commit 替换内核中的表。

fw3过程控制

fw3通常通过调用 shell 脚本来管理/etc/init.d/firewall。shell 脚本接受以下参数集:

  • boot:这是在系统初始化(启动)期间调用的
  • start: 解析配置文件并写入 netfilter 内核模块
  • stop:从内核模块刷新配置规则(它们不会被卸载)
  • restart, reload: 从内核读取 netfilter 规则,使用配置文件替换,并写回 netfilter 内核模块。
  • flush:(危险)删除所有规则,删除非默认链,并将默认策略重置为ACCEPT

在幕后,/etc/init.d/firewall调用 fw3,将参数传递给二进制文件(fw3)。在某些情况下,该参数将伴随附加标志以抑制日志消息,或调用上述内部函数以验证配置文件。

:!:调用stop时,只会删除配置文件中的规则。那些由fw3 自动生成的规则将被保留。

:!:如果通过调用flush 刷新所有规则,则默认策略设置为ACCEPT并且路由器会将所有数据包传递到或转发到目标网络,不提供任何安全性

如果路由器由于设置DROP为默认策略而无法访问,可以通过以下两种方法之一恢复访问:

fw3 参考

GitHub 上的源代码:https : //github.com/gigibox/fw3/

猜你喜欢

转载自blog.csdn.net/agave7/article/details/119927161