当前位置 博文首页 > 想要去旅行:OpenWrt 防火墙概述
OpenWrt 使用 firewall3 ( fw3
) netfilter/iptable 规则构建器应用程序。它在用户空间中运行,将配置文件解析为一组iptables
规则,将每个规则发送到内核 netfilter 模块。
对于典型的路由器,netfilter 规则集可能非常复杂。这是必然的;每个规则都针对路由器提供的离散功能进行定制,以保护其支持的网络,提供 NAT以节省稀缺的IPv4 地址。一个典型的路由器有超过 100 条旨在支持数据包路由的规则。
OpenWRT 使用 fw3 应用程序来“安全地”构建规则集,同时隐藏许多细节。
使用 fw3 print
来显示 netfilter 规则,您将看到许多没在 fw3 配置文件中明确定义的规则,要么更难以理解,netfilter 规则包括:
_rule
) for each special target and zoneoption syn_flood 1
or option mtu_fix 1
each translate to complex iptable rulesoption masq 1
translates to the ‘-j MASQUERADE’ target for NATmangle
rules that match bits in the packets TCP header and then modify the packetfw3 配置相当简单,并自动为路由器提供基本规则集和可理解的附加规则配置文件。
由于 netfilter 的严格性质,netfilter 使用的规则相当难以理解。但是,每条规则都提供所需的功能或阻止恶意功能,因此是必要的。
fw3 是一个用户空间应用程序,本质上类似于 iptables 应用程序。
两者都使用该libiptc
库与 netfilter 内核模块通信,并遵循相同的基本模式:
iptc_init
建立套接字,并使用getsockopt
将 netfilter 表读入应用程序。这是基于每个表(filter
默认情况下)。libiptc
)。iptc_commit
替换内核中的表。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
为默认策略而无法访问,可以通过以下两种方法之一恢复访问:
GitHub 上的源代码:https : //github.com/gigibox/fw3/
cs