OpenWrt开发:45---防火墙之UCI工具(/etc/config/firewall)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41453285/article/details/102736680

一、UCI介绍

  • OpenWrt 使用 Netfilter 来实现报文过滤、网络地址转换和报文修改。UCI 防火墙封装 了 Netfilter 的配置接口,抽象了防火墙系统特征来提供简单的配置模型,适合大多数场景。 UCI 配置还提供了扩展接口,用户自己需要特殊 iptables 命令时也可直接配置

二、安全域的概念

  • 防火墙的核心是防火墙规则,所有的规则在一起就是规则集。这些规则允许或拒绝某 些主机去访问另外一个网络的主机。通过组合这些规则,就可以创建非常复杂的强大规则 集。但是手动维护这些规则集将非常困难,因此 OpenWrt 定义了安全域(Zone)的概念, 可以减少管理的负担
  • UCI 防火墙映射一个或多个接口在一起为一个安全域,这样可以简化配置模型。安全 域是一个相同规则的区域,一个安全域根据接口来划分,可以包含一个或多个接口。可以 同时定义多个接口的默认规则,以及接口之间的转发规则,还有前两步未覆盖到的其他规 则。安全域也用于配置网络地址转换、端口转发规则、重定向等
  • 安全域必须映射到一个或多个接口,并最终映射到多个物理接口设备,因此安全域不能用于指定子网和按照 iptables 规则来操作物理设备接口。当接口的子网包含另外一个网 关时,可以用来达到目的地不属于自己的子网网络。通常转发是在局域网和广域网之间的 接口完成,因此使用路由器作为局域网和因特网之间的边缘网关。UCI 的防火墙默认配置 提供了这样的一个共同设置。典型智能路由器设置为两个安全域,wan-连接互联网,lan连接局域网

三、防火墙配置文件(/etc/config/firewall)

  • 报文匹配规则:Netfilter 系统是数据包通过各个规则的链式处理过滤器。第一个规则如果没有匹配, 则继续下一个规则匹配,直到数据报文命中 ACCEPT、DROP 或 REJECT 之一。如果直到 最后一个仍未匹配,默认规则最后生效,具体的规则首先起作用。OpenWrt 的防火墙规则 也是如此,在配置文件中,默认规则在最前面,但最后生效,同级别的规则按照配置文 件顺序先后生效
  • 路由器的最小防火墙配置通常有一个缺省(defaults)部分、至少两个安全域(局域网 和广域网)和一个转发——允许数据从局域网到广域网
  • 配置文件:防火墙配置文件位于 / etc/config/firewall 中。UCI 配置文件没有区分类型,但防火墙模块解析处理过程需要区分 类型,因此配置文件的配置项需要填入指定类型的值,主要有字符串、布尔值、整型值、 MAC 地址和 IP 地址等类型

Defaults配置节

  • Defaults 配置节定义了不属于特定区域的全局防火墙设置。配置类型为“defaults”
  • 下标所示的是这个配置节的主要定义选项

  • 例如

Zones-安全域配置节

  • 一个安全域根据接口来划分,可以包含一个或多个接口,在源和目的地之间进行转发、 生成规则和重定向。输出的流量伪装是每一个安全域的基础控制。注意伪装是对即将报文 离开的接口进行定义,是将报文的源 IP 地址转换为路由器的出口 IP 地址
  • 规则:
    • INPUT 规则用于匹配流量从这个安全域的接口到达路由器本身,即目的地址为路由器 IP 地址的流量
    • OUTPUT 规则用于处理从路由器自己产生的报文并通过安全域的接口, 即作用于源地址为路由器地址的报文
    • FORWARD 规则用于处理从一个安全域到另外一个 安全域的报文,即经过路由器来转发的报文
  • 安全域的配置节类型为“zone”,其主要选项在下标有详细描述

  • 例如

转发配置节(forwarding)

  • 转发部分控制安全域之间的数据流量,可以使 MSS(最大分片大小)为特定的方向
  • 一个转发规则仅代表一个方向。允许两个区域之间的双向流量,这需要两个转发规则,src 和 dest 部分颠倒过来即可,转发配置节的类型为“forwarding”
  • iptables 规则生成该部分依靠需要连接跟踪工作来生成状态匹配。在 src 和 dest 安全域 至少需要有一个连接跟踪通过 MASQ 或连接跟踪选项启用。如果没有启用连接跟踪机制,那 报文只能单向通过,返回的报文将被拒绝
  • 主要选项在下标中描述

  • 例如:下面表示允许局域网到广域网的报文转发

重定向配置节(redirect)

  • 目的地址转换(DNAT)定义在重定向配置节。在指定源安全域的所有进入的报文如 果匹配给定的规则将重定向到指定的内部主机上
  • 重定向也叫“端口转发”或“端口映射”。端口访问可以以“start:stop”来指定,例如 8080:8090,语法和 iptables 类似。技术上来说,端口映射是目的地址转换的另一个术语, 报文发送到防火墙并被转换为一个新的目的地址,这个处理过程完全由防火墙自动完成。 对于设置这个规则,需要新老目的地址,并且可以选择源地址或者其他约束条件进行匹配
  • 配置选项在下表详细描述

  • 下图将转发从 wan 接口的 HTTP 请求报文到 IP 地址为 192.168.1.100、端口为 80 的 Web 服务器上,没有指定转换后端口号,那就是目的端口不变

规则(rule)

  • 规则(rule)用于定义基本的接受或拒绝规则来允许或限制你访问指定主机或端口。 真正的防火墙规则在这里进行设置
  • 端口范围使用 start:stop,例如 8080:8090。这和 iptables 的语法完全一致。规则的配置 类型为“rule”,防火墙规则中如果指定了时间,则需要路由器的时间准确,否则和自己的 期望将完全不同
  • 规则定义如下:
    • 如果 src 和 dest 均指定,规则作用于转发流量
    • 如果仅指定了 src,规则匹配流入本机的流量,即目的地址为防火墙的报文
    • 如果仅指定了 dest,规则匹配本机作为源地址的流量
    • 如果 src 和 dest 均没有给出,则默认作用于本机作为源地址的流量
  • 具体的配置选项在下表中详细描述

  • 默认的防火墙配置是接受所有的局域网流量,但是阻断所有的 WAN 入口主动流量, 除了当前 NAT 或连接的被动流量。如果要打开服务的端口,可以像下图一样增加规 则。下图配置将允许互联网上的主机通过 SSH 协议访问路由器

  • 下图用于阻止局域网主机到广域网主机 121.42.62.172 的全部连接。源主机将 收到目标端口不可达的 ICMP 消息。这就是把这个 IP 地址加入了访问黑名单,不允许 访问

  • 下图用于创建一个输出规则,阻止从路由器ping IP 为 8.8.8.8 的主机。这个规则没有src字段,因此仅匹配从路由器发出的报文

  • 下图用于限制从局域网到广域网的目的端口为 1024~65535 的报文转发

include配置节

  • include 用于包含自定义的防火墙规则。在防火墙配置中可以指定一条或多条 include配置节
  • 类型为“include”,仅有一个必须的参数是包含的文件路径,所有的可选参数如下表所示

  • 包括类型的脚本可以包含任意的命令,例如高级的 iptables 规则或流量整形所需的 tc 命令。由于自定义 iptables 规则要比一般的更具体,所以必须确保使用“-I”来插入而不是 一个“-A”来附加到最后,这样自定义规则将出现在默认规则的前面

四、常见用法

MAC 地址黑白名单

  • MAC 地址过滤是家用路由器的一个常见功能,它可以防止未授权的 MAC 地址访问路 由器和通过路由器访问网络。例如网络上有恶意用户,可以通过 MAC 地址限制指定恶意 用户主机连接到路由器,即使他拥有路由器的密码
  • OpenWrt 没有单独的 MAC 接入控制模块,但可以通过设置防火墙规则来实现。MAC 地址是计算机网卡的物理地址,它就像是网卡的身份证,在网络中进行通信时对网卡的 识别都是通过这个地址进行的。通常一个计算机仅有一个网卡,那这个网卡就可以代表 这个计算机,限制这个 MAC 地址即可控制计算机能否接入网络,从而有效控制了网络用户的上网权限
  • 通常有两种方式来控制:白名单和黑名单
    • 黑名单是指在名单内的设备不能接入网络。例如小孩的计算机不能访问
    • 白名单是指名单内的设备可以接入网络,其他设备均不能访问
  • 下图用于阻止指定客户端连接到因特网,第一个规则禁止黑名单访问网络, 第二个规则阻止从客户端连接路由器。这样该机器就不能通过该 OpenWrt 路由器访问 任何资源

  • 如果以自定义规则来实现黑名单,则使用如下 4 条规则进行设置:
    • 第一行首先定义了自定义链 MAC_FILTER,然后紧接着将 IPNUT 链的报文转到 MAC_FILTER,由它将匹配目标地址为路由器 IP 的报文。第三行规则将 FORWARD 链转 到 MAC_FILTER 自定义链中,这个将匹配经过路由器转发的流量。最后一个规则将源 MAC 地址的规则加入到 MAC_FILTER 链中。通常防火墙是默认允许局域网报文通过的, 因此可以仅设置拒绝通过的 MAC 即可

  • 例如,某企业想要保证仅授权用户可以连接 Wi-Fi。因为通常 Wi-Fi 的连接密码只有一个,如果多个人访问,经常会导致密码透露给非授权用户。白名单技术就在这时派上用 场,将授权用户的 MAC 地址增加到防火墙中,这样即使 Wi-Fi 连接密码泄露,非授权用 户也不能通过无线路由器访问网络。如果要设置白名单模式,则需要在规则的最后增加一 个默认拒绝规则

家长控制

  • OpenWrt 没有专门的家长控制模块,我们可以在防火墙功能中实现设置。例如, 禁止小孩在周一到周五上网,通过设置小孩专用的计算机 MAC 来禁止访问任何网络
  • 下图用于禁止指定 MAC 周一到周五将报文转发到互联网,weekdays 用来表示一 周中的第几天

  • 在企业也是同样的情况,有些公司在工作的时间会禁止使用互联网,或者是根据公司 管理策略仅能访问一些授权的网站。这些策略最难的部分在于管理政策中哪些允许哪些不 允许,这通常很难做出决定。在技术上使用防火墙来实现,UCI 配置只能从 IP 层进行限 制,因此如果限制访问域名,需要转换为 IP 地址
  • 下图所示的配置实现了周一到周五的工作时间内禁止局域网用户访问网络,并允 许来自你自己 MAC 主机的网络访问

五、防火墙管理

  • OpenWrt 12.09 的防火墙模块脚本目录为 /lib/firewall,管理脚本为/bin/fw:

  • 在配置修改之后,通过执行/etc/init.d/firewall restart 生效;调用/etc/init.d/firewall stop 将删除所有自定义的规则,并设置所有标准的规则链为接受(ACCEPT)。手动启动防火墙 执行/etc/init.d/firewall start

①永久停用防火墙

  • 防火墙可以通过执行/etc/init.d/firewall disable 永久禁用,需要 重启生效。注意:禁用不会删除已生效的规则。使用 enable 可重新激活使用防火墙

②停用防火墙

  • 运行/etc/init.d/firewall stop 以删除所有规则和设置默认策略为接受。 重启防火墙,运行/ etc/init.d/firewall start

③删除规则

  • 如果你增加了一个错误的规则,你可以通过以下方式删除。首先,错 误的命令规则可以通过以下命令找出索引:

  • 现在进行删除。例如删除 OUTPUT 链的第三条规则,可执行以下命令:

④调试产生的规则集

  • 观察通过防火墙程序产生的 iptables 命令是非常有用的,跟 踪防火墙重启的 iptables 错误,或者验证特定 UCI 配置规则的结果及作用
  • 为了看到执行过程中的规则,运行 fw 命令之前将 FW_TRACE 环境变量设置为 1。 FW_TRACE 变量使用在/lib/firewall/fw.sh 中,判断是否定义,如果已经定义,将输出执行 的每条规则:

  • 将执行输出重定向到一个文件中供以后分析,使用以下命令:

  • 在 OpenWrt 15.05 版本中防火墙使用 C 语言来重新实现,编译安装后为 fw3,使用“-d” 选项来进行输出 iptables 命令
  • 还有另外一个命令也支持输出防火墙规则:

六、测试防火墙

  • 防火墙规则配置越多,它就越复杂。在正式使用之前,首先需要对配置进行测试。在 配置修改完成后,需要调用以下命令来重启防火墙:

  • 对于目标进行测试可以有非常方便的目标地址测试,但是如果有黑名单或者时间 控制,就比较麻烦。测试时间需要你改变路由器系统时间进行测试,或者等待足够长的 时间。
  • 对于网络是否正常,可以使用 ping 命令进行进行测试。对于端口是否开放,可以用 NetCat 工具进行验证,NetCat 请参考在“测试工具”中描述的技术

七、附加

  • 安全域,是指相同安全等级的区域,由一个或多个接口组成,通常具有相同防火 墙规则
  • 黑名单,是指不能通过的用户名单,名单以外的用户都能通过。
  • 白名单,是指能通过的用户名单,名单之外的用户都不能通过
  • 家长控制,是指家长限制孩子使用计算机网络的时间以及仅能访问限定的网络 资源

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/102736680