OpenWrt 防火墙应用--iptables工具
OpenWrt 防火墙应用–iptables工具
openwrt 下的 NAT、DMZ、firewall、rules 都是由配置文件 “/etc/config/firewall” 进行控制管理的。此文件可以使用 UCI 进行控制,也可以使用 vi 编辑器直接修改。
该文件最后会在 /etc/init.d/firewall 启动的时候由 UCI 进行解码并且生成 iptables 规则生效。
1 iptables
1.1 表和链
链
”链“ 表示的是数据流经过的一个一个的关卡,一共有五个链:PREROUTING, INPUT, FORWORD, OUTPUT, POSTROUTING
- 到本机某进程的报文:PREROUTING -> INPUT
- 从本机某进程出去的报文:OUTPUT -> POSTROUTING
- 由本机转发的报文:PREROUTING -> FORWARD -> POSTROUTING
表
“表” 表示的是每个关卡上设置的规则的分类,一共有四类
- filter 表:负责过滤功能,防火墙;内核模块:iptable_filter
过滤表
filter是iptables的默认表,主要用于报文过滤,在这里根据报文的内容对报文进行丢 弃或者接收。
它包含有 3 个内置规则链:
①INPUT输入链:处理目标地址为本机 IP 地址的报文。
②OUTPUT输出链:处理本机 IP 地址产生的报文。
③FORWARD转发链:处理经过本机路由的报文。这样每一个IP报文只经过这3个内置链中的一个,便于进行数据报文匹配和处理。 这里是真正实现防火墙处理的地方。
注意:
①经过本机转发的报文经过 FORWARD 链,不经过 IPPUT 链和 OUTPUT 链。
②本机产生的报文经过 OUTPUT 链,其他的链不经过。
③去往主机的报文经过该主机的 INPUT 链,其他的链不经过。
- nat 表:网络地址转换功能;内核模块:iptable_nat
网络地址转换表
nat用来完成源/目的地址和端口的转换,当一个报文在创建一个新的连接时进入该表。
它也有3个内置规则链:①PREROUTING:用于修改到来的报文,只用来做网络地址转换。
②OUTPUT:用于修改本机产生的并且在路由处理之前的报文。
③POSTROUTING:用于修改准备出去的报文的地方。通过目的地址转换,你可以将服务器放在防火墙后面,并使用私有 IP 地址。一些协 议通过 nat 转换有困难(例如 FTP 或 SIP),连接跟踪将打开这些协议的数据/媒体流路径。nat 表不能用于报文过滤和报文修改,因为每一个连接流仅有一次机会进入该表中的规则链。
网络地址转换在路由功能前后都可能发生,源地址转换是在数据包通过路由之后在 POSTROUTING 规则链进行地址转换。目的地址转换是在路由之前,在 PREROUTING 规 则链进行地址转换。
- mangle 表:对报文进行拆分和修改;内核模块:iptable_mangle
修改表
这个表主要用来进行报文修改。
有5个内置规则链:
①REROUTING:针对到来的报文,在路由之前修改的地方。
②INPUT:针对目的地址为网关本身的报文。
③FORWARD:针对通过网关路由转发的报文。
④POSTROUTING:将要发送出去的报文的地方。
⑤OUTPUT:本机产生报文在路由之前修改的地方。通常使用该表进行报文修改,以便进行 QoS 和策略路由。通常每一个报文都进入该表,但不使用它来做报文过滤。
- raw 表:关闭 nat 表上启用的连接追踪机制:iptable_raw
原始表
这个表很少被用到,主要用于配置连接跟踪相关内容,在ip_conntrack 之前调用。
它提供了两个内置规则链:
①PREPROUTING:到达本机的报文。
②OUTPUT:本机进程产生的报文。这里是能够在连接跟踪生效前处理报文的地方,你可以标记符合某种条件的报文不被 连接跟踪处理。一般很少使用。
表和链的关系
并不是所有的链上都同时存在上面四个表,同时每个表也不会存在所有的链上:
- PREROUTING:raw,mangle,nat
- INPUT: mangle, filter
- FORWARD: mangle, filter
- OUTPUT: filter, nat, mangle, raw
- POSTROUTING: mangle, nat
同一个链中,表的优先级 raw -> mangle -> nat -> filter
指定规则表
-t
参数用来,内建的规则表有三个,分别是:nat、mangle 和filter,当未指定规则表时,则一律视为是filter
三规则表的功能如下:
nat:此规则表拥有PREROUTING 和 POSTROUTING 两个规则链,主要功能为进行一对一、一对多、多对多等网址转换工作(SNAT、DNAT),这个规则表除了作网址转换外,请不要做其它用途。
mangle:此规则表拥有 PREROUTING、FORWARD 和 POST