说明:
1、极路由使用的是OpenWrt做为操作系统,本身就是一个Linux,包管理使用opkg,只是改了一个界面而已。
2、Linux下的防火墙最终都会归iptables进行管理,OpenWrt的防火墙机制同样也是,最上层采用了自己基于UCI标准的配置方法管理防火墙firewall,最终写入到iptables。
3、UCI是OpenWrt统一配置文件的标准,真心不太喜欢这种语法,没iptables来的清晰。
4、OpenWrt基于firewall的配置,由于涉及到多个网口,有Wan和Lan这些,最终会转换成很多自定义的链,看来来很吃力,我的建议是直接在firewall层全部开启,然后自己使用iptables做限制。不建议停掉之后再自己写配置,不然你无法知道哪些网口是走向什么地方的。
5、firewall不能单独关闭,不然会无法上网。
简单教程:
OpenWrt下的NAT、DMZ、Firewall rules都是由配置文件“/etc/config/firewall”进行控制管理的。此文件可以使用UCI进行控制,也可以使用vi编辑器直接修改。
该文件最后会在/etc/init.d/firewall启动的时候由UCI进行解码并且生成iptables规则生效。因此使用者不需要了解iptables即可通过配置文件实现防火墙规则。
防火墙的修改生效,需要重启防火墙执行一下命令:
/etc/init.d/firewall reload
或
/etc/init.d/firewall restart
查看当前iptables的已启用策略语法为:
iptables -L
防火墙的基本设置
- config defaults防火墙默认参数表 | 键 | 值 | 是否必须设置 | 说明 | | —- | —- | —- | —- | | input | ACCEPT | 是 | 设置 INPUT 链(chain) 的过滤策略,可选值: ACCEPT 允许, REJECT 拒绝 | | output | ACCEPT | 是 | 设置 OUTPUT 链(chain) 的过滤策略,可选值: ACCEPT 允许, REJECT 拒绝 | | forward | REJECT | 是 | 设置 FORWARD 链(chain) 的过滤策略,可选值: ACCEPT 允许, REJECT 拒绝 | | syn_flood | 1 | 是 | 是否启用防洪水攻击。可选值:0关闭,1启用。 | | synflood_rate | 字符串 | 否 | 设置 SYN 包传输洪水攻击检测比率值,默认为:25 单位(包/秒) | | synflood_burst | 字符串 | 否 | 设置 SYN 包传输比率值识别洪水攻击,默认为:50 单位(包/秒) | | disable_ipv6 | 1 | 否 | 设置关闭掉 IPv6 的防火墙策略, 可选值:0忽略,1关闭。 |
这部分参考值使用系统默认值即可,无需修改:
config defaultsoption syn_flood 1option input ACCEPToption output ACCEPToption forward REJECT# Uncomment this line to disable ipv6 rules# option disable_ipv6 1
- config zone用于WAN/LAN域(zone)的参数表 | 键 | 值 | 是否必须设置 | 说明 | | —- | —- | —- | —- | | name | 字符串 | 是 | 域,必须是唯一值,可选值:wan,lan | | network | 列表值 | 否 | 哪些接口被捆绑到这个域中,可选接口的名称,比如:lan,wan,wan6 | | input | ACCEPT | 否 | 设置INPUT链(chain)的过滤策略,可选值: ACCEPT 允许, REJECT 拒绝 | | output | ACCEPT | 否 | 设置OUTPUT链(chain)的过滤策略,可选值: ACCEPT 允许, REJECT 拒绝 | | forward | ACCEPT | 否 | 设置FORWARD链(chain)的过滤策略,可选值: ACCEPT 允许, REJECT 拒绝 | | masq | 1 | 否 | 设置传输伪装,如果是WAN口必须为1 | | mtu_fix | 1 | 否 | 设置MTU的MSS钳制,如果是WAN口请为1 |
这部分配置也不需要做修改,参考:
config zoneoption name lanlist network 'lan'option input ACCEPToption output ACCEPToption forward ACCEPTconfig zoneoption name wanlist network 'wan'list network 'wan6'option input REJECToption output ACCEPToption forward REJECToption masq 1option mtu_fix 1
- config forwarding路由转发参数表 | 键 | 值 | 是否必须设置 | 说明 | | —- | —- | —- | —- | | src | lan | 是 | 设置转发来源 | | dest | wan | 是 | 设置转发目标 |
这部分也需要修改,参考:
config forwardingoption src lanoption dest wan
防火墙的规则
如果在路由产品中需要开发 “允许 WAN 口访问设备的特定端口”,可以设置本规则(比如开放 WAN 口允许 SSH 登入,或允许 WAN 口访问设备的 FTP),一般情况下无需设置。
防火墙规则在 /etc/config/firewall 中可以有任意数量的规则,这些规则定义了数据传输的动作和行为是被允许还是拒绝。
规则配置文件结构
config ruleoption name '规则名称'.....
config rule可选参数表
| 键 | 值 | 是否必须设置 | 说明 |
|---|---|---|---|
| name | 字符串 | 是 | 设置当前这个 rule 的名称 |
| target | 字符串 | 是 | 设置防火墙的动作,可选值:ACCEPT 许可, REJECT 拒绝, DROP 抛弃 |
| src | 字符串 | 否 | 数据源的zone域是哪个。可选值: wan / lan |
| src_ip | 字符串 | 否 | 数据源的IP地址是哪个。 |
| src_mac | 字符串 | 否 | 数据源的 MAC 地址是哪个。 |
| src_port | 字符串 | 否 | 数据源的端口,可以是一个端口,或一个端口范围,但是必须同时指定了协议类型 |
| proto | 字符串 | 否 | 数据源的协议类型,可选值: tcp, udp, tcpudp, udplit, icmp, esp, ah, sctp, 或all表示全部 |
| dest | 字符串 | 否 | 数据目标的 zone 域是哪个,可选值:wan / lan |
| dest_ip | 字符串 | 否 | 数据目标的IP地址。 |
| dest_port | 字符串 | 否 | 数据目标的端口,可以是一个端口,或一个端口范围,但是必须同时指定了协议类型 |
| family | 字符串 | 否 | 数据的协议族,可选值: ipv4, ipv6, any |
rule规则可以灵活设置,比如允许WAN口可以ssh到系统,举例:
config ruleoption name wan-sshoption src wanoption dest_port 22option proto tcpoption target ACCEPT
端口转发和 DMZ(demilitarized zone 隔离区)
端口转发是路由产品中常见的配置,它允许使用者通过WAN口访问特定的端口转发给局域网的一台电脑设备(比如WAN口访问80端口(HTTP)将转发给局域网某台网站服务器)。
端口转发也是在防火墙配置/etc/config/firewall中定义redirect段策略实现的。所有匹配的来源数据将根据目标设置转发到目标主机上。
firewall配置中可以有多个redirect转发策略,默认是没有开放任何转发的,如果需要转发请使用vi或UCI进行配置。
规则配置文件结构
config redirectoption name '名称'....
config redirect可选参数表
| 键 | 值 | 是否必须设置 | 说明 |
|---|---|---|---|
| name | 字符串 | 是 | 设置当前这个 redirect 的名称 |
| src | 字符串 | 是 | 转发源的 zone 域,一般转发都是转发从 wan 过来的访问 |
| src_ip | 字符串 | 否 | 转发源的 IP 地址指定 |
| src_mac | 字符串 | 否 | 转发源的 MAC 地址指定 |
| src_port | 字符串 | 否 | 转发源的端口指定 |
| proto | 字符串 | 否 | 转发源的协议类型,可选值:tcp, udp, tcpudp, udplit, icmp, esp, ah, sctp, 或all表示全部 |
| dest | 字符串 | 是 | 转发目标的 zone 域 |
| dest_ip | 字符串 | 否 | 转发目标的IP地址指定 |
| dest_mac | 字符串 | 否 | 转发目标的MAC地址指定 |
| dest_port | 字符串 | 否 | 转发目标的端口指定 |
端口转发的可配置性十分灵活,比如我们将 9020 这个端口转发给内网一台服务器的 80,举例:
config redirectoption name '9020-80'option proto 'tcp'option src 'wan'option src_dport '9020'option dest 'lan'option dest_ip '192.168.1.100'option dest_port '80'
将电脑192.168.1.2设置DMZ隔离区,举例:
config redirectoption src wanoption proto alloption dest_ip 192.168.1.2
参考:
http://wiki.openwrt.org/zh-cn/doc/uci(UCI)
http://wiki.openwrt.org/zh-cn/doc/uci/firewall(防火墙配置)
https://www.haiyun.me/archives/openwrt-iptables.html(自定义iptables替换firewall)
http://blog.csdn.net/u011641885/article/details/49303699(以上内容部分转自此篇文章)
